我有一个包含两个进程的程序。其中一个可以终止或退出,因为一个例外。当我正在测试程序时,我使用Control + c完成它,但子进程仍在运行。
当我按下control + c或父进程终止时,是否有任何选项可以终止进程。
答案 0 :(得分:6)
没有选项可以自动执行此操作,但您可以编写应用程序代码来支持它。先决条件是希望对方终止的进程必须具有进程ID;这是父母从fork()
电话中收到的值。
为每个进程提供SIGINT
的信号处理程序 - 当按下control-C时,SIGINT
将被发送到进程。在此信号处理程序中,将信号发送到您的其他进程,然后exit()
。
答案 1 :(得分:1)
您可以在子进程上启动侦听器,定期检查父进程是否仍在运行。
答案 2 :(得分:0)
您可以找到所需的所有答案 here 例如,您可以陷阱 CTRL + C并在 SIGINT 信号上运行子功能,该功能管理您要退出的方式或 kill 正在运行的PID。
非功能性实例来说明原理
SIGINT=2
trap 'clean_exit' $SIGINT
# other thgs in your main prog
function clean_exit(){
# define SIGTERM and your $pid according to your need
kill -$SIGTERM $pid
#other things to do
}