我有我的gameServer.py脚本通过PuTTy远程运行。
gameServer.py看起来像这样:
而真: ((监听数据包)) ((将所有数据包发送给所有客户端))
当我正常执行脚本时:
./gameServer.py
它完美的工作,但terminal捆绑。 自然退出PuTTy终止我的脚本。
我想能够closuresPuTTY,只是让这个脚本永远运行,所以我试过:
./gameServer.py&
但是这实际上不起作用 ,我不明白为什么。 首先它在该模式下运行时不接收或发送任何数据包,其次,只要我input或任何一个进入控制台,它将会“+停止”。
我不明白为什么它会停止,但尝试
nohup ./gameServer.py &
这会导致gameServer.py在断开PuTTY时忽略挂断信号
尝试把它放在后台,用命令: bg
user@rkt:~$ sleep 10 ^z [1]+ Stopped sleep 10 user@rkt:~$ bg [1]+ sleep 10 & user@rkt:~$ jobs [1]+ Running sleep 10 &
你可以改变你的进程是一个守护进程 ,然后你可以在不杀死的情况下对你的tty进行检测:
def become_daemon(): pid = os.fork () if pid != 0: # if pid is not child... sys.exit(0) os.setsid() # Create new session and sets process group. pid = os.fork () # Will have INIT (pid 1) as parent process... if pid != 0: # if pid is not child... sys.exit(0)
并在脚本中简单地调用这个函数
你可以看看这个ActiveState的配方更多关于双叉机制和更精确的实现。
另一种注销和离开作业的方法是使用“ disown <jobid>
”命令。 它允许您从当前login会话中解除绑定作业,以便您可以注销。
这不是为了回答你的python问题,也不知道从哪里开始,但是临时的解决方法/有用的工具叫做screen
yum install screen
或apt-get install screen
如果你使用的是Debian / Ubuntu或Redhat / Centos / Fedora将安装它。 屏幕为您提供了一个shell会话,您可以从中断开连接并重新连接,而无需维护连接。 我几乎在任何连接的盒子上都使用它,因为如果断开连接,我不会在stream程中切断潜在的破坏性工作。
只需运行screen
来产生一个新的会话,运行你的命令,然后按ctrl + a然后d(保持按住两个字母的控制)要重新连接,从命令行运行screen -dr
,你的屏幕会话将自己附加到您的当前连接。