2017-12-26 17 views
-1

Javaプログラムを実行するWindowsバッチスクリプトから同等のシェルスクリプトを作成しようとしています。スクリプトを閉じると、Javaプロセスも終了します。Javaバッチスクリプトから同等のUNIX bashスクリプトを実行してJavaプロセスを終了する

このシェルスクリプトはJavaプロセスを実行しますが、スクリプトを閉じるときにはJavaプロセスを終了しません。

#!/bin/bash 
clear 
java -jar java_program.jar 
exit 0 
Javaプログラムを実行し、スクリプトを閉じるときにJavaプロセスを終了

、Windowsのバッチスクリプト。

@echo off 
title java_program 
java -Xms1500m -jar java_program.jar 
pause 
+1

Javaプロセスは終了しましたか?まだ存在するかどうかチェックしましたか?そして、あなたはその港が縛られていないとどのように判断しましたか? –

+0

上記の質問や投稿していない実際のコード([mcve]として)についての詳細な説明がない場合は、この投稿を参考にしてください:https://stackoverflow.com/questions/23123395/what-of-the-purpose-of-purposeサーバソケットでの処置 –

+0

もし私がシェルスクリプトを再起動すると、ポートはすでにバインドされているので、Javaプログラムは起動しません。 Javaプロセスが終了したとは思わない。問題を回避しているReuseAddressを使用するつもりはありません。 – ZZZ

答えて

0
質問にポートを使用して、すべてのJavaプロセスを強制終了するようにしてください、それを実行する前に、あなたのバッチ

#!/bin/bash 
clear 
java -jar java_program.jar & 
wait %1 

と同じ動作を持つように次のようにスクリプトを変更し

lsof -i:<PORT>へjavaゾンビプロセスのPIDを取得し、次にkill -9 <PID>を取得します。

あなたのjavaプロセスを実行する前に、開いているポートを強制したい場合は、その後の操作を行います。あなたは、あなたのJavaプログラムのポートを指定する必要が

#!/bin/bash 
clear 
kill -9 $(lsof -t -i:<PORT> -sTCP:LISTEN) 
java -jar java_program.jar & 
wait %1 

を。

+0

'wait%1'は何をしますか?私が最初のスクリプトを試すと、コンソールはすぐに消えます。 'wait%1'を' $ SHELL'に置き換えた場合、コンソールは開いたままですが、コンソール上の「X」を押すとバック​​グラウンドプロセスが終了しません。 2番目のスクリプトでは、 'bash:lsof:command not found 'を取得します。 kill:usage:kill [-s sigspec | -n signum | -sigspec] pid |ジョブスペック...またはkill -l [sigspec] 'このような' kill -9 $(lsof -t -i:42593 -sTCP:LISTEN) ' – ZZZ

+0

javaプロセスをバックグラウンドで実行します。 'jobs'コマンドを使って' pid'を見つけたら、それを殺すことができます。 'wait'は、javaプロセスが終了するまで待機します。 – Allan

+0

Javaプロセスをバックグラウンドで実行できないのですか?理由は、コンソールの出力を確認する必要があるからです。 Javaプロセスがバックグラウンドにあるとき、私はその出力を見ることができません。 – ZZZ

関連する問題