2013-02-17 14 views
1

如果在同一父進程中(來自不同線程)fork(exec)兩個交互式bash進程導致父進程停止或第二個交互式bash進入由於交互和背景屬性的衝突,進一步導致第二個bash消耗100%CPU的背景。分叉兩個交互式bash進程導致父進程停止或第二個bash去後臺

這在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和控制信號)。

感謝您的幫助。

+0

你是如何處理的標準,標準輸出和標準錯誤的每個過程1和過程2的? – 2013-02-17 19:59:27

+0

存在處理io流的單獨線程。 – user855433 2013-02-17 21:02:06

回答

0

使用單引號,像這樣:慶典-l -c「EXEC的bash -i -l 2> & 1」

相關問題