可能的How to start a background process in Python?使用Python 2.7
不過了許多解決方案的重複實現使用os.system(CMD&)行爲與子模塊,只os.system(commandToRunInBackground &)
看似簡單,做的伎倆。 雖然根據Replacing os.system(),更推薦使用subprocess模塊。 那麼如何使用subprocess模塊在shell中運行後臺進程(注意,最後的&)。
可能的How to start a background process in Python?使用Python 2.7
不過了許多解決方案的重複實現使用os.system(CMD&)行爲與子模塊,只os.system(commandToRunInBackground &)
看似簡單,做的伎倆。 雖然根據Replacing os.system(),更推薦使用subprocess模塊。 那麼如何使用subprocess模塊在shell中運行後臺進程(注意,最後的&)。
在現代操作系統中,進程自然是並行運行,並且有一個等待終止另一個是特殊情況。當在60年代後期設計&
語法時,這是不同的。然後你必須標記並行執行。
在這個堅持到今天的shell上,也是因爲在許多情況下讓shell等待命令終止,然後允許來自用戶的下一個輸入,所以仍然存在沒有&
等待的情況爲終止。
在編程層面上,&
(並行執行)的情況是正常情況,不需要做任何事情來實現它。
通過顯式使用wait()
系統調用可以實現沒有&
(等待終止)的情況(這是大多數情況下shell的做法)。
對你來說,只是使用Popen
不叫wait()
;-)
由於'subprocess.Popen'是非阻塞的,你爲什麼會想使用的背景是一個系統調用製成? –
正如Zev所說 - 爲什麼你認爲你需要這個,而不是你在後臺運行的'subprocess.Popen()'-invoked命令的* default *行爲? –
'subprocess.Popen'沒有與shell的'&'操作符等價,因爲在子進程中沒有選項可以調用'setpgid(0,0)'來創建一個在後臺的新組。否則,如果進程通過stdin從終端讀取數據,終端將不會通過SIGTTIN來終止它,因爲它仍然處於前臺進程組中。 – eryksun