私はカスタムゲームサーバーを作成しており、それを実行する.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
これにより、罪のない被害者(競争条件)を標的にすることもできます。
答え2
たとえば、-f
スイッチを使用してps
より多くの情報を表示します。バラよりman ps
:
-f
完全な形式のリストを作成してください。このオプションは、他の多くのUNIXスタイルオプションと組み合わせて使用して追加の列を追加できます。これはまた、次の結果をもたらしました。 印刷するコマンドパラメータ。と一緒に使用すると、-L
NLWP(スレッド数)とLWP(スレッドID)列が追加されます。c
オプション、型キーワード引数、型キーワード通信を参照してください。