Linux에서 Ctrl + c를 두 번 입력하면 실행중인 프로세스가 중지되는 이유는 무엇입니까?


24

vlc와 같은 Linux 프로그램이 있는데 , 프로그램이 첫 번째 프로그램 이후에 중지되지 않은 경우 터미널에서 실행을 종료하려면 ctrl+를 c두 번 입력하는 것이 좋습니다 .

처음으로 작동하지 않을 때 ctrl+를 c두 번 입력하는 이유는 무엇 입니까?


6
[인용 필요]
Ignacio Vazquez-Abrams

답변:


35

그것이하는 일은 전적으로 응용 프로그램에 따라 다릅니다. ctrl+ 를 누르면 c터미널 에뮬레이터가 SIGINT 신호를 포 그라운드 애플리케이션으로 전송 하여 적절한 "신호 핸들러"를 트리거합니다. SIGINT의 기본 신호 처리기는 응용 프로그램을 종료합니다. 그러나 모든 프로그램은 SIGINT에 대한 자체 신호 처리기를 설치할 수 있습니다 (실행을 전혀 멈추지 않는 신호 처리기 포함).

분명히, vlc 는 처음 호출 될 때 정리 / 정상 종료를 시도하는 신호 처리기를 설치하고 두 번째로 호출 될 때 실행을 즉시 종료하는 기본 동작으로 되돌아갑니다.


3
일부 시스템에서는 핸들러에 대한 호출 후 신호가 SIG_DFL로 되돌아갑니다 (같은 신호에서 핸들러를 두 번 호출하지 않도록하기 위해). 이것을 SysV 시맨틱이라고합니다. 많은 프로그램이 신호 처리기를 처리기 끝에서 원래의 온 프로그램 설정으로 다시 설정하지 않습니다. 이것은 일반적으로 프로그래밍 버그입니다. signal (2) 맨 페이지 에 대한 자세한 내용을 읽으십시오 .
Arcege

16

Ctrl+가 보낸 신호 인 SIGINTC 는 일반적으로 프로그램에게 기본 명령 처리 루프로 나갈 수 있거나, 말이되지 않으면 깨끗하게 종료하도록 지시합니다. 일부 프로그램은 SIGINT를받을 때 정리 절차를 실행합니다. 프로그램이 너무 엉망인 경우 일부 프로그램에서는 정리 절차가 실패하여 두 번째 Ctrl+로 C인해 프로그램이 즉시 종료됩니다. 이렇게하는 것은 각 프로그램 작성자에게 달려 있습니다.

두 번째 경우 Ctrl+이 C프로그램을 죽이지 않고, 시도 Ctrl+ \전송하는, SIGQUIT , 더 폭력 (하지만 여전히 잡을 수있는 신호)를, 또는 시도 Ctrl+ Z중단 프로그램을 다음 kill예 (명령을 kill %1전송하는 SIGTERM을 , 종래 덜 폭력적인 신호를 SIGQUIT보다 작업 번호 1). 다른 모든 방법이 실패하면로 kill -KILL알려지지 않은 kill -9신호 SIGKILL을 전송하여 프로그램을 종료하십시오 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.