了解SIGUSR1是否已发送到流程的最佳方式

时间:2016-12-27 15:34:32

标签: c linux signals

我在c编码,想知道通过编码了解信号(例如SIGUSR1)是否终止进程的最佳方法。有没有办法用函数创建并标记它以便其他进程可以知道它?

更多信息:    这个过程是我在C中完成的一个程序。稍后当过程结束时(信号与否)我想要另一个程序我必须知道它。它们通过fifos连接。

1 个答案:

答案 0 :(得分:1)

在父进程中,您可以使用wait()系统调用的WIFSIGNALED(status)宏来检查子进程是否被信号终止。

您也可以使用WTERMSIG(status)宏来获取信号编号。

这是一个展示这个想法的代码。

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/wait.h>

int main()
{
    pid_t n = fork();
    if(n==0)
    {
        execvp(/*Some program here for child*/);
    }

    //parent does something

    //Parent waits for child to exit.
    int status;
    pid_t childpid = wait(&status);

    if(WIFSIGNALED(status))
        printf("Parent: My child was exited by the signal number %d\n",WTERMSIG(status));
    else
        printf("Parent: My child exited normally\n"):

    return 0;
}

您可以在手册中详细了解它:man 2 wait