特定のプロセス名のPIDを検索して終了します。

特定のプロセス名のPIDを検索して終了します。

テストサーバー(ローカルアプリケーション)を実行していて、そのサーバーのプロセスIDを取得して終了したいと思います。どうすればいいですか?

test-serverusingコマンドを実行しておりnohup ./test-server &、以下を使用してプロセスのPIDも確認しています。

ps -ef | grep 'test-server' | grep -v 'grep' | awk '{ printf $2 }'

出力:

svr-ser+   42707   42618  0 10:43 pts/2    00:00:00 /bin/sh ./test-server
svr-ser+   42709   42707  0 10:43 pts/2    00:00:00 /bin/sh ./test -Dserver_port=1099 -s -j test-server.log
svr-ser+   42734   42709  9 10:43 pts/2    00:00:01 /usr/bin/java -server -XX:+HeapDumpOnOutOfMemoryError -Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m -XX:+UseG1GC -XX:MaxGCPauseMillis=100 -XX:G1ReservePercent=20 -Djava.security.egd=file:/dev/urandom -Duser.language=en -Duser.region=EN -Dserver_port=1099 -s -j test-server.log

& プロセスを終了するには、次のコマンドを使用します。

ps -ef | grep 'test-server' | grep -v 'grep' | xargs kill -9

出力:

kill: cannot find process "svr-ser+"
Killed

どのように検索し 42707て終了できますか?プロセスの終了について非常に具体的に説明したいと思います./test-server。それがすべてです。

答え1

で説明したように、正規表現で説明できる名前のPIDを取得するには、に示されているようにgrep単にを使用して実行できます。pgrep test-serverkill -9 $(pgrep test-server)

pkillしかし、必ずバイパスする必要はありませんpkill -9 test-server

答え2

努力する

ps -e -H -o pid,comm | awk '$2 ~ /test-server/ { print $1}' 

またはそれに対応するPOSIX:

ps -Ao pid= -o comm= | awk '$2 ~ /test-server/ { print $1}' 

PID確認

どこ

  • -Hタイトルを印刷しないでください
  • -o pid,commpidとコマンドラインのみを印刷
  • awkフィルタリングtest-server(この部分を調整する必要があるかもしれません(たとえば、コマンドライン引数のフィルタリングの代わりに$3 ~ /test-server/使用)argscomm

よろしければ実行してください。

ps -Ao pid= -o comm= | awk '$2 ~ /test-server/ { print $1}' | xargs kill

答え3

これはどうですか?

nohup ./test-server & echo "$!" >test-server.pid

それから:

「$(<test-server.pid)」を殺します。

また、kill を使用すると、SIGKILLサーバーが完全にシャットダウンしない可能性が高くなります。代わりにSIGTERM(から送信された基本信号kill)を使用してください。

答え4

- を使用してkillall名前でプロセスを終了します。

man killall使用法が表示されます。これはとても賢いです。

関連情報