杀死并重新启动适合某种模式的多个进程

时间:2010-08-04 02:10:39

标签: unix shell scripting kill

我正在尝试编写一个shell脚本,它会杀死所有正在运行的匹配特定模式的进程,然后重新启动它们。我可以用以下方式显示流程:

ps -ef|grep ws_sched_600.sh|grep -v grep|sort -k 10

其中列出了相关流程:

user 2220258       1   0 16:53:12      -  0:01 /bin/ksh /../../../../../ws_sched_600.sh EDW02_env
user 5562418       1   0 16:54:55      -  0:01 /bin/ksh /../../../../../ws_sched_600.sh EDW03_env
user 2916598       1   0 16:55:00      -  0:01 /bin/ksh /../../../../../ws_sched_600.sh EDW04_env

但我不太确定如何将进程ID传递给kill?

3 个答案:

答案 0 :(得分:6)

sort似乎没必要。您可以使用awk打印第二列,使用xargs将输出转换为kill的命令行参数。

ps -ef | grep ws_sched_600.sh | awk '{print $2}' | xargs kill

或者,您可以根据流程名称使用pkillkillall

pkill -f ws_sched_600.sh

答案 1 :(得分:1)

pkill ws_sched_600.sh

如果您担心在可能无法使用pkill的多个平台上运行命令

ps -ef | awk '/ws_sched_600/{cmd="kill -9 "$2;system(cmd)}

答案 2 :(得分:0)

我认为这就是你要找的东西

for proc in $(ps -ef|grep ws_sched_600.sh|sort -k 10)
do
    kill -9 proc
done

编辑:

当然......使用xargs,它会更好。