実行中のプロセスを終了するこのようなmakefileがあります。
test: client server
pgrep myserver && killall myserver
/build/bin/myserver --background
/build/bin/myclient --server 127.0.0.1
あらかじめ始めたらmyserver
効果があったはずなのに。そうでなければ、pgrep myserver
ゼロ以外の状態で失敗し、Makefileはそれをエラーとして扱います。
pgrep myserver && killall myserver
make: *** [test] Error 1
どんな提案がありますか?
ベストアンサー1
killall
と組み合わせないでくださいpgrep
。同じ一致ルールを使用しないため、表示されるコンテンツが致命的ではないpgrep
可能性killall
があります。を使用することは、PIDを表示するのではなく、一致するプロセスを終了することを除いて、pkill
まったく同じです。とが同時に呼び出されるpgrep
と、競合状態が発生します。実行時に表示されたプロセスの一部が終了し、新しいプロセスの一部が開始される可能性があります。プロセスIDを気にしない限り、呼び出すことは意味がありません。直接電話することができます。pgrep
pkill
pkill
pgrep
pgrep
pkill
pkill
終了するプロセスが見つからない場合は、状態1が返されます。-
makeがこのエラーを無視するように指示するコマンドの先頭に追加するか、まったく同じことを実行しますが、常にpkill myserver || true
成功pkill myserver
ステータスを返すようにコマンドを変更します。
test: client server
pkill myserver || true
/build/bin/myserver --background
/build/bin/myclient --server 127.0.0.1