nohup을 사용하여 시작된 프로세스가 종료된 후에 실행되도록 트랩 명령을 구성하려면 어떻게 해야 합니까?

nohup을 사용하여 시작된 프로세스가 종료된 후에 실행되도록 트랩 명령을 구성하려면 어떻게 해야 합니까?

저는 a를 사용하여 tmpfile이를 my_exe쉘 스크립트에 전달하고 있습니다. 종료 tmpfile후 내용을 삭제해야 my_exe해서 를 사용하고 있습니다 trap "rm $tmpfile" exit.

my_exe터미널을 닫을 때도 닫히는 것을 방지 해야 하므로 nohup my_exe $tmpfile &. 다음과 같이 진행됩니다.$tmpfilemy_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

관련 정보