我有以下代碼,其中父母創建多個子進程並在之後將其殺死。一旦遇害,我想打印什麼殺死了孩子(在這種情況下是信號)。但是,代碼不打印。什麼似乎是問題?如何讓孩子打印殺死它的信號?
#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