0

以下程序:

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 分钟左右高度活跃,然后几分钟它什么都不做。它永远延续了这种模式。

4

3 回答 3

1

你需要daemonize这个过程。这意味着将其与控制终端断开。当您按原样运行它时,它会保留其控制终端并在该终端关闭时通过信号 SIGHUP 退出。daemonize 模块的纯 Python 实现具有daemonize. 您只需调用它,您就在后台运行,与控制终端断开连接。

于 2013-01-19T03:46:21.300 回答
0

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

import os

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

希望这可以帮助。我不使用 OSX 的 Linux,但我想它会是相似的。

于 2013-01-19T02:49:07.580 回答
0

程序“gnu screen”就是这样做的。您可以启动屏幕会话,运行程序,然后使用 Ctrl-a 后跟 d 从会话中分离。要重新连接,请运行 screen -r。

于 2013-03-13T20:46:02.553 回答