如何kill -9
在这个 perl 单行中执行?我已经找到了列出 pid 的位置,并且可以将其打印到文件中,如下所示:
ps -ef | grep -v grep |grep /back/mysql | perl -lane '{print "kill -9 $F[1]"}'
如何kill -9
在这个 perl 单行中执行?我已经找到了列出 pid 的位置,并且可以将其打印到文件中,如下所示:
ps -ef | grep -v grep |grep /back/mysql | perl -lane '{print "kill -9 $F[1]"}'
好的,根据我的原始答案进行了大量编辑。
首先,直截了当的答案:
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/'
ps
对于初学者,让我们使用更合适的命令。
ps -e -o pid,cmd --no-headers |
perl -lane'kill(KILL => $F[0]) if $F[1] eq "/back/mysql";'
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%'
(未经测试)
为什么不使用更多的 Perl?
ps -ef | perl -ane 'kill 9,$F[1] if m{/back/mysql}'