ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 생성된 pthread를 중간에 종료시키자.(pthread_cancel)
    2012. 1. 12. comments
    반응형

    pthraed_create를 통해서 만들어진 thread는 중간에 종료시켜야 할 필요가 있을 때 pthread_cancel를 사용하여 실행중인 thread를 종료 시킬 수 있다.

      #include <pthread.h>

     int pthread_cancel(pthread_t thread);



    간단히 작성한 코드를 작성하여 strace한 결과를 보면, clone 함수를 통해서 thread를 만들고(thread id:2104) 나중에 pthread_cancel이 호출되는 부분에서 tgkill 함수에 thread id를 넘겨 줌으로써 해당 thread를 취소시킨다. 사실 취소라는 말 보다는 시그널을 전달하여 종료시킨다라고 할 수 있다.

    ...

    clone(child_stack=0xb782b494, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID, parent_tidptr=0xb782bbd8, {entry_number:6, base_addr:0xb782bb70, limit:1048575, seg_32bit:1, contents:0, read_exec_only:0, limit_in_pages:1, seg_not_present:0, useable:1}, child_tidptr=0xb782bbd8) = 2104
    rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0
    rt_sigaction(SIGCHLD, NULL, {SIG_DFL, [], 0}, 8) = 0
    rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
    ...
    ... 
    tgkill(2103, 2104, SIGRTMIN)            = 0
    .... 



    아래 내용은 내용을 정리하면서 추가로 알게 된 사실이다.

    • clone 함수는 프로세스 복사에 사용되는 fork 함수에서만 활용되는줄 알았는데 thread 만들 때에도 clone 함수가 사용된다. 
    • thread간 명령은 signal을 통해 전달된다.



    반응형

    댓글

Designed by Tistory.