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);
}
バックグラウンドでシェルスクリプトを呼び出すことは意味がありません。