我的 gameServer.py 脚本通过 PuTTy 远程运行。
gameServer.py 如下所示:
而 True : (( 监听数据包 )) (( 将所有数据包发送给所有客户端 ))
当我正常执行脚本时:
./游戏服务器.py
它运行完美,但终端被绑定了。自然退出 PuTTy 会终止我的脚本。
我希望能够关闭PuTTY并让这个脚本永久运行,因此我尝试:
./gameServer.py &
但实际上不起作用我不明白为什么。首先,当以该&
模式运行时,它不会接收或发送任何数据包,其次,每当我在控制台中输入回车键或任何内容时,它都会显示“+ 已停止”。
答案1
我不明白为什么它会停止,但尝试一下
nohup ./gameServer.py &
这应该会导致 gameServer.py 在断开 PuTTY 连接时忽略挂断信号
答案2
尝试使用以下命令将其置于后台:背景
user@rkt:~$ sleep 10
^z
[1]+ Stopped sleep 10
user@rkt:~$ bg
[1]+ sleep 10 &
user@rkt:~$ jobs
[1]+ Running sleep 10 &
答案3
你可以将您的进程更改为守护进程,然后你可以脱离你的 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 配方了解有关双叉机制建设和落实更加精准。
答案4
这并不是为了回答你的 Python 问题,不知道从哪里开始,但会调用一个临时的解决方法/有用的实用程序,screen
yum install screen
或者apt-get install screen
如果你使用的是 Debian/Ubuntu 或 Redhat/Centos/Fedora,则会安装它。Screen 为你提供了一个 shell 会话,你可以从中断开连接并重新连接,而无需保持连接。我几乎在任何连接到的盒子上都使用它,因为如果我断开连接,我不会切断流程中可能造成破坏的工作。
只需运行screen
即可生成一个新会话,运行您的命令,然后按 ctrl + a,然后按 d(按住两个字母的控制键)要重新连接,请screen -dr
从命令行运行,您的屏幕会话将附加到您当前的连接。