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


10

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

          0      All processes in the current process group are signaled

그리고 나는 이렇게 시도했다 :

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

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


어떤 쉘을 사용하고 있습니까?
FatalError

@FatalError 저는 Bash를 사용하고 있습니다
Firegun

이 질문Unix.SE 복제 도 참조하십시오 .
Adam Katz

답변:


4

kill 0kill man page (debian)에서 어떻게 작동하는지 메모를 찾을 수 없습니다 .

그러나 두 가지 의견이 있습니다.

(1) "프로세스 그룹"이 예상과 다를 수 있습니다. 다음과 같이 프로세스 그룹 ID (PGID)를 표시 할 수 있습니다 ps -o "%p %P %r %c %a".

$ ps -o "%p %P %r %c %a"
  PID  PPID  PGID COMMAND         COMMAND
12124 12123 12124 zsh             -zsh
12212 12124 12212 man             man kill
12226 12212 12212 less            less
12302 12124 12302 ps              ps -o %p %P %r %c %a

따라서 man표시 호출기 도구 ( less) 와 함께 동일한 프로세스 그룹에 있지만 쉘의 경우와 다릅니다 (필자의 경우 zsh).

(2) 두 가지 다른 kill명령 이있을 수 있습니다 . 하나는 bash(bash (1), "SHELL BUILTIN COMMANDS"섹션 참조) 및 external /bin/kill. 이 둘은 다르게 동작 할 수 있습니다! builtin kill또는 command kill대신 에 입력하여 실행할 것을 명시 적으로 지정할 수 있습니다 kill. 경로를 지정하여 실행할 수있는 외부 명령 : /bin/kill.


1
PPID는 IS 부모 , 프로세스 그룹 ID 반드시 종종 있지만, 프로세스 ID. 올바른 열은 PGID기본 ps출력에 나타나지 않습니다 . -o옵션 을 사용하여 옵션이 포함 된 사용자 정의 형식을 구성 해야 합니다.
chepner

@ chepner : 당신은 절대적으로 맞습니다, 감사합니다! Cygwin의 ps (1) 매뉴얼 페이지에 "-l, --long : show process uids, ppids, pgids, winpids"라는 내용이 혼동되었습니다. 수치심, 나는 그에 따라 답변을 편집했습니다. 그러나 의도 한대로 내 진술 (man + pager 만 동일한 PGID를 가짐)이 정확합니다. (그 문장조차 잘못되기 전에 :-()
mpy

1

모든 프로세스를 중지하고 로그 오프하려면 다음을 입력하십시오.

kill -kill 0

이것은 SIGKILL 신호 인 신호 9를 송신자 프로세스 그룹 ID와 동일한 프로세스 그룹 ID를 가진 모든 프로세스로 보냅니다. 쉘은 SIGKILL 신호를 무시할 수 없으므로 로그인 쉘도 중지하고 로그 오프합니다.

이것은 IBM의 AIX 매뉴얼이지만 개념이 적용될 수 있습니다.

이 기능은 Linux "kill" (내가 볼 수있는) 에는 존재하지 않습니다 . 그러나 이것이 "kill"의 동작 방식입니다.

Killing 0은 pid 0을 죽이지 않습니다. 대신 현재 그룹의 모든 프로세스를 kill하는 kill 옵션입니다 . 명령을 사용하면 kill 명령을 실행 한 쉘의 프로세스 그룹 ID (GID)에있는 모든 항목이 종료됩니다.

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