UNIX / Mac OS X 터미널의 ^ C와 ^ D의 차이점은 무엇입니까? 일부 프로그램이

무언가를 멈추려 고 할 때 ^ C를 사용하고 때로는 ^ D를 터미널에 사용합니다.

이 둘의 차이점은 무엇입니까? 일부 프로그램이 ^ C에 응답하지 않고 ^ D에 응답하는 이유는 무엇입니까? ^ D를 사용할 때 왜 Terminal.app가 종료됩니까?



답변

CtrlC터미널 SIGINT이 현재 포 그라운드 프로세스에 a를 보내도록 지시합니다.이 프로세스는 기본적으로 응용 프로그램을 종료합니다. CtrlD터미널에 표준 입력에 EOF를 등록해야한다고 지시합니다.이 bash는 종료하려는 욕구로 해석됩니다.


답변

Ctrl+ D( ^D) 는 파일의 끝을 의미 합니다 . 그것은 줄의 시작 부분에서만 작동하며 (약간 단순화하고 있습니다) 프로그램이 터미널에서 입력을 읽지 않으면 아무런 영향을 미치지 않습니다. 실험 ^D에서 쉘에 더 이상 명령을 입력하지 않을 것이라고 말하면서 종료했습니다. 서브 프로그램이 종료되었으므로 터 L 널이 종료되었습니다.

Ctrl+ C( ^C)는 “인터럽트”를 의미합니다. 즉, 수행중인 작업을 중지합니다. 기술적으로 누르면 INT 신호가^C 전송 됩니다. 기본적으로 응용 프로그램이 종료되지만 많은 프로그램에서 최상위 수준으로 돌아갑니다 (예 : 셸에서 명령 줄 입력을 중지하고 원래 프롬프트로 돌아 가기).

프로그램이에 응답하지 않으면 + ( )를 ^C시도 할 수 있습니다 . 이것은 기본적으로 응용 프로그램을 종료하고 너무 많은 프로그램이 가로 채지 않는 QUIT 신호를 보냅니다 .Ctrl\^\

신호를 보내는 또 다른 키는 Ctrl+ Z( ^Z)입니다. TSTP 신호를 전송하여 포 그라운드에서 실행중인 프로그램을 일시 중지합니다. (TSTP는 “터미널 정지”의 약자입니다. STOP 과 비슷 하지만 중지 할 수없는 반면 TSTP는 무시할 수 있습니다.) 셸에서 fg명령 (포 그라운드로 다시 시작) 또는 bg명령 ( 배경).

이 키들은 모두 stty명령 으로 변경할 수 있습니다 . 일부 프로그램, 특히 키 바인딩이있는 전체 화면 프로그램은 비활성화합니다.


답변

위의 두 가지 좋은 답변을 추가 한 예는 다음과 같습니다.

python쉘 을 입력 하면 파이썬의 >>> 프롬프트로 이동합니다.

당신이 명중하면 지금 Ctrl+C, 그것은 말할 것 KeyboardInterrupt와 >>>에 머물.
예를 들어 입력하여 for 루프에 들어가면 for x in (text):… 프롬프트를 표시하여 추가 로 입력 하기를 기다립니다. Ctrl+C지금 눌렀을
경우 for 문에서 빠져 나와 >>> 프롬프트로 돌아갑니다. Ctrl+D>>> 또는 …에 관계없이 파이썬 프롬프트에서 빠져 나와 원래 쉘로 돌아갑니다.

마찬가지로, 다른 시스템으로 ssh Ctrl+C하면 기존 명령 Ctrl+D이 종료되고 시스템에서 종료됩니다. (또한 Delete키는을 수행하는 것과 같습니다 Ctrl+D)