Runtime.getRuntime().execJavaで使用してLinuxターミナルでshファイルを呼び出す方法は?
Javaコードから新しい端末でshファイルを呼び出したいです。ターミナルでのみ実行すると、別のプロセスとして実行され、プログラムが終了しても閉じられません。を使用していないのはそのためですProcessBuilder。これは、それを使用しているプログラムが終了すると、それによって呼び出されたプロセスを停止します。
Runtime.getRuntime().execJavaで使用してLinuxターミナルでshファイルを呼び出す方法は?
Javaコードから新しい端末でshファイルを呼び出したいです。ターミナルでのみ実行すると、別のプロセスとして実行され、プログラムが終了しても閉じられません。を使用していないのはそのためですProcessBuilder。これは、それを使用しているプログラムが終了すると、それによって呼び出されたプロセスを停止します。
スクリプトが実行可能 ( ) としてマークされている場合chmod +x script.shは、 で呼び出すことができますexec("./script.sh")。それ以外の場合は、 を使用して直接呼び出すことができますexec("sh script.sh")。
ProcessBuilderは の単なる薄いラッパーであるためRuntime、直接使用しても目的は達成されません。
代わりに、ターミナル ウィンドウをバックグラウンド プロセスとして作成し、このプロセスを切り離す 2 つ目のスクリプトを作成する必要があります。一般的方法:
ProcessBuilder外部スクリプトを開始するnohup新しい X 端末と Java プロセスの間の接続を切断します。&すべてをバックグラウンドに送信するため、コマンドは終了するまで送信されませんxterm。
使用する:
Runtime.getRuntime().exec(new String[] { "/bin/bash", "-c", "sh myfile.sh" });