Makefile: 実行中のプロセスの終了

Makefile: 実行中のプロセスの終了

実行中のプロセスを終了するこのような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を気にしない限り、呼び出すことは意味がありません。直接電話することができます。pgreppkillpkillpgreppgreppkill

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

おすすめ記事