我有一个父进程和两个子进程的树进程,我想发送一个信号,只有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
答案 0 :(得分:0)
假设您的伪代码的缩进表示嵌套深度,现在原则上是正确的,但存在时序问题:
sleep(…)
。答案 1 :(得分:0)
我希望这是您实际问题的伪代码。在这种情况下,问题在于父母需要等到孩子实际安装了处理程序。这可以通过让父母等到孩子发信号(“告诉我我已经准备好出发了”)来实现。
在父代码中有一个标记为bChildUp。然后等待
while (!bChildUp)
{
// do nothing till the child is up.
}
将信号从child2发送到父进程。接收信号的父进程可以将bChildUp = TRUE更改。父级将退出等待状态,您的任务可以继续进行(但是您可以通过使用siginfo_t获取发送信号的进程的pid并使用sigaction来注册信号来检查信号是否确实来自child2)。
遇到这类问题
我建议在启动后在child2中仅创建一个文件,然后让父进程等待直到该文件被创建。