Unix 终止并重新启动符合特定模式的多个进程

Unix 终止并重新启动符合特定模式的多个进程,unix,shell,scripting,kill,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

我正在尝试编写一个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?

我想这就是您要寻找的

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


当然。。。使用xargs会更好。

我想这就是你想要的

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


当然。。。使用xargs更好。

似乎不需要排序。您可以使用
awk
打印第二列,并使用
xargs
将输出转换为命令行参数,以
kill

ps -ef | grep ws_sched_600.sh | awk '{print $2}' | xargs kill
或者,您可以使用
pkill
killall
根据进程名称进行终止:

pkill -f ws_sched_600.sh

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

ps -ef | grep ws_sched_600.sh | awk '{print $2}' | xargs kill
或者,您可以使用
pkill
killall
根据进程名称进行终止:

pkill -f ws_sched_600.sh
如果您担心在多个可能无法使用PKIL的平台上运行命令

ps -ef | awk '/ws_sched_600/{cmd="kill -9 "$2;system(cmd)}
如果您担心在多个可能无法使用PKIL的平台上运行命令

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

killall
可以在Linux上工作,但不能在所有Unix上工作。例如,在Solaris上,
killall
会终止所有活动进程。所有可终止的进程都由用户执行。当以root用户身份运行它时,这确实很有趣……杀戮部分很简单,“然后重新启动”部分相当困难,这让我相信从一开始就可以更巧妙地处理整个操作。
killall
可以在Linux上工作,但不能在所有Unix上工作。例如,在Solaris上,
killall
会终止所有活动进程。所有可终止的进程都由用户执行。作为root运行时,这确实非常有趣……杀戮部分很简单,“然后重新启动”部分相当困难,这让我相信从一开始就可以更巧妙地处理整个操作。为什么会这样?你无论如何都要杀了他们,不需要grep和xargs。ps-ef | awk'/ws_sched_600/{cmd=“kill-9”$2;system(cmd)}为什么排序?你无论如何都要杀了他们,不需要grep和xargs。ps-ef | awk'/ws_sched_600/{cmd=“kill-9”$2;system(cmd)}
pkill
至少在Mac OS上是不存在的(这里是
killall
),我认为这应该行得通。没有太多使用AWK,但需要启动<至少Mac OS上不存在code>pkill
(这里是
killall
),我认为这应该行得通。没有太多使用AWK,但需要启动!