
セレンサーバーを使用するbashスクリプトが完了すると、スクリプトは次のように終了します。
kill `ps -ef | grep selenium | awk '{ print $2 }'`
これが機能し、Seleniumスクリプトを終了すると同時にプロセスも終了しようとするため、grep selenium
プロセス番号がkillコマンドに返されると、プロセスはすでに消えてエラーメッセージが生成されます。 (つまり、最終的に2つのプロセスが終了しました。そのうちの1つは実際のセレンサーバーであり、もう1つはこのコマンドの実行に伴う副作用である短期プロセスでした。)
意図しない副作用が発生しないようにプロセスを終了するよりエレガントな方法はありますか?
(FWIWのアイデアがあります。この同じスクリプトはスクリプトの最初にセレンを起動するので、セレンが起動したときにPIDをキャプチャする方法がある場合は、それを維持してgrepの代わりに直接終了できます。質問は次のとおりです。そのPIDを取得する方法私は知らず、変数を使ってそれを維持し、後でスクリプトで参照しますが、これはより良いアプローチですか?)
答え1
このpgrep
コマンドを試みると、関心のあるコマンドのPIDが出力されます。
pgrep selenium
実際にプロセスを終了するには、同伴pkill
コマンドを使用します。
pkill selenium
答え2
pkill selenium
この方法や他の方法のいずれでも機能しない場合は、次の方法を試してください。他のパイプラインシーケンスでその方法を引き続き使用できます。
kill `ps -ef|grep -i selenium| grep -v grep| awk '{print $2}'`
答え3
を試してくださいgrep [s]elenium
。これにより、grepプロセスが見つかりません。
答え4
-m 1
最初に見つかったプロセスのみを取得するには、grepコマンドでスイッチを使用します。プロセスをPIDで昇順に並べ替えると機能します。