我正在用C编写一个程序,一个服务器 - 客户端传输(socket
,send
,recv
...)
符合网站http://www.netzmafia.de/skripten/unix/linux-daemon-howto.html,
和其他资源一起使用fork()
生成新的子进程(可能是写日志文件)后,它们都退出父进程并关闭所有文件描述符(FD)。
我想知道是否有必要这样做,因为我希望在父进程(服务器)的代码中做一些事情。此外,这个父进程将侦听来自套接字的新连接或请求,我想如果关闭所有FD将无效。
感谢。
答案 0 :(得分:1)
你好像混淆了一下。 “守护进程”仅与在后台启动服务器相关。当此服务器为每个客户端分配一个工作进程时,服务器通常会关闭客户端套接字(因为将来只有工作进程需要它),但当然会使listen-socket保持打开状态而不会退出。
所以:
守护进程是为了让主服务器进程在后台(通常为fork()
,退出父进程,子进程关闭stdin / stdout / stderr并调用setsid())
服务器为每个连接分配子级以处理客户端请求并在fork之后关闭客户端套接字,但维护侦听套接字以服务未来的客户端。
如果您需要从此父级守护另一个进程,请使用double-fork():
setsid()