複数のバックグラウンドプロセスの識別子を設定するには?

複数のバックグラウンドプロセスの識別子を設定するには?

私はカスタムゲームサーバーを作成しており、それを実行する.jarファイルがあります。単一の仮想マシン(15台など)で複数のゲームサーバーを起動する必要があります。私は次のように実行できることがわかりました。

java -jar server-1.0.jar &

ただし、これを入力すると、、、およびのみps表示されます。サーバー6、サーバー9などをどのように識別しますか?何を使うべきですか?PIDCMDTTYTIME

ベストアンサー1

pidバックグラウンドタスクを開始するとすぐに、次のことを記録できます。

command & pid1=$!
command & pid2=$!

$!最後に開始されたバックグラウンドジョブのpid。

スクリプトまたはプログラムのプロセス属性を介してpidを取得するツールを使用することは賢明ではありません。

プロセスは常に子を追跡する必要があります。ps/...パスをたどると、無実のpgrep被害者(=自分ではありませんが、誤ってクエリと一致するプロセス)を終了(=シグナル)する危険があります。


正しいPIDをターゲットにしていますが、そのPIDが子供ではない場合でも、これらのリスクが発生する可能性があります。スロットpidは、プロセスが終了し、その親がwaitそのプロセスにあるまで予約されます(親のみがプロセスwaitに存在する可能性があります)。 aがあなたのものではない場合、あなたがaについて知った時点と信号を送信した時点の間にaが死んで待っている可能性がありますpidpidこれにより、罪のない被害者(競争条件)を標的にすることもできます。

おすすめ記事