MyApp.jar
たとえば、同じファイル名で実行される2つのJavaプロセスがあります。
/usr/java/latest/bin/java -jar MyApp.jar
これらの瓶は異なる場所に存在し、異なる構成を使用します。
プロセスを終了したいのですが、2つのプロセスを区別する方法がわかりません。私は次を実行します:
ps aux | grep [M]yApp.jar
そして得る:
admin 21509 0.8 0.1 1199908 20484 ? Sl 08:21 0:00 /usr/java/latest/bin/java -jar MyApp.jar
admin 21585 6.7 0.1 1199764 20084 ? Sl 08:21 0:00
私はプロセスを区別するためにいくつかのダミーパラメータを使用してプロセスを作成することを考えました。
/usr/java/latest/bin/java -jar MyApp.jar MyAppTheFirst
そして
/usr/java/latest/bin/java -jar MyApp.jar MyAppTheSecond
しかし、これは私にとって少し間違っているようです。もっと良い方法がありますか?
答え1
まず、なぜそれらの1つを殺すのですか?プロセスが多すぎるリソースを使用している場合は、次からPIDを取得できますtop
。
top -n 1
定期的にまたは外部刺激に応答して再起動する必要がある場合プロセス管理:
while true
do
java -jar MyApp.jar &
my_app_pid=$!
while ! whatever_makes_me_think_my_app_should_be_restarted
do
sleep 60
done
kill $my_app_pid
done
答え2
パラメータを変更するとアプリケーションに影響を与えるため、最善の方法ではありません。プログラム名自体である $0 を変更できます。ほとんどのプログラムはそれを気にしませんが、一部はそれに応じて動作を変更します(たとえば、mtoolsやbusyboxを使用してIIRCなどの異なる名前で同じバイナリを呼び出すことができる場合)。
bash -c 'exec -a mysleep sleep 100'
ps aux | grep sleep
hl 20818 0.0 0.0 5732 576 pts/10 S+ 10:01 0:00 mysleep 100
または使用する環境:
bash -c 'IDSTRING=PROC1 exec sleep 100'
PID=20936
tr '\0' '\n' </proc/"$PID"/environ | grep IDSTRING
IDSTRING=PROC1
または、PIDと追加情報(プロセスを区別するため)をログファイルに書き込むラッパースクリプトを使用してプロセスを開始します。
答え3
役に立つ唯一の方法は、より高いPID番号を決定することです。 PID番号が大きいほど後で実行されるプロセスです。しかし、常にそうではありません