1

同じ親プロセス内で (異なるスレッドから) 2 つの対話型 bash プロセスをフォーク (実行) すると、親プロセスが停止するか、2 番目の対話型 bash がバックグラウンドになり、さらに対話型属性とバックグラウンド属性の競合により、2 番目の bash が 100% の CPU を消費する原因となります.

これは Linux では発生していますが、Cygwin では発生していません。

例:

同じJavaプロセスで(他のプログラミング言語でも同じことが起こっています):

  1. スレッド

    Process process1;
    String[] command1 = new String[] { "bash", "-l", "-c", "bash -i -l  2>&1" };
    process1 = Runtime.getRuntime().exec(command1);
    
  2. スレッド

    Process process2;
    String[] command2 = new String[] { "bash", "-l", "-c", "bash -i -l  2>&1" };
    process2 = Runtime.getRuntime().exec(command2);
    

このような動作の原因は何ですか?

上記の例が 2 つの別々のプロセスで実行される場合、問題はありません。したがって、これらの bash プロセスが同じルートの親プロセスを持っているという事実に関連しているようです (そして、tty と制御信号を混乱させる可能性があります)。

手伝ってくれてありがとう。

4

1 に答える 1

0

次のように一重引用符を使用します。bash-l-c'execbash -i -l 2>&1'

于 2013-03-10T07:33:02.423 に答える