
프로세스를 정상적으로 종료하려면 보내야 하는데 SIGINT
그럴 수 없습니다.
실행이 일어나는 환경이 "알 수 없음"(travis.com의 bash 스크립트)이기 때문에 예시입니다.
나는 이와 같은 프로세스를 시작하여 동일한 동작을 얻을 수 있었습니다.(command &) &
vagrant@host:~$ (sleep 40 &) &
[1] 8473
vagrant@host:~$ ps -o pid,pgid,args
PID PGID COMMAND
2787 2787 -bash
8474 8473 sleep 40
8490 8490 ps -o pid,pgid,args
[1]+ Done ( sleep 40 & )
vagrant@host:~$ kill -INT 8474 ##### here I send SIGINT to the process
vagrant@host:~$ kill -INT -8473 ##### here I send SIGINT to the process group
vagrant@host:~$ ps -o pid,pgid,args
PID PGID COMMAND
2787 2787 -bash
8474 8473 sleep 40
8559 8559 ps -o pid,pgid,args
신호와 그룹에 대해 검색하고 많이 읽었지만 여기서 무슨 일이 일어나고 있는지 이해할 수 없습니다. 어느 시점에서 신호가 무시되었습니까? 뭐가 문제 야? SIGINT
이 sleep
프로세스 로 어떻게 보낼 수 있나요 ?
편집하다: SIGTERM
사용하면 프로세스가 종료됩니다. (어쩌면 부모-자식 쉘이 종료되는 걸까요?)
답변1
비대화형 작업이 SIGINT에 응답하려면 SIGINT에 대한 핸들러를 생성해야 합니다.
$ ( (trap "echo Got SigInt" SIGINT; sleep 60) & ) &
[1] 13619
$
[1]+ Done ( ( trap "echo Got SigInt" SIGINT; sleep 60 ) & )
$ ps -o pid,pgid,args
PID PGID COMMAND
11972 11972 bash
13620 13619 bash
13621 13619 sleep 60
13622 13622 ps -o pid,pgid,args
$ kill -INT 13620
$ kill -INT 13621
$ Got SigInt
수면 프로세스에 SIGINT 보내기
Stéphane Chazelas가 의견에서 제안한 것처럼 SIGINT의 기본 동작을 반환하는 것이 목표라면 다음 trap - SIGINT
과 같이 사용할 수 있습니다.
$ ( (trap - SIGINT; sleep 60) & ) &
[1] 16690
$ ps -o pid,pgid,args
PID PGID COMMAND
11972 11972 bash
16691 16690 bash
16692 16690 sleep 60
16693 16693 ps -o pid,pgid,args
[1]+ Done ( ( trap - SIGINT; sleep 60 ) & )
$ kill -INT 16692
$ ps -o pid,pgid,args
PID PGID COMMAND
11972 11972 bash
16698 16698 ps -o pid,pgid,args