SIGINT가 중지된 프로세스를 종료하지 않는 이유는 무엇입니까?

SIGINT가 중지된 프로세스를 종료하지 않는 이유는 무엇입니까?

~에 따르면POSIX 표준신호와 관련하여("표준 신호" 섹션 참조) 기본 작업이 있습니다 SIGKILL.SIGINT학기. 그러나 SIGSTOP(또는)을 통해 수신 프로세스를 중지하는 경우에는 그렇지 않은 것 같습니다 SIGTSTP.

단순화를 위해 무한 루프가 있는 프로그램을 만든다고 가정해 보겠습니다.

int main(){
   while(1);
}

컴파일하고 실행해 보세요.

$ ./program

그런 다음 을 눌러 CtrlZ중지합니다. 이로 인해 SIGTSTP신호가 프로세스에 전달됩니다. 이제 SIGINT프로세스에 신호를 보내고 kill -SIGINT pid프로세스 테이블을 보면 ps -aux아직 종료되지 않은 것을 알 수 있습니다. 하지만 보내면 kill -SIGKILL pid종료됩니다.

둘 다 동일한 기본 작업( SIGINT예:SIGKILL학기)?

답변1

SIGKILL기본적으로 프로세스는 종료되어 차단할 수 없지만, SIGINT기본적으로 프로세스는 종료되지만 차단될 수 있습니다. ()를 사용하여 CtrlZ프로세스를 백그라운드로 이동하므로 SIGTSTP신호는 차단되고 SIGINT실행을 재개할 때까지 프로세스에 전달되지 않습니다().SIGCONT

관련 정보