【发布时间】:2017-01-09 13:43:50
【问题描述】:
我需要fork 两个子进程。一个可以接收信号3,打印hello并将信号4发送给另一个子进程;另一个可以接收信号4,打印world并将信号3发送给第一个子进程。
启动时,父进程会在休眠 3 秒后向第一个子进程发送信号 3。
然后 3 秒后,父进程会发送SIGKILL 杀死他们两个。
我不知道如何向特定的子进程发送信号(我知道我们有一个函数kill 可以发送信号,但我不知道在这里使用它)。
这是我的代码:
#include <stdio.h>
#include <signal.h>
#include <sys/wait.h>
#include <unistd.h>
#include <stdlib.h>
void func(int n)
{
printf("ping\n");
// how to send signal 4 to the second process?
}
void func2(int n)
{
printf("pong\n");
// how to send signal 3 to the first process?
}
int main()
{
pid_t pid;
int i;
for(i = 0; i < 2; i++)
{
pid = fork();
if(pid == 0)
{
if(i == 0)
{
signal(3, func);
}
else
{
signal(4, func2);
}
while(1);
}
else
{
if(i == 1)
{
sleep(3);
// how to send signal 3 to the first child process?
sleep(3);
// how to kill the two children?
}
}
}
return 0;
}
【问题讨论】:
-
在信号上下文中调用
printf()的未定义行为。 -
@EOF 那我该怎么办?
-
@alk 但我仍然不知道如何向子进程发送信号。
-
kill()系统调用是您所需要的。棘手的部分是您必须以某种方式告诉每个孩子其兄弟姐妹的 PID。也许父母通过在管道上写信息来告诉他们两个?或者,也许您使用进程组来发出信号。