LINUX에서 fork() 함수를 사용하는 경우, fork 전후의 처리를 해야하는 상황이 있다.
일반적으로는
pid_t pid;
if ((pid = fork()) < 0) // error
;
else if (pid == 0) { // child }
else if (pid > 0) { // parent }
와 같은 형태로 처리해도 되지만,
pthread_atfork()를 사용하면 좀더 효율적인 처리가 가능하다.
void fork_ready() { fprintf(stderr, "fork() 전\n"); }
void fork_child() { fprintf(stderr, "fork() 이후 - CHILD\n"); }
void fork_parent() { fprintf(stderr, "fork() 이후 - PARENT\n"); }
int main(int argc, char *argv[])
{
...
pthread_atfork(fork_ready, fork_parent, fork_child);
...
}
을 통해서, fork가 일어나면 자동적으로 해당 함수들이 실행된다.