我用C语言编写了一个简单的TCP套接字服务器,当它接受来自客户端的新连接请求时,它会创建一个新的子工作线程,并简单地计数和发送数字。如果客户端终止,则相应的子工作线程也应终止,而其他线程不应终止。 如果所有客户端都是用Python编写的,那么当客户端终止时,服务器上会显示"Connection is reset by peer“,但其他一切都是正常的,即其他线程和客户端仍在工作。 但是如果客户端是用C编写的,那么当任何客户端和它们对应的子工作线程终止时,其他线程也会终止,这不是预期的。为什么会发生这种情况?我用Python重写了服务器,但无论客户端是用什么语言编写的,都不会发生这种情
因此,我使用典型的nohup语法启动了下面的脚本:
nohup ./script &
下面日志输出的一部分是临时Internet连接和终端窗口锁定时所显示的内容,迫使我手动关闭它们。当我的问题解决后,我重新登录并从日志中看到这个输出:
日志输出:(来自结果2.log)
--------------
UPDATE table where id between 45759776 and 55759776
--------------
Terminal close -- sending "KILL QUERY 3329619" to server ...
Terminal
我有一个程序,我想接受和处理传入的TCP连接,直到它得到一个终止信号。还有一些执行数据处理的额外线程,我无法完全控制这些线程,但如果我希望程序退出,则可以干净地停止/中止。
while (true)
{
select(...)?
if (got-terminate-signal)
{
break;
}
else
{
...do stuff with sockets based on select...
}
}
背景:
我是一个相对缺乏经验的开发人员,试图编写与PCI运动控制器接口的软件。我在Ubuntu 18.04上使用C(与gcc一起编译)。
我正在编写的程序需要定期检查运动控制器发送的非请求状态消息(大约。并在终端屏幕上显示它找到的任何消息(我正在使用ncurses库)。
我拥有的:
现在,为了做到这一点,我调用了一个函数,该函数在while循环中检查未请求的消息。代码大致类似于:
while (1)
{
// check for messages from PCI and store them in a traffic buffer
checkForMessages(PCIco