2011-08-29 32 views
3
& # disown the functions 

大家都知道&把任務放到後臺,最重要的是拋棄了任務。如何在bash下實現?

但它是如何實現的?

+2

它不會忽略每個系統上的進程。在FreeBSD上是這樣的,在Linux上不行。請參閱'disown'功能。 – wormsparty

+0

不是。但是看看是否存在「disown」函數。 – wormsparty

回答

5

如果沒有&,外殼叉本身,在子進程調用execve啓動任務,並通過waitwaitpid等待孩子終止(中止其外殼),沒有做任何事情比別的。

當啓動後臺任務時,shell再次自動分叉,調用execve在子進程中啓動任務,但不等待其終止,而是在任務開始後立即返回控件。

+0

Bash並不總是fork:有時候execve會被直接調用,有時候命令甚至在內部執行取決於你執行的是什麼以及如何執行。奇怪的是,您指定了bash使用的execact函數,而您在其他所有方面都不太準確。我認爲如果你升級了你的文章並且至少添加了一些關於作業控制和子進程的標準輸入/輸出的東西,那將是一件好事,但這都是imho。 – XzKto

+0

我正在談論一個shell啓動外部程序的一般方式。當然,爲了執行內置命令,shell不必fork和exec,因爲代碼是在同一個可執行文件中的。 –