【发布时间】:2013-12-09 09:52:55
【问题描述】:
我目前正在为我的 iOS 游戏编写服务器后端。该服务器是用 C++ 编写的,并在移除的 Ubuntu 服务器上编译和运行。我使用 SSH 通过 SSH 启动服务器
sudo nohup ./mygameserver &
服务器通信是用 TCP 编写的。带有 read-loop 的 main 函数是使用标准 C socket.h/netdb.h/in.h 编写的,并使用 select() 在非阻塞侦听套接字上接受许多用户。
当我通过 SSH 在前台运行服务器时,一切似乎都运行良好。它接收我以正确顺序发送的所有数据包,并带有正确的标头信息。但是,当我使用 nohup 并断开与 SSH 的连接时……一切似乎都崩溃了。当服务器软件在没有 SSH/nohup 模式下运行时,来自用户连接的典型日志如下所示:
CONNECTED TO SQL
Server starting...
Second thread initialized
Entering order loop
Got a new message of type: 0
Got a new message of type: 0
Got a new message of type: 0
Got a new message of type: 0
<this line continues ad infinitum>
我真的不知道为什么。我确保每次打印都转到 nohup.out 而不是 std::cout,并且服务器每 10 秒向 MySQL 发送一次更新以避免超时。
关于这里出了什么问题有什么想法或意见吗?如果您想要一些代码示例,请告诉我,我只是不知道哪些对这个问题特别感兴趣。提前致谢。
【问题讨论】:
-
但据我所知,nohup“神奇地”将标准输出的 FD 更改为文件 nohup.out。至少它在运行时会打印以下内容:“nohup: ignoring input and appending output to `nohup.out'”。我确实得到了该文件中的输出......我只是没有得到我期望的输出。
-
您可能想要添加更多日志记录。另外,由于您现在的问题是,实际上无法说出可能是什么问题。除非您将其缩小到某些特定代码,并将该代码包含在问题中,否则我们无法为您提供帮助。
标签: c++ mysql sockets ssh nohup