리눅스 서버에서 epoll을 이용해서 event를 감시하면서 동시에 fork할 때는 주의가 아주매우많이 필요하다. 커널 소스를 직접 들여다 봐야하겠지만, 대략 시간이 없고 귀찮은 관계로 생략한다. 결론부터 말하자만 epoll_fd로 관리하는 감시할 이벤트 목록은 커널영역에 만들어지며, fork가 이를 복제하지 않기 때문에 부모 자식 간에 동일한 epoll_fd로 목록을 수정하면 인생 종치는거다. 자자... 말이 길었다. 대충 소스를 보도록 하자. #include <sys/epoll.h> #include <stdio.h> #include <stdlib.h> #include <string.h> int main(int argc,char* argv[]) { const size_t epoll_size(1024); int epoll_fd = epoll_create(epoll_size); struct epoll_event ev; memset(&ev, 0, sizeof(ev)); ev.events = EPOLLIN; epoll_ctl(epoll_fd, EPOLL_CTL_ADD, 0, &ev); printf("%s\n", strerror(errno)); if (!fork()) { //epoll_ctl(epoll_fd, EPOLL_CTL_DEL, 0, &ev); // 여기 주목! close(epoll_fd); return 0; } sleep(1); struct epoll_event evs[epoll_size]; int res = epoll_wait(epoll_fd, evs, epoll_size, 1000); prin