실제로 0을 죽이는 것은 무엇입니까? [닫은]


22

에서 다음 man page과 같이 말합니다.

kill [ -s signal | -p ] [ -a ] [ -- ] pid ...
 pid... Specify the list of processes that kill should signal.  Each pid can be one of five things:
          0      All processes in the current process group are signaled

그리고 나는 이것을 bash에서 시도했다.

$ man kill &
[1] 15247
$
[1]+  Stopped                 man kill
$ kill 0
$ ps
15247 pts/41   00:00:00 man

여기 0로 사용됩니다 pid. 내가 이해했듯이 kill 0현재 프로세스의 모든 프로세스를 종료합니다 pid15247. 그러나이 예제에서는 아무 것도하지 않았습니다. 누구든지 그것을 사용하는 방법에 대한 아이디어가 있습니까?


그것은 SIGTERM프로세스에 a 를 보낸다 . man명령은 무시 선택했다.
jordanm

5
@ 조단 대화식 쉘로 시작된 작업에는 쉘과 다른 프로세스 그룹이 있습니다. 이것이 쉘이 전경과 배경에 넣을 수있는 방법입니다. 참조 ps -j프로세스 그룹을 볼 수 있습니다.
Stéphane Chazelas

1
이 질문은 실제로 수퍼 유저 질문의 사본입니다. kill 0은 실제로 무엇을합니까? (StackOverflow에서 마이그레이션 됨). StackOverflowUnix.SEkill -0 의 다른 주제 인 대시 에 대한 질문도 참조하십시오 .
Adam Katz

답변:


27

그것이 말하는 것처럼, 그것은 호출자의 프로세스 그룹의 모든 멤버에게 신호를 보냅니다.

프로세스 그룹은 쉘에서 작업 제어를 구현하는 데 사용됩니다 (다른 작업에도 사용될 수 있지만 대화식 쉘 작업 제어가 존재하는 주된 이유 임).

를 입력 Ctrl-C하면 시작한 작업뿐만 아니라 현재 작업의 모든 프로세스가 종료됩니다. 또한 백그라운드 작업을 중단시키지 않습니다.

이는 프로세스 그룹을 통해 달성됩니다. 작업은 쉘에 의해 시작된 프로세스 그룹으로, 쉘은 백그라운드 또는 포 그라운드 (터미널의 포 그라운드 프로세스 그룹으로 설정되거나 설정되지 않음)에 넣고 전체적으로 종료 될 수 있습니다.

당신과 프로세스 그룹 ID와 세션 ID에 대한 찾을 수 있습니다 ps -j( j대한 J산부인과 제어).

PGID 프로세스 그룹을 종료하려면 $x다음을 수행하십시오.

kill -- "-$x"

kill 0 호출자의 프로세스 그룹을 종료합니다.

을 수행 /bin/kill 0하면 셸이 해당 kill명령 을 실행하기 위해 새 작업을 시작 하므로 kill자체적으로 종료됩니다.

kill일반적으로 쉘 내장이므로 쉘 kill의 프로세스 그룹을 종료시킵니다.

그러나 셸이 대화식 인 경우 프로세스 관리 프로세스 그룹이므로 일반적으로 셸의 프로세스 그룹에는 다른 프로세스가 없습니다. 쉘에 의해 시작된 모든 프로세스는 다른 프로세스 그룹에 있습니다.

$ sleep 1000 &
[1] 22746
$ ps -j
  PID  PGID   SID TTY          TIME CMD
22735 22735 22735 pts/23   00:00:00 zsh
22746 22746 22735 pts/23   00:00:00 sleep
22749 22749 22735 pts/23   00:00:00 ps

위, sleep그리고 ps두 개의 서로 다른 프로세스 그룹, 배경 한, 전경 하나에 그들은 쉘의 프로세스 그룹 다릅니다.

당신은 그래도 할 수 있습니다 :

(man kill & sleep 1; ps -j; kill 0)

대화식 쉘은 해당 서브 쉘에 대해 새 프로세스 그룹을 시작하고 서브 쉘과 man (및 호출기, groff와 같은 man에 의해 시작된 다른 명령)은 동일한 프로세스 그룹에 있으므로 kill 0작동합니다. sleep위 의 내용은 호출기가 시작하기에 충분한 시간을 제공하여 종료 ps -j하기 전에 출력 에서 볼 수 있도록 합니다.


kill -- -$x실제로 bash: kill: (-63531) - No such processMacOS 10.14의 bash 5.0.11 (1)-릴리스에 나와 있지만 프로세스가 존재하고 실행되고 있는지 확인하십시오. pkill -P잘 작동
kyb

1
@kyb $ x는 프로세스 ID가 아닌 프로세스 그룹 ID 여야합니다. ps -jpgids
Stéphane Chazelas
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.