perl - 一个内衬循环并杀死pids

时间:2012-04-20 17:45:58

标签: perl

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

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

5 个答案:

答案 0 :(得分:6)

您考虑过pkill or pgrep了吗?

pkill /back/mysql

pgrep /back/mysql | xargs kill -9

答案 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}'
相关问题