【发布时间】:2015-05-08 03:22:26
【问题描述】:
我有一个 Linux 服务(守护程序),它具有多线程并使用 boost io_service 侦听 TCP 套接字。当我在该套接字上收到某个消息时,我想启动另一个服务,例如/etc/init.d/corosync start。
问题是,在启动服务后,当我退出自己的服务时,另一个服务从我自己的服务继承了套接字,并且它仍然处于一个奇怪的状态,我无法以通常的方式停止它。
在退出我的进程“MonitorSipServer”之前,打开的套接字显示如下:
netstat -anop |grep 144
tcp 0 0 0.0.0.0:20144 0.0.0.0:* LISTEN 4480/MonitorSipServ off (0.00/0/0)
tcp 0 0 140.0.24.181:20144 140.0.101.75:47036 ESTABLISHED 4480/MonitorSipServ off (0.00/0/0)
退出我的进程“MonitorSipServer”后,打开的套接字显示如下:
netstat -anop |grep 144
tcp 0 0 0.0.0.0:20144 0.0.0.0:* LISTEN 4502/corosync off (0.00/0/0)
tcp 0 0 140.0.24.181:20144 140.0.101.75:47036 ESTABLISHED 4502/corosync off (0.00/0/0)
我已经尝试过使用system、popen 和fork + execv 或execve 和null 环境。结果总是一样或更糟。
我最后的希望是 Linux setsid 命令,但它也没有奏效。
任何帮助将不胜感激。 问候, 一月
【问题讨论】:
标签: c++ linux sockets boost boost-asio