[英]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.