/home/admin/restart_process.sh

/home/admin/restart_process.sh

我有一个用 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 脚本是没有意义的。

相关内容