我的脚本如下
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
结束脚本和所有子进程。如何实现?
答案 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