전경 작업이있는 ctrl c vs. ctrl z


26

Ctrl+ Z는 작업을 중지하고 Ctrl+ C는 작업을 종료합니다.

왜 그런가요? 다른 방법으로 이해가되지 않습니까?

z@z-lap:~$ sleep 100&
[1] 4458
z@z-lap:~$ sleep 200&
[2] 4459
z@z-lap:~$ jobs
[1]-  Running                 sleep 100 &
[2]+  Running                 sleep 200 &
z@z-lap:~$ fg %1
sleep 100
^Z
[1]+  Stopped                 sleep 100
z@z-lap:~$ jobs
[1]+  Stopped                 sleep 100
[2]-  Running                 sleep 200 &
z@z-lap:~$ fg %1
sleep 100
^C
z@z-lap:~$ jobs
[2]+  Running                 sleep 200 &

4
"다른 방법으로는 더 이해가되지 않습니까?" 왜 그렇게 생각하는지 지정할 수 있습니까?
glglgl

답변:


55

작업 제어 표기법에 대해 혼란 스러울 수 있습니다. 특히 "중지됨"은 작업이 아직 진행 중이지만 처리 할 수있는 기능이 유지되었음을 나타냅니다 (CPU에서 처리 할 시간이 없음). 올바른 기술 용어는 아니지만 실제로는 "일시 중지"또는 "일시 중지"상태입니다.

  • CtrlC작업을 "중지"하지 않고 취소하거나 종료합니다. 기술적으로 인터럽트 신호가 프로그램으로 전송되어 수행중인 작업을 중단하고 즉시 종료하도록 지시합니다. 일부 프로그램은이 신호를 듣고 종료하기 전에 자체적으로 응급 정리 작업을 수행합니다. 다른 사람들은 신호에 응답하지 않고 그 후에 중단됩니다.

  • CtrlZ반면에 "직업을 중지"합니다. 다시 이것은 신호로 이루어 지지만 이번에는 '인터럽트'신호 대신 '정지'입니다. 이것은 효과적으로 보류 상태로 만들고 제어를 쉘로 리턴하지만 실제로 작업을 종료하지는 않습니다. 이러한 작업을 계속 실행 bg하려면 마지막으로 중지 된 작업을 백그라운드로 전송 하는 명령을 발행 할 수 있습니다 . 그런 다음 처음부터 실행 한 것처럼 백그라운드 작업으로 계속 실행됩니다 &. 또한 fg포 그라운드에서 마지막으로 중지 된 작업을 재개하는 데 사용할 수 있습니다 ( 중지 된 위치에서 계속 진행하고 다시 작업 할 수 있도록 허용).


여전히 Ctrl + Z는 SIGKILL을 보내고 Ctrl + C는 SIGINIT를 보냅니다. 따라서 Ctrl + Z는 작업을 종료합니다. 그러나 내 예제에서 Ctrl + Z 만 말한 것처럼 작업을 중지합니다. 그래서 조금 혼란스러워합니다.
neo0

10
@ neo0-어쩌면 이상한 맞춤 설정에 익숙하십니까? 해당 맵을 사용하는 응용 프로그램이있는 경우를 대비해서는 안되지만 그 물건을 구성 할 수 있습니다. 그러나 기본 구성은 CTRL+C=SIGINTCTRL+Z=SIGTSTP입니다.
mikeserv

3
갈렙이 옳습니다 (+1). ctrl-Z는 프로그램을 "정지"하는 것으로 간주하지만 프로그램이 여전히 메모리에 있고 파일이 열려있는 등의 프로그램을 중지합니다. 종료 / 종료되지 않습니다.
Olivier Dulac

"일시 중지"가 "중지"보다 명확 할 수 있습니다.
Russell Borogove

1
@jiggunjer 그것은 모양에 관한 것입니다. 이 답변 에 대한 몇 가지 배경 제공 이유는 두 단계가 필요하고 이 일 개 일부 기능이 그 단계 더 고통하게 소개하고 있습니다.
Caleb
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.