将SIGINT发送到子进程

ThP*_*ThP 2 c++ linux signals sigint

我正在尝试创建一个子进程,然后将SIGINT发送给子进程而不终止父进程.我试过这个:

pid=fork();
  if (!pid)
  {
      setpgrp();
      cout<<"waiting...\n";
      while(1);
  }
  else
      {
      cout<<"parent";
      wait(NULL);
      }
Run Code Online (Sandbox Code Playgroud)

但当我点击Cc时,两个过程都被终止了

pax*_*blo 8

不要使用CTRL-C,这会向具有相同控制终端的所有进程发送信号(即,在同一会话中).setpgid虽然我认为有一个setsid(设置会话ID)调用用于此目的,但这是不会改变的.

最简单的解决方案只是针对特定流程而不是会话.从命令行:

kill -INT pid
Run Code Online (Sandbox Code Playgroud)

来自C:

kill (pid, SIGINT);
Run Code Online (Sandbox Code Playgroud)

其中pid是您要发送信号的进程ID.

父级可以从返回值中获取相关的PID fork().如果孩子想要自己的PID,它可以打电话getpid().


Dig*_*oss 5

啊哈,进程组和会话以及进程组组长和会话组组长的谜团又出现了。

您的控制/C 向一组发送了信号。您需要向单个 pid 发出信号,因此请遵循 paxdiablo 的指示或从父进程向子进程发出信号(“杀死”)。并且不要忙着等待!将 sleep(1) 放入循环中,或者更好的是,将 wait(2) 系统调用之一放入循环中。