いくつかのサーバーアプリケーションを起動するUbuntuコンピュータ用のシェルスクリプトを作成したいと思います。私のJavaアプリケーションで実行するには、このスクリプトが必要です。ただし、後でJavaアプリケーションですべて終了できるように、これらすべてのサーバープロセスをグループ化する簡単な方法が必要です。
私の考えは、シェルスクリプトで親プロセスIDを設定し、後でコマンドを使用して終了することですpkill
。
シェルスクリプトでこれを行うにはどうすればよいですか?
答え1
後で終了するために使用できるPIDを記録してAppiumサーバーを実行できます。例えば
Appium_server_1 & instance1=$!
Appium_server_2 & instance2=$!
Appium_server_3 & instance3=$!
.
.
.
だから私は殺すことができます。はい変数殺す注文する。
答え2
シェルがPPID
組み込み変数をサポートしている場合は、シェルを呼び出すプロセスのPIDに本当に興味がある場合はそれを使用できます。
シェルのPIDに興味があり、他の人が利用できるようにしたい場合はこれを使用してください$$
。
答え3
あなたの質問を正しく理解したら、答えはあなたがそうすることができないということです。 Javaプログラムが起動し、シェルスクリプトを呼び出してより多くのプロセスを開始します。その後、シェルスクリプトが終了し、他のすべてのプロセスを終了できる必要があるJavaプロセスに制御を渡そうとします。
短い答えはできないということです。シェルスクリプトが終了すると、それによって開始されたすべてのプロセスは、Javaプロセスの代わりにプロセス番号1(init)によって所有されます。
追加プロセスを開始するためにシェルスクリプトを使用する理由はありますか?
Javaを使用してすべてのプロセスを開始する(Processライブラリを使用)、またはSupervisord(http://supervisord.org/)。その後、Supervisordを制御してJavaプログラムでプロセスを開始/停止できます。
すべてのプロセスの名前が同じ場合は、killallコマンドを使用してそのプロセスを名前で終了することもできます。