python程序不会在后台运行

时间:2013-01-19 02:39:27

标签: python background-process

以下计划:

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

将永远运行,或者使用100%的处理器一秒钟然后再睡一秒钟并继续这样做。当我从命令行运行程序时,它就是这样做的。当我从命令行运行程序后跟一个&amp;它在后台也能正常工作 - 直到我关闭我用来启动它的终端应用程序,导致它退出。如何在关闭终端时阻止此行为并允许其继续运行?我将在远程服务器上运行这样的东西,当我断开它时也退出程序。我可以判断它是否继续运行,因为顶部或系统监视器显示程序在100%处理器使用率和正常系统使用率之间循环。

*编辑以澄清* 这不是我将要运行的实际程序,它在这里发布的时间太长了,但它以类似的方式运行,花费5分钟左右高度活跃,然后几分钟它什么都不做。它永远延续这种模式。

3 个答案:

答案 0 :(得分:1)

您需要daemonize此过程。这意味着将其与控制终端断开连接。当您按原样运行它时,它会保持其控制终端,并在该终端关闭时通过信号SIGHUP退出。 daemonize module的纯Python实现具有函数daemonize。你只需要打电话,然后在后台运行,与控制终端断开连接。

答案 1 :(得分:0)

让终端打开的一种方法是将程序保存为*.pyw,或者使用pythonw.exe(windows)运行它。为了终止程序,您可以使用PID:

import os

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

希望这会有所帮助。我不使用OSX的Linux,但我想它会类似。

答案 2 :(得分:0)

程序“gnu screen”是如何完成的。您可以启动一个屏幕会话,运行一个程序,然后使用Ctrl-a和d分离会话。要重新连接,请运行screen -r。