在接受到信号进程退时候忽略进程终断
来源:4-5 多进程网络服务程序的退出

qq_穹_0
2023-02-08
// 以下代码是为了防止信号处理函数在执行的过程中被信号中断。
signal(SIGINT,SIG_IGN); signal(SIGTERM,SIG_IGN);
上面的代码在TCP服务端子进程和父进程退出时都加了,但是在ftp好像是没加上,是因为后面不是直接退出而是有其他的处理步骤吗,如果ftp在退出前有处理步骤是否也要加上这个代码防止退出被中断。
// 子进程退出函数。
void ChldEXIT(int sig)
{
// 以下代码是为了防止信号处理函数在执行的过程中被信号中断。
signal(SIGINT,SIG_IGN); signal(SIGTERM,SIG_IGN);
logfile.Write("子进程退出,sig=%d。\n",sig);
TcpServer.CloseClient(); // 关闭客户端的socket。
exit(0);
}
后面关闭socket的函数可以去掉吗?让析构函数进行处理。
写回答
1回答
-
ftp服务程序是单进程的,退出的时候,一般不会出现多次收到同一信号的情况。
多进程程序不一样,父进程用kill()通知全部的进程,包括它自己,所以会出现多次收到同一信号的情况。
不过,ftp服务程序加上你说的这些代码会更严谨。
00
相似问题