1

如何kill -9在这个 perl 单行中执行?我已经找到了列出 pid 的位置,并且可以将其打印到文件中,如下所示:

ps -ef | grep -v grep |grep /back/mysql | perl -lane '{print "kill -9 $F[1]"}'
4

5 回答 5

6

您是否考虑过pkill 或 pgrep

pkill /back/mysql

或者

pgrep /back/mysql | xargs kill -9
于 2012-04-20T17:52:52.113 回答
3

好的,根据我的原始答案进行了大量编辑。

首先,直截了当的答案:

ps -ef | grep -v grep |grep /back/mysql | perl -lane 'kill 9, $F[1]'

完毕。

grep | grep | perl这样做是一种愚蠢的方式。我最初的反应是“为什么需要 Perl?” 我通常会用awk | kill.

ps -ef | awk '/\/back\/mysql/ {print $2}' | xargs kill -9

(请注意,awk 不会找到自己,因为字符串“\/back\/mysql”与模式 /\/back\/mysql/ 不匹配)

您当然可以使用 Perl 代替 awk:

ps -ef | perl -lane 'print $F[1] if /\/back\/mysql/' | xargs kill -9

(我故意使用倾斜的牙签而不是不同的分隔符,这样进程就不会发现自己,就像 awk 的情况一样。)

然后问题从“为什么需要 perl?”切换。到“为什么需要 grep/awk/kill?”:

ps -ef | perl -lane 'kill 9, $F[1] if /\/back\/mysql/'
于 2012-04-20T17:48:46.863 回答
3

ps对于初学者,让我们使用更合适的命令。

ps -e -o pid,cmd --no-headers |
   perl -lane'kill(KILL => $F[0]) if $F[1] eq "/back/mysql";'
于 2012-04-20T18:07:54.243 回答
1
ps -ef | grep -v grep |grep /back/mysql | perl -lane 'kill(9, $F[1])'

kill函数在 Perl 中可用。

您也可以省略这两个grep命令:

ps -ef | perl -lane 'kill(9, $F[1]) if m%/back/mysql\b%'

未经测试

于 2012-04-20T17:53:06.757 回答
1

为什么不使用更多的 Perl?

ps -ef | perl -ane 'kill 9,$F[1] if m{/back/mysql}'
于 2012-04-20T17:53:31.843 回答