私はいくつかのことを行ういくつかのシェルスクリプトを書いています:
main.shを画面の下で実行し、いくつかの変数を設定してから呼び出します:フォアグラウンドでstart.sh (& なし)
start.shが実行され、いくつかの Java 固有の変数が設定され、 Javaプロセスが起動されます (再びフォアグラウンドで) 。
Javaが実行され、'quit' コマンドを受信するまで処理が行われます。(これも最前列で
したがって、私のプロセスツリーは次のようになります。
-main.sh \- start.sh \- ジャバ
問題は、Java プログラムが時折、「終了」コマンドを尊重しない奇妙な状態になり、楽しそうにそこに座って自分の仕事をしているということです。この Java プロセスのプロセス ID を PID ファイルに保存し、-STOP(17?) -TERM(15) および KILL(9) シグナルをこれらの Java プロセスに送信しましたが、それらを適切に強制終了するものはないようです。
「start.sh」プロセスを kill -9 できます。これにより、プロセス ツリーが強制終了されますが、Java プロセスは恐ろしい機能停止 (ゾンビ) 状態のままになり、サーバーを再起動することが唯一の解決策になります。
これらの状況に陥らないようにする方法について誰かが意見を持っているかどうか、またはこれらのゾンビプロセスの発生を防ぐ可能性のある、不足しているLinux /シェル機能があるかどうか疑問に思っていました. また、Java アプリケーション コードはプロプライエタリ アプリケーションであるため変更できません。ソース コードも入手できません。
これは、2.6.35.13-92.fc14.x86_64 カーネルを搭載した Fedora 14 で実行されています。
前もって感謝します、