为另一个进程杀死具有相同GID的进程
Kill a process which has same GID for another process
想要终止树的进程。例如:A->B->C->D->E我想杀死进程C、D、E,但不想杀死A和B。
假设所有进程的Parent id都是1234。
ps x -o "%p %r %y %x %c
{PID_A} 1234
{PID_B} 1234
{PID_C} 1234
{PID_D} 1234
{PID_E} 1234
我不能杀死-9-1234,因为它也杀死了A和B。
除非在kill -1
或kill -15
(也称为kill -HUP
或kill -TERM
(等政治机制失败后作为最后手段,否则不应该执行kill -9
。
你的问题从A->B->C->D->E
开始,这表明A启动B,B启动C,C启动D,D启动E。然而,你说1234是所有B、C、D、E的父PID,可能还有A(假设A不是PID=1234(。因此,在第二个场景中,您有6个进程:1234和A到E,每个进程都是由1234启动的。
从某些方面来说,这并不重要。在不杀死A和B(和1234(的情况下杀死进程C、D、E的唯一方法是列出C、D和E的进程ID。除非采取措施将这三个进程放在彼此相同的进程组或会话中,并与A、B(和1234(放在单独的进程组和会话中,否则没有任何替代方案。
您可以查看kill()
系统调用的规范:
如果pid大于0,则sig应发送到进程ID等于pid的进程。
如果pid为0,则sig应发送给所有进程(不包括一组未指定的系统进程(,其进程组ID等于发送方的进程组ID,并且该进程有权发送信号。
如果pid为-1,则sig应发送给进程有权发送该信号的所有进程(不包括一组未指定的系统进程(。
如果pid为负,但不是-1,则sig应发送给所有进程(不包括一组未指定的系统进程(,这些进程的进程组ID等于pid的绝对值,并且该进程有权发送信号。
这些是可用的信号选项。这些选项都不适用于过程1234和A…E的任何组织(杀死C、D、E并保留1234、A、B未填充(。
- boost::进程间消息队列引发错误
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 是否可以通过C++扩展强制多个python进程共享同一内存
- IPC使用多个管道和分支进程来运行Python程序
- 异常属于C++中的线程还是进程
- WMI检测进程创建事件-c++
- c++多进程编写一个唯一的文件
- 如何在C++中将函数发送到另一个进程
- 在Qt Creator中,如何在连接到正在运行的进程后查看控制台输出
- 终止 QProcess 不会终止子进程
- 将返回值从 exe 传递到 bat,并将其传递给 C# 中的进程
- COM :是否可以查看是否存在对我的某个 COM 对象的进程外引用?我可以释放它吗?
- Windows 进程间同步类似事件?
- 在挂钩启动新线程时解除挂钩进程
- pclose() 不会给我进程退出代码
- 运行代码时,c++ 会终止进程
- 可以读入进程内存的最大块大小是多少?
- 枚举进程模块在有效句柄上返回无效句柄
- 如何读取特定地址的进程内存?
- 为另一个进程杀死具有相同GID的进程