Bash

如何完全 fork 使用重定向的 shell 命令

  • October 7, 2019

這些年來,我編寫了很多 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 的一部分。出於所有意圖和目的,它是一個適當的守護程序。

引用自:https://unix.stackexchange.com/questions/28809