2016-11-27 47 views
1

的stdout中當我啓動一些後臺進程在shell,例如:無法獲得訪問後臺進程(Ubuntu的)

geth --maxpeers 0 --rpc & 

它返回類似:

[1] 1859 

...沒有任何流出這個過程。我不明白它是什麼?我怎樣才能得到gethstdout?文件中有信息,後臺進程的stdout默認顯示在shell中。

我的shell正在遠程Ubuntu系統中運行。

回答

2

「&」指示shell在後臺運行該命令。它使用fork系統調用來創建子shell並異步運行作業。

stdout和stderr仍然應該被打印到屏幕上。

如果你不想在屏幕上看到的任何輸出,雙方stdout和stderr重定向到一個文件:

geth --maxpeers 0 --rpc > logfile 2>&1 & 
+0

++,但值得注意的是,這隻會沉默(重定向)_command的輸出,而不是shell的作業控制消息。 – mklement0

+0

默認情況下,後臺進程的stdout爲何與終端窗口不關聯?在我的情況下,它必須直接設置:'geth --rpc>&1&' – Mergasov

+0

@Mergasov:你說你正在運行shell _remotely_:你在使用什麼軟件?使用'ssh'應該不成問題。 geth寫入輸出有什麼特別之處嗎?其他生成stdout輸出的命令的行爲是否相同?乍一看,'&&1'看起來像沒有操作。請直接向您的問題添加任何說明_。 – mklement0

2

關於你的問題的第一部分:

..沒有任何流程的這個過程。我不明白 是什麼呢?

這是命令執行環境(部分外殼本身)的一部分,而不是你的腳本的結果。 (這是shell程序如何處理backgrounding你的腳本,並保持過程的軌跡,讓暫停恢復作業)。

如果你看man bash根據JOB CONTROL,它解釋了你所看到的細節,例如,

shell將作業與每個管道關聯。它保留當前正在執行的作業的表 ,這些作業可能與jobs 命令一起列出。當bash(背景)異步啓動工作, 它打印一行,看起來像:

[1] 25647 
1

我不明白是什麼呢?[1] 1859

距離bash的工作功能,這使得管理後臺進程(作業)輸出的,它包含了剛開始工作時,標準錯誤信息:

  • 1作業ID(它的前綴爲%,可以與內置函數一起使用,例如killwait

  • 25647是後臺進程的PID(進程ID)。

更多的JOB CONTROL部分man bash

我該如何獲得標準輸出geth?文檔中有信息說明後臺進程的標準輸出默認顯示在shell中。

事實上,在默認情況下後臺作業打印其輸出到當前shell的輸出和錯誤流,但請注意,這樣做異步 - 也就是說,從後臺作業輸出會出現在它製造(潛在地被緩衝),與直接發送到當前shell的輸出交織,這可能是破壞性的。

可以以捕捉其文件(S)輸出,這表現在user3589054's helpful answer應用重定向像往常一樣去後臺命令,但請注意,這樣做會不會沉默作業控制消息[1] 1859在上面的例子中)。

如果你想沉默創造的作業控制信息,使用方法:

{ geth --maxpeers 0 --rpc & } 2>/dev/null 

要消除作業的整個生命週期,請參閱我的this answer

相關問題