我有一个包含两个进程的程序。其中一个可能因为异常而终止或退出。当我测试程序时,我使用Control+c结束程序,但子进程仍在运行。
是否有选项可以在我按下Control+c或父进程终止时杀死该进程?
虽然没有自动化这一过程的选项,但您可以编写支持它的应用程序。前提是想要终止其他进程的进程必须拥有其进程ID; 这是父进程从fork()
调用中返回的值。
为每个进程设置一个SIGINT
信号处理器-当按下Control-C时,将向进程发送SIGINT
。在此信号处理程序中,将信号发送到另一个进程,然后使用exit()
退出。
您可以在子进程上启动一个监听器,定期检查父进程是否仍在运行。
您可以在这里找到所有需要的答案。
例如,您可以捕获CTRL+C并在SIGINT信号上运行子函数,以管理您想要退出或杀死正在运行的PID(s)的方式。
非功能性示例以说明原理。
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
}
trap 'clean_exit' INT
。 - Jacek Konieczny