Bash
如何完全 fork 使用重定向的 shell 命令
這些年來,我編寫了很多 shell 腳本(但我當然不是系統管理員),有些東西總是給我帶來麻煩:我如何從Bash腳本中派生一個不受後台掛斷的 shell 命令?
例如,如果我有這個:
command_which_takes_time input > output
我怎樣才能“nohup”並分叉這個?
以下似乎沒有做我想要的:
nohup command_which_takes_time input > output &
我正在尋找什麼語法,我不理解什麼?
嘗試使用以下命令創建子shell
(...)
:( command_which_takes_time input > output ) &
例子:
~$ ( (sleep 10; date) > /tmp/q ) & [1] 19521 ~$ cat /tmp/q # ENTER ~$ cat /tmp/q # ENTER (...) #AFTER 10 seconds ~$ cat /tmp/q #ENTER Wed Jan 11 01:35:55 CET 2012 [1]+ Done ( ( sleep 10; date ) > /tmp/q )
你應該試試
setsid(1)
。像使用它一樣使用它nohup
:setsid command_which_takes_time input > output
這(根據
setsid(2)
手冊頁)執行父程序的 a ,然後子程序呼叫fork(2)
以創建新的程序組(會話)。_exit(2)``setsid(2)
你不能通過註銷來殺死它,它不是 Bash 作業控制 shebang 的一部分。出於所有意圖和目的,它是一個適當的守護程序。