我有一个用 c 语言运行的应用程序(my_process.c)和一个脚本(stop_process.sh)来停止该应用程序并清理该进程持有的所有资源。
在应用程序代码中,假设我出于某种原因想要调用 stop_process 脚本,看起来 stop_process 在行 ( kill -9 my_process
) 之后被终止,并且没有执行脚本的其余部分。我认为它被杀死是因为脚本正在向父进程发送 SIGKILL。
my_process.c
function1() {
system(nohup /home/admin/stop_process.sh < /dev/null &);
}
int main() {
.....
......
function1();
.....
.....
}
停止进程.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);
}
请注意,在后台调用 shell 脚本是没有意义的。