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