2016-07-21 87 views
2

我有一種情況,我無法在Linux RHEL 6.6框中運行nohup -p <processid>它說這個選項不受支持。我閱讀了聯機幫助手冊,在Linux中它只有--help--version作爲選項。`nohup`已通過PID運行的進程(類似於AIX nohup -p)

nohup -p有沒有其他的選擇,允許一個已經運行的進程在正在運行的終端退出時存活?

+1

......坦率地說,'nohup'通常很沒用。將stdin,stdout和stderr重定向到非TTY源;告訴shell將HUP信號設置爲丟棄,使用'disown'內建從你的shell的進程表中刪除一個工作,並且你完成了'nohup'的所有工作,而不需要使用這個命令。 –

+0

@CharlesDuffy所以3步,可以在一個'nohup'完成? –

+2

啊,但是你的三個步驟迫使用戶去思考他們正在做什麼並做出明確的決定,而你的「一個nohup」卻有一個徹頭徹尾的大腦死亡的nohup.out重定向目標默認值。 –

回答

4

部分內容很簡單:要從shell的進程表中刪除作業,可以使用disown

的部分不是很容易將stdout和stderr重定向到TTY之外。要做到這一點,你可以使用gdb來控制進程,並告訴它來替換stdin,stdout和stderr(注意,你需要確保這也是在其他子進程或線程上完成的,退出操作):

# for an instance of /path/to/program with PID 1234 

# note that this is intended to be a transcript of content typed at a prompt -- it isn't a 
# working shell script, since the commands after "gdb" are to be run *by gdb*, not the 
# shell. 

gdb /path/to/program 
attach 1234 
p dup2(open("/dev/null", 1), 0) 
p dup2(open("stdout-file", 1), 1) 
p dup2(open("stderr-file", 1), 2) 
detach 
quit 

has been automated作爲一個工具,叫做dupx

+0

不錯! – hek2mgl