项目中,父进程通过fork和exec的方式创建了子进程,但是在关闭父进程后,无法正常重启,提示端口被占用。原因无非就是fork子进程时,使用了父进程所有的资源,而在exec时,原父进程的资源没有正确的释放掉。
尤其像socket的使用,会提示端口被占用,只需要在创建socket的时候,加上SOCK_CLOEXEC参数即可。
socket(AF_INET, SOCK_DGRAM|SOCK_CLOEXEC, IPPROTO_UDP);
进程间通信标识 close-on-exec机制,就是为了解决这个问题