【问题标题】:How to send and trap a signal sent to a PID, using C如何使用 C 发送和捕获发送到 PID 的信号
【发布时间】:2011-05-05 03:38:06
【问题描述】:

假设,我知道我的父 id 的过程并想

kill(my_parent_id, SIGTERM)

作为父进程,我怎样才能捕捉到这个信号?

【问题讨论】:

    标签: c process signals


    【解决方案1】:

    注册捕捉信号:

    void termination_handler(int sig)
    {
       /* do something */
    }
    
    struct sigaction handler;
    
    handler.sa_handler = termination_handler;
    sigemptyset (&handler.sa_mask);
    handler.sa_flags = SA_RESTART;
    
    sigaction(SIGTERM, &handler, NULL);
    

    这是一个很好的example page

    您可以使用旧样式,但不建议:

    void termination_handler()
    {
        /* do something */
    }
    
    signal(SIGTERM, termination_handler);
    

    【讨论】:

    • 对。这很好用,我使用“信号”。如果我向特定的 PID 发送终止命令,作为该进程,我如何确定信号是按我的方式发送的?
    • 你几乎肯定想要handler.sa_flags = SA_RESTART;。非重启信号将严重破坏不期望得到EINTR 并且不处理它的代码。
    • 伙计们......我肯定在这里遗漏了一些东西。您能否提供一个通过 kill 命令将信号发送到 pid 的示例?
    • 您可以使用getppid() 获取您的父母ID,并使用:kill(getppid(), SIGTERM); 向其发送信号可能还想确定您也知道您正在向谁发送信号。
    • 如果我从我的程序之外的某个地方接收到一个信号,我如何设置一个监听器,以便我可以采取行动?
    猜你喜欢
    • 2015-05-11
    • 2012-07-03
    • 2011-08-08
    • 1970-01-01
    • 1970-01-01
    • 2017-05-20
    • 1970-01-01
    • 2018-03-05
    • 2012-07-15
    相关资源
    最近更新 更多