1

JVMの終了後に存続するJava内からbashスクリプトを実行しようとしています。私の現在の試みは次のようになります。

String[] linCmd = {"/bin/bash", "-c", "\"set +m; shopt -u huponexit; nohup "
   + "myScript.sh 2>&1 > /dev/null &\""};
pb = new ProcessBuilder(linCmd);
//Other stuff to monitor and start pb

しかし、myScript.shが実際に(topまたはpsで)起動するのを見ていません。ちなみに、別のbashシェルの理由は、オリジナルが必要であり、それでset +m元のシェルを破損したくないためです。また、nohupshopt -u huponexitは冗長かもしれませんが、私はそれぞれを単独で使用せずに試してみましたが、正しく機能していないようです。

何か案は?

4

2 に答える 2

2

「set+m ...&」の前後に余分な引用符を追加せずに試してください。その配列の3番目の要素として全体を含めることにより、この全体が3番目の引数であることをJavaに伝えます。引用符は不要である必要があり、干渉する可能性があると思います。

于 2011-07-23T02:37:08.400 に答える
0

プロセスをバックグラウンドで処理し、そのバックグラウンド処理されたプロセスに呼び出しを追加してからdisown、シェルを終了させることはできますか?

disown [-ar] [-h] [jobspec ...]

オプションがない場合、各jobspecはアクティブなジョブのテーブルから削除されます。-hオプションを指定すると、各jobspecはテーブルから削除されませんが、シェルがSIGHUPを受信した場合にSIGHUPがジョブに送信されないようにマークが付けられます。jobspecが存在せず、-aオプションも-rオプションも指定されていない場合、現在のジョブが使用されます。jobspecが指定されていない場合、-aオプションは、すべてのジョブを削除またはマークすることを意味します。jobspec引数のない-rオプションは、操作を実行中のジョブに制限します。jobspecで有効なジョブが指定されていない限り、戻り値は0です。

于 2011-07-23T01:52:00.857 に答える