我有以下代码,其中父母创建多个子进程并在之后将其杀死。一旦遇害,我想打印什么杀死了孩子(在这种情况下是信号)。但是,代码不打印。什么似乎是问题?如何让孩子打印杀死它的信号?
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/wait.h>
int i;
static void signal_handler(int signo)
{
if (signo == SIGUSR1)
{
printf("child %d received sigusr1\n", i + 1);
}
}
int main(void)
{
char buff[50];
int status;
if (signal(SIGUSR1, signal_handler) == SIGUSR1)
{
perror("Signal handling error");
}
pid_t cpid, count;
for (i = 0; i < 5; i++)
{
cpid = fork();
if (cpid == 0)
{
sleep(10);
//exit(0);
}
else if (cpid > 0)
{
kill(cpid, SIGUSR1);
int status;
int n = waitpid(cpid, &status, 0);
if (n != cpid)
{
perror("error");
}
if (WIFSIGNALED(status))
{ /* get WTERMSIG(status) */
printf("killed by signal=%d\n", WTERMSIG(status));
}
}
else
{
perror("Fork error: ");
exit(1);
}
}
}
嗯 - 我想在父母的杀人信号到达之前,孩子们终止并退出(0)。应让儿童保持活跃与睡眠(),所以他们仍然在SIGUSR信号到达。 – user422005
我试过,但它仍然没有打印这部分: printf(“杀死信号=%d \ n”); WTERMSIG(status); – user3015353