プロセスを強制終了する優雅な方法


12

bashスクリプトがseleniumサーバーで処理された後、スクリプトは次のようにそれを強制終了します。

kill `ps -ef | grep selenium | awk '{ print $2 }'`

これは機能し、セレンスクリプトを強制終了しますが、grep seleniumプロセス番号をkillコマンドに戻すまでにプロセスを強制終了しようとするため、プロセスは終了するため、エラーメッセージが生成されます。(つまり、最終的に2つのプロセスを強制終了します。1つは実際のセレンサーバーであり、もう1つは一時的なプロセスであり、このコマンドの実行方法の副作用です。)

プロセスを強制終了するより優雅な方法はありますか?この意図しない副作用はありませんか?

(FWIW私が持っていた1つのアイデア:この同じスクリプトは、スクリプトの早い段階でセレンを起動します。問題は、そのPIDを取得する方法、変数を使用してそれを保持する方法、およびスクリプト内で後で参照する方法がわからないことです。

回答:


12

使用しようとpkill selenium、このどちらもあれば、また他の一つは、あなたがこのような別のパイプ・シーケンスを使用してメソッドを使用し続けることができる仕事

kill `ps -ef|grep -i selenium| grep -v grep| awk '{print $2}'`

私のサーバーではこのためにpkillは機能しませんが、改良されたgrepストリップは大いに役立ちます。
エリック

20

pgrepコマンドを試してください。これにより、目的のコマンドのPIDが出力されます。

pgrep selenium

プロセスを実際に強制終了するには、コンパニオンpkillコマンドを使用します。

pkill selenium

私はこれの優雅さを愛していますが、プロセスは次のようになります: "root 26401 11997 2 23:20 pts / 1 00:00:00 java -jar /home/lm/cron/selenium-server-standalone-2.19.0。 jar」のように変更しましたがpgrep java、動作します:-)ありがとう!
エリック

2
pgrepに '-f'フラグを指定すると、コマンドライン全体に対してパターンが一致します。したがって、この場合、キルpgrep -f seleniumは機能するはずです
mills013

7
使用pkillははるかに簡単です。pkillとまったく同じ一致基準を使用するpgrepため、2ではなく1つのコマンドでこれを実行できます(1つの出力に依存する必要があります)。
パトリック

7

を使用してみてくださいgrep [s]elenium。これはgrepプロセスを見つけません。


これは確かに便利なトリックです。なぜ機能するのですか?

2
@hesse- grepデフォルトでBREを使用します。つまり、[および]に表示argvのためにgrep、それがために一致していない[]で文字通り使用されていませんgrep
クリスダウン

| grep -v grepパイプのコンポーネントをよく使用します。しかし、これはかなりエレガントで、私はそれが好きです!
-Alexios

現在の作業ディレクトリに、目的のプロセスと同じ名前のファイルがある場合、これは(多くの場合)十分ではありません。したがって、私が通常使用するソリューションは次のとおりps -ef | grep \[s]eleniumです。とlsofを使用するよりもはるかに優れた代替手段であることがわかりましたが。psgrep
モレアキ

2

このkillallコマンドについては言及されていませんが、レパートリーへの便利な追加機能だと思います。

$ killall selenium

また、-r regexオプションを使用して、プロセス名に一致する正規表現、さらには時間値を指定することもできます。

$ killall -o 5m selenium 

5分以上経過したすべてのセレンプロセスを強制終了します。


それは非RHEL / CentOSバージョンのユニークなようですkillall
ewwhite

0

-m 1最初に見つかったプロセスのみを取得するには、grepコマンドでスイッチを使用します。プロセスをPIDで昇順でソートしている限り、機能します。


1
セレンプロセスが低いPIDを使用していることを確認することはできません。
FJRA

FJRA、以前に開始されたプロセスは、常に低いPIDを取得します。Seleniumサーバーは「grep selenium」の前に起動されるため、PIDが低くなります。
hellodanylo
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.