c - 从父级向特定子级发送信号

标签 c process signals parent

我有一个包含一个父进程和两个子进程的树进程,我想发送一个信号,并且只有 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/

相关文章:

c - snprintf 和 Visual Studio 2010

c - Windbg条件断点不会断?

c - 数组中的整数索引递增

c - 从进程 ID 获取进程名称 (win32)

windows - 无法终止 Perl 中的进程

multithreading - AIO 可以在不创建线程的情况下运行吗?

使用信号和 sigsegjmp/siglongjmp 捕获 SIGSEGV

c - 为什么mov指令不能正确执行?

c++ - 通过 PID 以编程方式终止进程的方法

c - Linux 上的异​​步信号处理程序是如何执行的?