나는 종종 큰 파일을 읽은 다음 잠시 후에 종료하고 싶지만
Ctrl+ C를 누르면 프로그램이 멈출 때 까지 지연이 발생 합니다. Ctrl+ C키를 여러 번 눌러 지연 시간을 줄일 수 있습니까? 아니면 내가 키 누르기를 낭비하고 있습니까?
^C
프레스가 등록 될 때 쉘이 출력 될 것입니다 (적어도 bash는 작동합니다)
나는 종종 큰 파일을 읽은 다음 잠시 후에 종료하고 싶지만
Ctrl+ C를 누르면 프로그램이 멈출 때 까지 지연이 발생 합니다. Ctrl+ C키를 여러 번 눌러 지연 시간을 줄일 수 있습니까? 아니면 내가 키 누르기를 낭비하고 있습니까?
^C
프레스가 등록 될 때 쉘이 출력 될 것입니다 (적어도 bash는 작동합니다)
답변:
첫 번째 후에 Ctrl-C프로그램은 SIGINT
tmp 파일 삭제, 소켓 닫기 등 을 받고 일반적으로 정리를 시작합니다. 당신이 공격하면 Ctrl-C그 일이 벌어지고있는 동안 다시는 할 수 있습니다 (즉, 추가 신호가 깨끗한 업 인터럽트 루틴 일이 발생할 수도 뒤에 혼란을 떠나, 대신 혼자되는 작용 수를). 일반적으로 그렇지는 않지만 더 일반적으로 추가 신호는 이후에 전송됩니다.시스템과 작업자의 상호 작용에 내재 된 지연으로 인해 프로세스가 완료되었습니다. 즉, 다른 프로세스 (종종 쉘은 아니지만 항상)에 의해 신호가 수신됩니다. 해당 수신자가이 신호를 제대로 처리하지 않으면 (일반적으로 쉘이하는 것처럼-Jenny D의 답변 참조) 그러한 조치의 결과에 불쾌하게 놀랄 수 있습니다.
INT
프로세스가 수신 한다는 또 다른 신호일뿐입니다 .
trap "sleep 20 || echo clean up cancelled!" EXIT ; sleep 10
. 스크립트를 실행하고 ctrl-C를 두 번 누르십시오. 두 번째 ctrl-C가 "정리"루틴 (트랩 명령문에서)으로 전달되고 해당 sleep
명령이 종료됨을 알 수 있습니다.
trap "sleep 20 || echo clean up cancelled!; sleep 10; echo 'but continued'" EXIT ; sleep 10
일뿐 sleep
입니다. 우리는 둘 다 잘못된 xD였다
isig
켜져 있으면 커널이 CTRL-C를 눌렀을 때 (터미널 에뮬레이터의 경우 터미널 에뮬레이터가 의사 터미널의 마스터 측에 쓰면) SIGINT 신호가 모든 터미널의 포 그라운드 프로세스 그룹의 프로세스. 거기에서 차단 될 수 있지만 나중에 다른 프로세스로 전달되지는 않습니다. 터미널 장치 버퍼가 가득 차더라도 (응용 프로그램이 입력 한 내용을 읽지 못했음) CTRL-C는 대기열을 뛰어 넘습니다.
당신은 그들을 낭비하고 있습니다. 서버가 화면 출력을 마치면 여러 개의 서버가 수신됩니다 Ctrl-C. 첫 번째 프로세스는 프로세스를 종료하는 데 사용되며 다음 프로세스는 쉘에서 종료됩니다.
[user@server]$ ^C
[user@server]$ ^C
[user@server]$ ^C
[user@server]$ ^C
[user@server]$ ^C
[user@server]$
짧은 대답 : 프로세스가 이에 반응하는 경우.
긴 대답 : ctrl+를 c누르면 커널이 프로세스에 신호를 보냅니다. 다음 명령으로 어떤 신호를 결정할 수 있습니다.
user@host:~# stty -a | grep -i "\^C"
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
의 매뉴얼 페이지를 참조하십시오 stty
:
intr CHAR
CHAR will send an interrupt signal
이는 신호의 INT
, 또한 공정이 이것에 반응 할 수있는 처리기의 신호를 갖는 경우 2. 번호라고도. 대부분의 프로세스는 일부 정리 작업을 수행하여 성공적으로 종료됩니다.
kernel
전경 공정에서 모든 공정 SIGINT를 보낸다 (단말, 단말 드라이버의 제어 규칙) 그룹 단말 중.
나는 항상 언론에이 Ctrlc여러 번. 나는 첫 번째 언론에서 반응을 보인 적이 없으며 시스템이 실제로 Ctrlc전송되고 있음을 알 때까지 여러 번 사용해야합니다 . 실제로 대부분을 그리워하거나 잃어버린 것처럼 보입니다.
bash
이지만zsh
항상 부모를 닫는 경우에는 해당되지 않습니다 . 내가 좋아하는 이유 중 하나입니다zsh
.