我有一个包含一个父进程和两个子进程的树进程,我想发送一个信号,并且只有 child2 接收它,为 child2 创建一个处理程序,并在处理程序中收到它时显示一条消息。
pid_t pid, pid1, pid2;
if((pid=fork())==0)
printf("child1");
else if((pid2=fork())=0)
printf("child2);
signal(SIGUSR1, handler); //EDITED
else
printf("parent");
kill(pid2, SIGUSR1); //EDITED
void handler(int signal)
{
printf("received");
但我不知道如何仅为child2发送信号SIGUSR1
最佳答案
假设伪代码的缩进代表嵌套深度,现在原则上是正确的,但它存在计时问题:
- 父进程可以在 child2 安装信号处理程序之前向 child2 发送信号。为了解决这个问题,您可以让父进程在 fork child2 之前安装处理程序(由子进程继承)。
- child2 可能会在父进程发送信号之前结束,因此不会调用处理程序。如果您想看到它被调用,您可以给 child2 一些事情做,即使它只是一个
sleep(...)
。
关于c - 从父级向特定子级发送信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41107538/