5

我一直在尋找一種方法來啓動和終止python中長時間運行的「批處理作業」。現在我正在使用「os.system()」在每個子進程內啓動一個長期運行的批處理作業。正如你可能已經猜到的,「os.system()」在子進程(孫進程?)內產生一個新進程,所以我不能從祖父進程中終止該批處理作業。爲了提供我剛纔描述的一些可視化:以編程方式執行和終止python中長時間運行的批處理過程

Main (grandparent) process, with PID = AAAA 
      | 
      |------> child process with PID = BBBB 
         | 
         |------> os.system("some long-running batch file) 
            [grandchild process, with PID = CCCC] 

所以,我的問題是我無法從祖父母殺死孫子的過程...

我的問題是,是否有啓動方式在子進程中長時間運行的批處理作業,並且能夠通過終止子進程來終止該批處理作業? 我可以使用os.system()的其他替代方法,以便可以從主進程中終止批處理作業?

謝謝!

回答

2

如果您使用Posix兼容系統(例如Linux或OS X),並且在子進程之後不需要運行Python代碼,請使用os.execv。一般而言,請避免使用os.system,而應使用subprocess模塊。

-1

如果你想控制子進程的啓動和停止,你必須使用線程。在這種情況下,看看Python的threading模塊。

3

subprocess模塊是在Python中產生和控制進程的正確方法。

從文檔:

子流程模塊允許您 產卵新工藝,連接到它們的 輸入/輸出/錯誤管道,並獲得它們的 返回代碼。 該模塊 打算更換幾個其他, 舊模塊和功能,如:

使用os.system
os.spawn
os.popen
popen2
命令

所以.. 。如果你使用的是Python 2.4+,subprocessos.system的替代品

用於停止進程,檢查出和communicate()方法Popen對象。

相關問題