【问题标题】:Forking two interactive bash processes causes parent process to stop or second bash to go background分叉两个交互式 bash 进程会导致父进程停止或第二个 bash 进入后台
【发布时间】:2013-02-02 05:37:38
【问题描述】:

如果您在同一个父进程(来自不同线程)中分叉(执行)两个交互式 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 和控制信号)似乎与事实有关。

感谢您的帮助。

【问题讨论】:

  • 您如何处理 process1 和 process2 的标准输入、标准输出和标准错误?
  • 存在处理 io 流的单独线程。

标签: java bash process fork interactive


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-18
    • 1970-01-01
    • 1970-01-01
    • 2015-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多