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时,两个过程都被终止了
不要使用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().
啊哈,进程组和会话以及进程组组长和会话组组长的谜团又出现了。
您的控制/C 向一组发送了信号。您需要向单个 pid 发出信号,因此请遵循 paxdiablo 的指示或从父进程向子进程发出信号(“杀死”)。并且不要忙着等待!将 sleep(1) 放入循环中,或者更好的是,将 wait(2) 系统调用之一放入循环中。
| 归档时间: |
|
| 查看次数: |
8043 次 |
| 最近记录: |