的stdout中當我啓動一些後臺進程在shell,例如:無法獲得訪問後臺進程(Ubuntu的)
geth --maxpeers 0 --rpc &
它返回類似:
[1] 1859
...沒有任何流出這個過程。我不明白它是什麼?我怎樣才能得到geth
的stdout
?文件中有信息,後臺進程的stdout
默認顯示在shell中。
我的shell正在遠程Ubuntu系統中運行。
的stdout中當我啓動一些後臺進程在shell,例如:無法獲得訪問後臺進程(Ubuntu的)
geth --maxpeers 0 --rpc &
它返回類似:
[1] 1859
...沒有任何流出這個過程。我不明白它是什麼?我怎樣才能得到geth
的stdout
?文件中有信息,後臺進程的stdout
默認顯示在shell中。
我的shell正在遠程Ubuntu系統中運行。
「&」指示shell在後臺運行該命令。它使用fork系統調用來創建子shell並異步運行作業。
stdout和stderr仍然應該被打印到屏幕上。
如果你不想在屏幕上看到的任何輸出,雙方stdout和stderr重定向到一個文件:
geth --maxpeers 0 --rpc > logfile 2>&1 &
關於你的問題的第一部分:
..沒有任何流程的這個過程。我不明白 是什麼呢?
這是命令執行環境(部分外殼本身)的一部分,而不是你的腳本的結果。 (這是shell程序如何處理backgrounding你的腳本,並保持過程的軌跡,讓暫停和恢復作業)。
如果你看man bash
根據JOB CONTROL
,它解釋了你所看到的細節,例如,
shell將作業與每個管道關聯。它保留當前正在執行的作業的表 ,這些作業可能與
jobs
命令一起列出。當bash(背景)異步啓動工作, 它打印一行,看起來像:[1] 25647
我不明白是什麼呢?
[1] 1859
距離bash的工作功能,這使得管理後臺進程(作業)輸出的,它包含了剛開始工作時,標準錯誤信息:
1
是作業ID(它的前綴爲%
,可以與內置函數一起使用,例如kill
和wait
)
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。
++,但值得注意的是,這隻會沉默(重定向)_command的輸出,而不是shell的作業控制消息。 – mklement0
默認情況下,後臺進程的stdout爲何與終端窗口不關聯?在我的情況下,它必須直接設置:'geth --rpc>&1&' – Mergasov
@Mergasov:你說你正在運行shell _remotely_:你在使用什麼軟件?使用'ssh'應該不成問題。 geth寫入輸出有什麼特別之處嗎?其他生成stdout輸出的命令的行爲是否相同?乍一看,'&&1'看起來像沒有操作。請直接向您的問題添加任何說明_。 – mklement0