본문 바로가기

프로그래밍/API

TIP. fork() 시 callback 처리

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가 일어나면 자동적으로 해당 함수들이 실행된다.