在接受到信号进程退时候忽略进程终断

来源: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回答

长歌_吴从周

2023-02-08

ftp服务程序是单进程的,退出的时候,一般不会出现多次收到同一信号的情况。

多进程程序不一样,父进程用kill()通知全部的进程,包括它自己,所以会出现多次收到同一信号的情况。

不过,ftp服务程序加上你说的这些代码会更严谨。

0
0

C/C++气象数据中心实战,手把手教你做工业级项目

通过技术的实际应用,掌握等同2年经验的技术能力

968 学习 · 401 问题

查看课程