【问题标题】:How to kill several child processes spawned from same parent?如何杀死从同一个父进程产生的几个子进程?
【发布时间】:2011-06-10 14:49:32
【问题描述】:

出于测试目的,我正在运行几个(少数100sexpect 脚本。所有都是从同一个父级产生的(有时它的 pid 是1)。有没有办法在不更改源代码和不杀死父进程本身的情况下一次性杀死它们?比如:

[root@devx-csb4 expect_scripts] kill -9 <child of pid=...>

所有的expect脚本都是一样的,只是循环运行;见下文ps -ef | grep milind

root     19879     1  0 20:27 pts/9    00:00:00 /usr/bin/expect /root/pjproject-1.0.3/pjsip-apps/bin/expect_scripts/milind.exp 13265 55650
root     19889     1  0 20:27 pts/9    00:00:00 /usr/bin/expect /root/pjproject-1.0.3/pjsip-apps/bin/expect_scripts/milind.exp 13266 55660
root     19899     1  0 20:27 pts/9    00:00:00 /usr/bin/expect /root/pjproject-1.0.3/pjsip-apps/bin/expect_scripts/milind.exp 13267 55670
root     19930     1  0 20:27 pts/9    00:00:00 /usr/bin/expect /root/pjproject-1.0.3/pjsip-apps/bin/expect_scripts/milind.exp 13268 55680
root     19940     1  0 20:27 pts/9    00:00:00 /usr/bin/expect /root/pjproject-1.0.3/pjsip-apps/bin/expect_scripts/milind.exp 13269 55690
root     19973     1  0 20:27 pts/9    00:00:00 /usr/bin/expect /root/pjproject-1.0.3/pjsip-apps/bin/expect_scripts/milind.exp 13270 55700
root     19983     1  0 20:27 pts/9    00:00:00 /usr/bin/expect /root/pjproject-1.0.3/pjsip-apps/bin/expect_scripts/milind.exp 13271 55710
root     19993     1  0 20:27 pts/9    00:00:00 /usr/bin/expect /root/pjproject-1.0.3/pjsip-apps/bin/expect_scripts/milind.exp 13272 55720
root     20024     1  0 20:27 pts/9    00:00:00 /usr/bin/expect /root/pjproject-1.0.3/pjsip-apps/bin/expect_scripts/milind.exp 13273 55730
root     20034     1  0 20:27 pts/9    00:00:00 /usr/bin/expect /root/pjproject-1.0.3/pjsip-apps/bin/expect_scripts/milind.exp 13274 55740
root     20067     1  0 20:27 pts/9    00:00:00 /usr/bin/expect /root/pjproject-1.0.3/pjsip-apps/bin/expect_scripts/milind.exp 13275 55750
root     20104     1  0 20:27 pts/9    00:00:00 /usr/bin/expect /root/pjproject-1.0.3/pjsip-apps/bin/expect_scripts/milind.exp 13276 55760
root     20114     1  0 20:27 pts/9    00:00:00 /usr/bin/expect /root/pjproject-1.0.3/pjsip-apps/bin/expect_scripts/milind.exp 13277 55770
root     20145     1  0 20:27 pts/9    00:00:00 /usr/bin/expect /root/pjproject-1.0.3/pjsip-apps/bin/expect_scripts/milind.exp 13278 55780
root     20155     1  0 20:27 pts/9    00:00:00 /usr/bin/expect /root/pjproject-1.0.3/pjsip-apps/bin/expect_scripts/milind.exp 13279 55790
root     20188     1  0 20:27 pts/9    00:00:00 /usr/bin/expect /root/pjproject-1.0.3/pjsip-apps/bin/expect_scripts/milind.exp 13280 55800
root     20198     1  0 20:27 pts/9    00:00:00 /usr/bin/expect /root/pjproject-1.0.3/pjsip-apps/bin/expect_scripts/milind.exp 13281 55810
root     20208     1  0 20:27 pts/9    00:00:00 /usr/bin/expect /root/pjproject-1.0.3/pjsip-apps/bin/expect_scripts/milind.exp 13282 55820
root     20239     1  0 20:27 pts/9    00:00:00 /usr/bin/expect /root/pjproject-1.0.3/pjsip-apps/bin/expect_scripts/milind.exp 13283 55830
root     20249     1  0 20:27 pts/9    00:00:00 /usr/bin/expect /root/pjproject-1.0.3/pjsip-apps/bin/expect_scripts/milind.exp 13284 55840

【问题讨论】:

    标签: unix process kill


    【解决方案1】:
    1. 给他们一个共同的子字符串的名字并使用pkill(1)

    2. 使用ps,获取父进程ID,杀死所有附加到父进程的PID。当父进程为 1 时,这是不可取的。请注意,您使用 kill -9 pid= 的概念遇到了同样的问题——所有系统守护进程都是 PID 1 的子进程。

    3. 保留期望脚本名称的列表;运行 ps 并为列表中的每个名称找到 PID;杀了它。

    【讨论】:

    • 谢谢查理,但是请您看看编辑后的问题并给出一些解决方案。
    • 使用方案一:pkill milind.exp
    • 太棒了!以及是否存在某种模式,例如milind_1.exp, milind_2.exp 等。
    • 阅读手册页(在问题中链接)。模式是一个扩展的正则表达式,所以像 'milind_[0-9].exp` 应该这样做。
    猜你喜欢
    • 2013-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多