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

OK、元の回答から大幅に編集されました。

まず、簡単な答え:

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

(文字列 "\/back\/mysql" がパターン /\/back\/mysql/ と一致しないため、awk 自体が見つからないことに注意してください)

もちろん、awk の代わりに Perl を使用することもできます。

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

もっとPerlを使わないのはなぜですか?

ps -ef | perl -ane 'kill 9,$F[1] if m{/back/mysql}'
于 2012-04-20T17:53:31.843 に答える
1
ps -ef | grep -v grep |grep /back/mysql | perl -lane 'kill(9, $F[1])'

kill関数は Perl で使用できます。

grep次の 2 つのコマンドも省略できます。

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

(未テスト)

于 2012-04-20T17:53:06.757 に答える