1
我正在寫一個Unix程序,其中父進程分叉孩子p1.the父進程處理SIGUSR1。
子進程每1秒產生一個1到9之間的隨機數並使用管道發送給父親父接收該數字並將其打印到控制檯。當父進程接收到SIGUSR1信號時,他開始只打印奇數並且當收到的號碼是11時,他通過發送SIGTERM信號殺死孩子。父親等待狀態,然後終止孩子。孩子和父母之間的進程間通信C
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#define READ_END 0
#define WRITE_END 1
volatile sig_atomic_t token;
void handle_me(int signum)
{
token=0;
}
int main(int argc, char *argv[]){
pid_t child1;
token=1;
int pipe1[2],status;
unsigned int bufChild1,bufChild2;
if (pipe(pipe1) == -1)
{
fprintf(stderr, "Pipe failed");
}
child1 = fork();
if (child1 < 0)
{
fprintf(stderr, "Fork Failed");
return 0;
}
else if (child1 == 0)
{
printf(" child with pid %d\n", getpid());
printf("The Parent pid is %d\n", getppid());
while(1)
{
bufChild1 = (unsigned int)rand()%9 +1;
fprintf(stdout, "generated: %u\n", bufChild1);
close(pipe1[READ_END]);
write(pipe1[WRITE_END],&bufChild1,sizeof(bufChild1)); //write into the Parent
close(pipe1[WRITE_END]);
}
}
else
{
signal(SIGUSR1,handle_me);
printf(" Parent Process\n");
while(!token)
{
close(pipe1[READ_END]);
read(pipe1[READ_END],&bufChild2,sizeof(bufChild2)); //write into the Parent
fprintf(stdout, "Received: %u\n", bufChild2);
close(pipe1[WRITE_END]);
}
}
wait(&status);
return 1;
}
我不知道如何實現這一條件時,父進程捕捉SIGUSR1信號,他開始只打印奇數當收到數是11,他通過發送SIGTERM信號殺死了孩子。
我使用了一個全局變量,如果SIGUSR1被父親捕獲,可以設置它。
如果有人能幫助我,我將非常感激。