[t:/]$ 지식_

SIGKILL, SIGSTOP, SIGCONT, SIGTERM, SIGHUP

2016/10/31

시그널을 핸들링 하는 일이 별로 없는 요즘의 생활이지만, 가끔 쓸 일이 생긴다. 대충은 알고 있는데 정확히는 잘 모른다.

아래부터의 글도 대충 쓴 글이고 정확히 쓴 글은 아님을 참고.

SIGHUP

프로세스를 재시작한다. 그런데 이전 프로세스 핸들러에 들어간 후 나오질 못해서 (exec 됐으니까) 시그널 블럭에 걸린다. 언블럭 시키려면 다음과 같이 한다. 프로세스 포크되면서 상속받는 자원은 다 받으니까 잘쓰면 약이고 못쓰면 븅이다.

sigemptyset(&newmask);
sigaddset(&newmask, SIGHUP);
sigprocmask(SIG_UNBLOCK, &newmask, &oldmask);

SIGTERM

프로세스 중단시킬 때 받는다. 자원 해제등 마무리 작업이 필요하면 쓴다. SIGKILL과 SIGSTOP은 후킹해서 쓰는 시그널이 아니다. 시스템이 그냥 처리한다. SIGKILL을 쓰면 프로세스를 즉시 중단 할 것이고, SIGSTOP은 프로세스 상태를 변경하여 멈춘다. SIGCONT를 보내면 멈춘 프로세스가 다시 살아난다. 뺑뺑이 코드 돌려서 kill 명령어로 시그널을 보내보면 바로 이해가 됨. SIGTERM은 SIGKILL과 달리 개발자가 후킹할 수 있으므로 프로세스를 죽이기 전에 해야 할 일들이 있다면 여기서 하기 딱 좋다.









[t:/] is not "technology - root". dawnsea, rss