为什么我的python脚本在我用&

我有我的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 screenapt-get install screen如果你使用的是Debian / Ubuntu或Redhat / Centos / Fedora将安装它。 屏幕为您提供了一个shell会话,您可以从中断开连接并重新连接,而无需维护连接。 我几乎在任何连接的盒子上都使用它,因为如果断开连接,我不会在stream程中切断潜在的破坏性工作。

只需运行screen来产生一个新的会话,运行你的命令,然后按ctrl + a然后d(保持按住两个字母的控制)要重新连接,从命令行运行screen -dr ,你的屏幕会话将自己附加到您的当前连接。