1

如果您在同一父进程(来自不同线程)中分叉(执行)两个交互式 bash 进程,则会导致父进程停止或第二个交互式 bash 进入后台,这进一步导致第二个 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);
    

是什么导致了这种行为?

如果上面的示例在两个单独的进程中执行,则没有问题。因此,这些 bash 进程具有相同的根父进程(并且可能混淆 tty 和控制信号)似乎与事实有关。

感谢帮助。

4

1 回答 1

0

像这样使用单引号: bash -l -c 'exec bash -i -l 2>&1'

于 2013-03-10T07:33:02.423 回答