我有一个用 c++ 编写的服务,它正在侦听某个端口。我想使用 sudo sv hup service_name SIGHUP 信号重新加载配置文件。但服务会重新启动。仅当套接字关闭或阻止时,服务才会重新启动。SIGHUP 信号是否阻塞了侦听端口?
当SIGHUP
尝试写入另一端已关闭的套接字或管道时,会发送到您的进程。这就是为什么人们通常在网络应用程序中阻挡SIGHUP
信号的原因。(此外,当会话领导进程终止时,它会SIGHUP
发送到其进程组中的所有子进程。
如果您没有阻止SIGHUP
因为您想要处理它,请确保您的应用程序将MSG_NOSIGNAL
传递到所有send
调用中,以便它不会生成SIGHUP
。否则,您将无法分辨导致该SIGHUP
的原因 -pkill -SIGHUP my_app
send
。
由于SIGHUP
有多种用途,您可能希望使用另一个信号,例如SIGUSR1
,来指示应用程序重新加载配置。没有其他东西会发出这个信号。或者让应用程序打开一个 TCP 或 UNIX 套接字,您可以将命令发送到该应用程序。