如何在Shell脚本中杀死正在等待的子进程

时间:2018-10-11 08:17:20

标签: linux bash shell kill-process

我的脚本如下

testscript.sh

#!/bin/bash

while true
do
  /sbin/tcpdump -n -c 2 -i eth0  >/tmp/pkt_eth0
  sleep 60
done

当我尝试杀死它时,testscript.sh消失了,但tcpdump的等待过程仍然存在。同样对于testscript.sh,我无法使用killall,因此需要pid

$kill -15 pid

但宁愿

$killall -15 testscript.sh

结束脚本和所有子进程。如何实现?

1 个答案:

答案 0 :(得分:2)

如果在进程ID之前设置减号,则子进程也会被杀死。测试:

script.sh:

#!/bin/bash
while true
do
  ./script2.sh 
  sleep 60
done

script2.sh:

#!/bin/bash
for ((i=1;i<=10;i++))
do
    echo "$i"
    sleep 10
done

使用./script.sh运行命令后,使用ps aux | grep script查找PID(从另一个终端),然后使用以下命令将其终止:

kill -- -13859

此处13859是script.sh的PID。运行ps aux | grep script后,您将看到两个脚本都已终止。

来源:http://fibrevillage.com/sysadmin/237-ways-to-kill-parent-and-child-processes-in-one-command