簡體   English   中英

python程序將不會在后台運行

[英]python program will not run in background

以下程序:

import time
import random
while True:
    t=time.time()+1.
    f=0.
    while time.time()<t:
        f+=random.random()-.5
    time.sleep(1.)

將永久運行,或者每秒使用100%的處理器,然后休眠一秒鍾,然后繼續永久運行。 當我從命令行運行程序時,它確實做到了。 當我從命令行運行程序時,后跟一個&字符,它也可以在后台正常運行-直到我關閉用於啟動它的終端應用程序並導致退出。 關閉終端時,如何防止這種行為並使它繼續運行? 我將在遠程服務器上運行類似的操作,當我斷開連接時,它也會退出程序。 我可以判斷它是否繼續運行,因為頂級或系統監視器顯示程序在100%處理器使用率和正常系統使用率之間循環。

*編輯以澄清*這不是我將要運行的實際程序,在這里發布的時間太長了,但是它的運行方式類似,花費5分鍾左右或非常活躍,然后幾分鍾不執行任何操作。 它永遠延續這種模式。

您需要daemonize進程。 這意味着將其與控制終端斷開。 當您按原樣運行時,它將保留其控制端子,並在該端子關閉時通過信號SIGHUP退出。 一的純Python實現守護進程模塊具有的功能daemonize 您只需撥打電話即可,並且您正在后台運行,與控制終端斷開了連接。

打開終端的一種好方法是將程序另存為*.pyw或使用pythonw.exe (windows)運行。 為了終止程序,您可以使用PID:

import os

f = file('test.txt','w')
f.write(str(os.getpid()))
f.close()

希望這可以幫助。 我不使用OSX的Linux,但我想它會類似。

程序“ gnu屏幕”就是這樣做的。 您可以啟動屏幕會話,運行程序,然后使用Ctrl-a和d脫離會話。 要重新連接,請運行screen -r。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM