【发布时间】:2013-02-02 05:37:38
【问题描述】:
如果您在同一个父进程(来自不同线程)中分叉(执行)两个交互式 bash 进程,则会导致父进程停止或第二个交互式 bash 进入后台,这进一步导致第二个 bash 由于交互冲突而消耗 100% CPU和背景属性。
这在 Linux 中发生,但在 Cygwin 中没有。
例子:
在同一个 Java 进程中(同样的事情发生在其他编程语言中):
-
线程
Process process1; String[] command1 = new String[] { "bash", "-l", "-c", "bash -i -l 2>&1" }; process1 = Runtime.getRuntime().exec(command1); -
线程
Process process2; String[] command2 = new String[] { "bash", "-l", "-c", "bash -i -l 2>&1" }; process2 = Runtime.getRuntime().exec(command2);
是什么导致了这种行为?
如果上面的例子在两个单独的进程中执行,则没有问题。 因此,这些 bash 进程具有相同的根父进程(并且可能混淆 tty 和控制信号)似乎与事实有关。
感谢您的帮助。
【问题讨论】:
-
您如何处理 process1 和 process2 的标准输入、标准输出和标准错误?
-
存在处理 io 流的单独线程。
标签: java bash process fork interactive