【问题标题】:Kill process when father process ends with Control+C当父进程以 Control+C 结束时终止进程
【发布时间】:2011-10-31 10:38:13
【问题描述】:

我有一个包含两个进程的程序。其中之一可能会因为异常而终止或退出。在测试程序时,我使用 Control+c 完成了它,但子进程仍在运行。

当我按下 control+c 或父进程终止时,是否有任何选项可以终止进程。

【问题讨论】:

  • 你可以捕获 control + c (SIGINT),并且在信号处理程序中你可以杀死子进程..但是为了什么?

标签: c linux process


【解决方案1】:

没有选项可以自动执行此操作,但是您可以编写应用程序来支持它。一个先决条件是希望对方终止的进程必须有它的进程ID;这是父级从fork() 调用返回的值。

给每个进程一个 SIGINT 的信号处理程序 - 当按下 control-C 时,SIGINT 被发送到进程。在此信号处理程序中,将信号发送到您的其他进程,然后exit()

【讨论】:

    【解决方案2】:

    您可以在子进程上启动一个监听器,定期检查父进程是否仍在运行。

    【讨论】:

    • 如果有更好的解决方案,轮询是邪恶的。
    【解决方案3】:

    您可以找到所有您需要的答案here
    例如,您可以 trap 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
    }
    

    【讨论】:

    • “陷阱”部分可以写得更简洁,没有额外的变量:trap 'clean_exit' INT.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多