私はカスタムゲームサーバーを作成しており、それを実行する.jarファイルがあります。単一の仮想マシン(15台など)で複数のゲームサーバーを起動する必要があります。私は次のように実行できることがわかりました。
java -jar server-1.0.jar &
ただし、これを入力すると、、、およびのみps
表示されます。サーバー6、サーバー9などをどのように識別しますか?何を使うべきですか?PID
CMD
TTY
TIME
ベストアンサー1
pid
バックグラウンドタスクを開始するとすぐに、次のことを記録できます。
command & pid1=$!
command & pid2=$!
$!
最後に開始されたバックグラウンドジョブのpid。
スクリプトまたはプログラムのプロセス属性を介してpidを取得するツールを使用することは賢明ではありません。
プロセスは常に子を追跡する必要があります。ps
/...パスをたどると、無実のpgrep
被害者(=自分ではありませんが、誤ってクエリと一致するプロセス)を終了(=シグナル)する危険があります。
正しいPIDをターゲットにしていますが、そのPIDが子供ではない場合でも、これらのリスクが発生する可能性があります。スロットpid
は、プロセスが終了し、その親がwait
そのプロセスにあるまで予約されます(親のみがプロセスwait
に存在する可能性があります)。 aがあなたのものではない場合、あなたがaについて知った時点と信号を送信した時点の間にaが死んで待っている可能性がありますpid
。pid
これにより、罪のない被害者(競争条件)を標的にすることもできます。