UNIX / Mac OS X 터미널의 ^ C와 ^ D의 차이점은 무엇입니까?


58

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

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


참고 : Control + C에서 제작 한 텍스트 끝 문자 U + 0003 및 Control + D에서 제작 한 문자 U + 0004에 대해서는 Wikipedia 페이지를 참조하십시오 .
바질 부르 케

답변:


58

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


60

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

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

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

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

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


작은 수정 : Control-Z는 TSTP (터미널 정지) 신호를 보냅니다. 이것은 프로세스에 의해 포착되거나 무시 될 수 있지만 STOP 신호는 불가능합니다.
Chris 페이지

이것이 필요했습니다! 그것은 붙어 있었고, 나올 수 없었다
ahnbizcad

1
CTRL-D에 대한 제안은 "지금까지 입력 한 입력 내용 플러시"를 의미하며 행이 비어 있으면 read ()는 0으로 리턴되며 "파일 끝"으로 해석됩니다.
luca

이것은 매우 중요하고 유용한 정보입니다. 포괄적이고 명확한 설명에 감사드립니다
iono

궁금한 점이 있는데 왜 쉘에서 실행되는 파이썬 프로그램이 ctrl + c로 종료되지 않고 대신 프롬프트 KeyboardInterrupt합니까? ctrl + d (줄의 시작 부분에있는 경우)와 ctrl + \로 종료됩니다.
Rick

2

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

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

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

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


이 답변에 감사드립니다. 그러나 직접 시도해 볼 때 약간의 부정확성을 발견했습니다. 원격 컴퓨터에 ssh 's하고 python 프로세스를 실행하는 동안 Ctrl + D는 Python을 종료하고 원격 컴퓨터의 프롬프트로 돌아 갔지만 컴퓨터에서 종료되지 않았습니다. 또한 Delete 키는 python, 원격 프롬프트 또는 로컬 프롬프트에서 Ctrl + D와 동일하게 작동하지 않습니다. 물론 파이썬으로 입력하는 동안 실제로 문자를 삭제하는 것을 제외하고는 아무것도하지 않는 것 같습니다. 그러나 Ctrl + D는 입력 할 때 Delete 키 역할을하며 문자를 삭제했습니다.
Stack Underflow

1
흥미 롭습니다. 사용중인 쉘의 종류 (bash, ksh 등)에 달려 있다고 생각합니다.
Siddhartha
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.