我正在尝试编写一个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?
答案 0 :(得分:6)
sort
似乎没必要。您可以使用awk
打印第二列,使用xargs
将输出转换为kill
的命令行参数。
ps -ef | grep ws_sched_600.sh | awk '{print $2}' | xargs kill
或者,您可以根据流程名称使用pkill
或killall
:
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,它会更好。