/home/admin/restart_process.sh

/home/admin/restart_process.sh

c(my_process.c)에서 실행 중인 애플리케이션과 애플리케이션을 중지하고 프로세스가 보유한 모든 리소스를 정리하는 스크립트(stop_process.sh)가 있습니다.

애플리케이션 코드에서 어떤 이유로 stop_process 스크립트를 호출하려고 한다고 가정해 보겠습니다. 이는 kill -9 my_process() 줄 이후에 stop_process가 종료되고 스크립트의 나머지 부분이 실행되지 않는 것처럼 보입니다. 스크립트가 SIGKILL을 상위 프로세스로 전송하기 때문에 종료되는 것 같습니다.

my_process.c

function1() {
    system(nohup /home/admin/stop_process.sh < /dev/null &);
}

int main() {
    .....
    ......
    function1();
    .....
    .....
}

process.sh 중지

cleanup 
.......
.......
kill -9 my_process
kill -9 xxx
kill -9 yyy
......
.......
cleanup

"kill -9 my_process" 줄 뒤에 다음 메시지가 표시됩니다.

Jan 17 21:28:22 Signal 15 (TERM) caught by ps (procps-ng version 3.3.10).
Jan 17 21:28:22 ps:display.c:66: please report this bug

C 프로세스를 종료하고 정리가 완료되면 다시 시작하기 위해 c에서 호출할 수 있는 스크립트를 어떻게 작성할 수 있습니까?

답변1

귀하의 stop_process 스크립트는 귀하의 스크립트를 성공적으로 종료한 것으로 보입니다 my_process. 문제는 my_process스크립트가 종료되어 더 이상 코드를 실행할 수 없다는 것입니다. 을 다시 시작하려면 단순히 중지하는 대신 my_process다른 이름의 스크립트를 사용하여 종료하고 다시 시작하는 것이 좋습니다 .my_process

/home/admin/restart_process.sh

# ...
kill -9 my_process
kill -9 xxx
kill -9 yyy
# ...
my_process

my_process.c

function1() {
    system(nohup /home/admin/restart_process.sh < /dev/null);
}

백그라운드에서 쉘 스크립트를 호출하는 것은 의미가 없습니다.

관련 정보