터미널에서 Ctrl-z와 Ctrl-c의 차이점은 무엇입니까?


120

누구든지 ctrl+ zctrl+ 의 차이점을 말해 줄 수 있습니까 c?

터미널에있을 때 두 조합이 현재 프로세스를 중지하지만 두 차이점은 정확히 무엇입니까?


나는 여기에 매우 비슷한 질문을했다 : unix.stackexchange.com/questions/116959/…
ThorSummoner


예, 나는 둘의 차이점을 이해하는 데 성공했습니다 !!
chaitanya lakkundi

내가 여기에 추가하고 싶은 한 가지는, 대부분의 녀석들 (나의 프로 서클에도 있음)은 그들 사이를 구별하지 않는다는 것입니다. 그리고 CTRL-Z 옵션을 사용하여 명령을 종료했습니다. 어떤 연습이 잘못되었습니다. 이러한 모든 인스턴스에서 CTRL-C를 사용해야합니다. CTRL-Z는 단순히 배경을 넣습니다. 따라서 CTRL-Z를 눌러 종료 할 때 사용자가 원하지 않을 수도 있습니다.
kuldeep.kamboj

답변:


155

가장자리 케이스를 한쪽으로 남겨두면 차이점이 간단합니다. Control+ C는 거의 즉시 응용 프로그램을 중단하고 Control+ Z는 백그라운드로 중단하고 일시 중단합니다.

셸은 다음 조합에서 기본 응용 프로그램으로 다른 신호를 보냅니다.

  • Control+ C(제어 문자 intr)는 SIGINT를 보내어 응용 프로그램을 중단시킵니다. 일반적으로 중단을 야기하지만 결정하는 것은 응용 프로그램에 달려 있습니다.

  • Control+ Z(제어 문자 susp)는 SIGTSTP를 포 그라운드 애플리케이션으로 전송하여 백그라운드에 효과적으로 배치하고 일시 중단합니다. 이것은 편집기와 같은 것을 분리하여 필요한 데이터를 가져와야 할 때 유용합니다. 다음을 실행하여 응용 프로그램으로 돌아갈 수 있습니다 fg(또는 그림의 작업 번호는 %x어디에 있습니까 ).xjobs

    우리는 실행하여 테스트 할 수 있습니다 nano TEST다음, 눌러 Control+를 Z누른 다음 실행 ps aux | grep TEST. nano프로세스가 아직 실행 중임 을 보여줍니다 .

    oli     3278  0.0  0.0  14492  3160 pts/4    T    13:59   0:00 nano TEST
    

    또한 상태 열에있는 T 에서 프로세스가 중지되었음을 알 수 있습니다. 그래도 여전히 살아 있지만 실행 중이 아닙니다 ... 다시 시작할 수 있습니다.

    일부 응용 프로그램은 대기중인 웹 프로세스와 같은 외부 프로세스가 잠 들어있을 때 시간 초과 될 수있는 경우 충돌합니다.


51
Ctrl + Z 된 응용 프로그램을 다시 포 그라운드로 다시 배치 하지 않고 일시 중단 하지 않고bg (대신에 fg) 실행하는 것도 가능합니다 . 응용 프로그램을 시작할 때 사용한 것처럼 응용 프로그램을 시작한 셸 응용 프로그램 자체를 효과적으로 제어 할 수 있습니다 . 이것은 당신이 그것을 시작하는 것을 잊었을 때 종종 유용합니다 :)&&
Malte Skoruppa

6
fg다시 입력하면 해당 프로세스로 돌아갈 수 있습니다 .
sleblanc

4
여러 작업이 일시 중단되었거나 백그라운드에있는 경우 : "작업"을 나열하고 "fg % n"또는 "bg % n"또는 "kill % n"을 지정하여 작업 % n을 포 그라운드, 백그라운드 또는 종료에 배치하십시오. .
Olivier Dulac

3
@Oli : 두 번째 단락은 "쉘 전송은 기본 응용 프로그램에 신호를 보냅니다.…"입니다. 아니요, 운영 체제 / 터미널 드라이버는 신호를 보냅니다. 창 시스템에서 창 관리자가 역할을 수행 할 수도 있습니다. 또한 원래 질문의 범위를 벗어나더라도 완료하려면 Ctrl + \를 언급 할 수 있습니다.
Scott

어떻게 세션 중 하나를 수행 한 후 포 그라운드로 복귀하는 어떤 프로세스 그룹을 알고 않습니다 ctrl c또는 ctrl z? 기본적으로 SID (bash)입니까?
jiggunjer

16

Control+ Z는 프로세스를 일시 중단하고 ( SIGTSTP) Control+ C는 프로세스를 중단합니다 ( SIGINT)

http://en.wikipedia.org/wiki/Control-Z

유닉스 계열 시스템에서 Control + Z는 프로세스를 중단시키는 키 시퀀스에 대한 가장 일반적인 기본 키보드 매핑입니다.

http://en.wikipedia.org/wiki/Control-C

POSIX 시스템에서이 시퀀스는 활성 프로그램이 SIGINT 신호를 수신하게합니다. 프로그램이이 조건을 처리하는 방법을 지정하지 않으면 종료됩니다. 일반적으로 SIGINT를 처리하는 프로그램은 여전히 ​​자체 종료되거나 내부에서 실행중인 작업을 종료합니다.


1
좋은 직업 게시 참조. 그러나 일반적으로 Wikipedia는 기술 참조를위한 훌륭한 소스가 아닙니다.
Aaron

3
@ BryceAtNetwork23 그건 사실입니다. 이 경우 Wikipedia 정의가 충분하다고 느꼈습니다. 앞으로 더 많은 기술 참조를 찾을 것입니다!
수면 박탈 Bulbasaur

13

Ctrl+ C신호 처리를 죽이는 데 사용된다 SIGINT말하면 그것은 정중 .

Ctrl+ ZSIGTSTP잠자기 신호와 같은 신호를 보내서 프로세스를 일시 중단하는 데 사용되며 취소 할 수 있으며 프로세스를 다시 시작할 수 있습니다.

그러나 프로세스가 일시 중단되면 fg(전경에서 다시 시작) 및 bg(배경에서 다시 시작 )하여 다시 시작할 수 있지만 종료 된 프로세스를 다시 시작할 수는 없습니다. 즉 Ctrl+ C& Ctrl+ 사용의 차이점 Z입니다.

일시 중단 된 프로세스를 어떻게 수 있습니까?

jobs명령은 다음과 같은 출력을 제공합니다.

[1]-  Stopped                 cat
[2]+  Stopped                 vi

방법 죽일 배경에서 일시 중단 된 프로세스를?

kill명령 을 사용하여 :

kill %n여기서 명령으로 n표시되는 번호 jobs입니다. 고양이를 죽이고 싶다면 : kill %1.


1
이 스레드의 다른 주석에 따라 수정 : ctrl-z는 SIGSTOP이 아닌 SIGTSTP 신호를 보냅니다.
lukewendling

Kill % 1이 알려줍니다-작업이 허용되지 않습니다. 왜 그래? 감사합니다
사티 프라 카쉬

7

간단히 말해 :

  • CTRL-C 프로그램 중단을 요청합니다 .

  • CTRL-Z 프로그램이 일시 중단되고 백그라운드로 이동하도록합니다 .

    이것은 나중에 명령으로 다시 시작할 수있게합니다 fg. 로그인 쉘을 종료하면 나머지 백그라운드 작업이 종료됩니다.


5

도움 될 것입니다

Ctrl+ Z는 SIGSTOP 신호를 보내 프로세스를 일시 중단하는 데 사용되며,이 신호는 프로그램에서 가로 챌 수 없습니다. 동안 Ctrl+는 C신호 SIGINT와 프로세스를 종료하고,이 종료하기 전에 자체를 정리할 수 있도록 프로그램에 의해 차단 될 수있다, 또는 전혀 종료되지 사용됩니다.


4
이것은 완전히 정확하지 않습니다. SIGTSTP프로그램에서 잡을 수있는를 보냅니다 . 네 가지 프로그램을 일시 중단 할 수 있습니다 신호가있다 SIGSTOP, SIGTSTP, SIGTTIN,는 SIGTTOU. 이들 중 SIGSTOP막을 수 없습니다. 다른 세 개는 다른 조건에서 프로세스를 중지하기 위해 터미널에서 사용합니다.
kasperd

4

ctrl+ 를 누르면 c프로세스에 SIGINT를 보냅니다. 같은 당신이 명령을 입력합니다 kill -SIGINT <your_pid>. 프로세스가 종료됩니다. ps 명령을 실행할 때 볼 수없는 이유 입니다. +
를 누르면 SIGSTOP을 프로세스로 보냅니다. 같은 당신이 명령을 입력합니다 . 프로세스가 중지되지만 프로세스는 여전히 활성 상태입니다. 따라서 SIGCONT를 프로세스로 보내 프로세스를 다시 활성화 할 수 있습니다.ctrlzkill -SIGKSTOP <your_pid>

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