【发布时间】:2014-02-22 09:16:44
【问题描述】:
我有一个这样的调度程序脚本 (dispatcher.sh):
for system in a b c
do
cd /usr/xyz/$system/
mkdir -p /usr/xyz/$system/time
{ time `./run_program.sh;wait` ;} > /usr/xyz/$system/time/time.log 2>&1 &
done
我写这个是为了在每个文件夹中启动 run_program.sh 并记录执行时间。每个 run_program.sh 中的任务各不相同,有些会分叉子进程和孙子进程。
我希望能够停止/杀死每个 run_program.sh 及其派生子进程和孙子进程。
我也想知道每个 run_program 的子进程和孙进程正在运行。有什么方法可以检查分叉树吗?
编辑:
我的系统上没有 pstree,所以我很难直观地了解父进程和子进程之间的 pid 关系。如果我杀死父进程,子进程会被杀死吗?我目前使用
ps -eo pid,pgid,args | awk '{if($2==PGID){print $1}}' PGID=pid| xargs kill -9
杀死一个父进程的子进程。假设A分叉B,B分叉C(A->B->C),我杀死进程B,C会自动被杀死吗?如何杀死包括A和B在内的进程?
【问题讨论】:
-
使用
pstree查看进程树,-p选项会显示所有的PID。然后你可以用kill <pid>杀死他们。
标签: linux bash unix process fork