![nohup을 사용하여 시작된 프로세스가 종료된 후에 실행되도록 트랩 명령을 구성하려면 어떻게 해야 합니까?](https://linux55.com/image/207872/nohup%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EC%8B%9C%EC%9E%91%EB%90%9C%20%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EA%B0%80%20%EC%A2%85%EB%A3%8C%EB%90%9C%20%ED%9B%84%EC%97%90%20%EC%8B%A4%ED%96%89%EB%90%98%EB%8F%84%EB%A1%9D%20%ED%8A%B8%EB%9E%A9%20%EB%AA%85%EB%A0%B9%EC%9D%84%20%EA%B5%AC%EC%84%B1%ED%95%98%EB%A0%A4%EB%A9%B4%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%ED%95%B4%EC%95%BC%20%ED%95%A9%EB%8B%88%EA%B9%8C%3F.png)
저는 a를 사용하여 tmpfile
이를 my_exe
쉘 스크립트에 전달하고 있습니다. 종료 tmpfile
후 내용을 삭제해야 my_exe
해서 를 사용하고 있습니다 trap "rm $tmpfile" exit
.
my_exe
터미널을 닫을 때도 닫히는 것을 방지 해야 하므로 nohup my_exe $tmpfile &
. 다음과 같이 진행됩니다.$tmpfile
my_exe
#!/bin/bash
tmpfile=$(mktemp)
trap "rm $tmpfile" exit
echo "aaa" > $tmpfile
nohup my_exe $tmpfile &
trap
실제로 종료를 기다리도록 명령을 구성하려면 어떻게 해야 합니까 my_exe
?
답변1
스크립트의 마지막 줄은 my_exe
백그라운드에서 호출됩니다. 이는 호출이 my_exe
즉시 성공 코드를 반환한다는 의미입니다.
귀하의 스크립트가 아는 한, my_exe
해당 스크립트가 호출되어 성공적으로 작업을 완료했습니다. 스크립트에는 실행할 다른 명령이 없으므로 스크립트가 종료되어 임시 파일 삭제 트랩이 트리거됩니다.
트랩은 외부 명령이 아니기 때문에 원하는 방식으로 실행되도록 트랩을 구성할 수 없습니다. 스크립트를 실행하는 쉘의 내부 기능입니다. 트랩 기능이 완료될 때까지 기다리려면 my_exe
스크립트가 my_exe
완료될 때까지 기다려야 합니다.
실행 중에 터미널을 닫고 싶다고 하셨으니 my_exe
호출 회선에서 &를 제거하는 것이 좋습니다 my_exe
. 스크립트는 my_exe
임시 파일 사용이 완료될 때까지 기다립니다. 대신 &를 사용하여 백그라운드에서 스크립트를 실행하세요.
원하는 방식으로 작동하려면 약간의 실험이 필요할 수 있습니다. 프로세스를 종료하지 않고 터미널 창을 닫을 수 있는지, 임시 파일이 올바른 시간에 삭제되는지 확인하는 것 /bin/sleep 15
보다 호출된 스크립트 버전으로 테스트하는 것이 좋습니다 .my_exe