![]() |
1
1
这些答案都不是很正确-最简单的处理方法是将进程放入进程组(子进程继承父进程组,因此闭源二进制文件也应该是好的)通过 getpgrp/setpgrp 然后一下子杀了他们 killpg 这就保证了它们都能同时接收到信号,而不存在任何让子进程在正确的时间分叉以逃脱的竞争条件。 |
![]() |
2
0
这听起来像是一个全面的坏设计。你为什么要那样?这对你来说更有意义吗?
|
![]() |
3
0
从kill(2)系统调用的手册页: 如果pid为负但不是-1,则向进程组ID等于pid绝对值且进程有权发送信号的所有进程(未指定的系统进程集除外)发送sig。 编辑(我要求在此澄清,但我需要评论区没有的空间和格式) 所以pstree会打印:
分组方式如下:
以及来自
还有一些建议
可能是杀戮的预期,还有一些信号
你可以试试看
实现这一目标的一个更自动的方法是
|
![]() |
4
0
看起来最简单的方法就是使用bash。我可以简单地捕获ps-axo-pid,ppid的输出。我已经有了第一个进程用它的pid生成一个锁文件,所以bash脚本可以用父进程的pid的ppid查找第一个项目,并将其与父进程一起发送一个sigterm。 |
![]() |
5
0
最后,我的解决方案是: 获取父进程从程序中派生的子进程的PID(预期进程)。 将该PID和第一个进程的PID一起写入锁文件。 编写一个bash脚本来查找哪些进程具有第二个进程的PID的父进程。 杀死第一个进程和bash脚本返回的进程ID。一切都完好无损。有可能最好将killpg命令与此方法结合使用,我将看一看。 |
![]() |
tgogos · Golang-按名称终止进程 8 年前 |
![]() |
Tastalian · Python多处理中挂起子进程的硬杀伤 9 年前 |
![]() |
Marcel · 家长的PID在循环中不起作用,导致Bash停止睡眠 9 年前 |
![]() |
runner · 在linux中关闭电源时停止应用程序的Shell脚本 10 年前 |
![]() |
Tomas · “For”循环并在Bash脚本中休眠 11 年前 |