如何在这个perl one liner中执行kill -9
?我已经找到了列出的pids的位置,可以将其打印到文件中,如下所示:
ps -ef | grep -v grep |grep /back/mysql | perl -lane '{print "kill -9 $F[1]"}'
答案 0 :(得分:6)
答案 1 :(得分:3)
好的,根据原来的答案进行了大量编辑。
首先,直截了当的回答:
ps -ef | grep -v grep |grep /back/mysql | perl -lane 'kill 9, $F[1]'
完成。
但是grep | grep | perl
是一种愚蠢的方式。我最初的反应是“你为什么需要Perl?”我通常会使用awk | kill
来保存Perl以解决更复杂的问题,这些问题可以证明额外的输入:
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/'
答案 2 :(得分:3)
让我们为初学者使用更合适的ps
命令。
ps -e -o pid,cmd --no-headers |
perl -lane'kill(KILL => $F[0]) if $F[1] eq "/back/mysql";'
答案 3 :(得分:1)
ps -ef | grep -v grep |grep /back/mysql | perl -lane 'kill(9, $F[1])'
Perl中提供了kill
功能。
您也可以省略两个grep
命令:
ps -ef | perl -lane 'kill(9, $F[1]) if m%/back/mysql\b%'
(未测试)
答案 4 :(得分:1)
你为什么不使用更多的Perl?
ps -ef | perl -ane 'kill 9,$F[1] if m{/back/mysql}'