我在c编码,想知道通过编码了解信号(例如SIGUSR1)是否终止进程的最佳方法。有没有办法用函数创建并标记它以便其他进程可以知道它?
更多信息: 这个过程是我在C中完成的一个程序。稍后当过程结束时(信号与否)我想要另一个程序我必须知道它。它们通过fifos连接。
答案 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