답변:
기본적으로 아니요는 허용되지 않습니다. 리눅스에서 (에서 man 2 kill
) :
프로세스 ID 1, init 프로세스로 보낼 수있는 유일한 신호는 init가 명시 적으로 신호 처리기를 설치 한 신호입니다. 이것은 실수로 시스템이 다운되지 않도록하기 위해 수행됩니다.
Pid 1 (init)은 자신을 강제 종료 할 수 있습니다.이 경우 "kill"은 기본적으로 자체 종료 요청입니다. halt
명령 을 구현하는 방법 중 하나는 가능 하지만 명령 을 구현하는 방법은 없습니다 init
.
Mac에서 launchd
신호 15 (SIGTERM)를 사용하여 종료 (초기 아날로그)하면 시스템을 즉시 재부팅하여 실행중인 프로그램을 완전히 종료하지 않아도됩니다. 잡을 수없는 신호 9 (SIGKILL)로 그것을 죽이는 것은 Mac의 kill()
의미 가이 점에서 Linux의 의미와 동일 하다는 것을 보여줍니다 .
현재 실험 할 Linux 상자가 없기 때문에 그리고 함께 init
SIGTERM으로 Linux가 무엇을하는지에 대한 질문은 기다려야합니다. init
갑자기 출세와 Systemd 요즘 인기있는 것 같아 교체 프로젝트, 대답은 변수가 될 수있다.
업데이트 : Linux에서는 init
SIGTERM을 명시 적으로 무시하므로 아무 것도 수행하지 않습니다. @jsbillings에는 Upstart 및 Systemd의 기능에 대한 정보가 있습니다.
init
로모그래퍼 Segmentation fault
( SIGSEGV
: 커널 패닉 발생합니다) 신호kill -SEGV 1
SysV 초기화는 SIGKILL 또는 SIGTERM 신호를 무시합니다. 상태를 변경하는 유일한 신호는 SIGPWR이며 전원 관련 종료 일정을 알려줍니다.
Upstart 및 Systemd도 SIGKILL에 응답하지 않는 것으로 보이며 내 테스트에서 SIGTERM이 가동을 시작하고 시스템을 다시 실행하는 것으로 보입니다.
다른 응답자가 무엇을 실행하고 있는지 잘 모르겠지만 -9 (SIGKILL) 또는 -15 (SIGTERM) init (pid 1)을 죽일 수 없다고 확신합니다. 가능하다면, 0이 아닌 종료 코드로 예기치 않게 종료 되었기 때문에 커널 패닉이 생길 수 있습니다. 이상적이지 않습니다. 컴퓨터를 종료하거나 재부팅하지 않습니다.
기술적으로 예, root는 SIGKILL을 발행하여 초기화 할 수 있습니다. 그러나 init는 신호를 포착하고 무시할 수 있다는 점에서 대부분의 거의 모든 다른 프로세스와 다릅니다.
당신은 느슨하게, a kill -TERM 1
를 발행하는 것과 비슷한 a 를 발행함으로써 init를 죽일 수 있습니다 . halt
또는 shutdown
init는 그 신호 자체를 존중하기 전에 모든 아이들, 본질적으로 다른 모든 프로세스에 신호를 전달합니다.
참고 :이 명령 을 수행하면 시스템 이 종료됩니다.
풍미를 위해; SIGKILL을 "무시"할 수있는 한 가지 유형의 프로세스는 i / o를 기다리는 프로세스와 같이 인터럽트 불가능한 휴면 상태입니다. ps axo stat,comm
상태가 'D'인 프로세스를 인터럽트 할 수없는 위치 를 발행하여 이러한 프로세스를 찾을 수 있습니다 .
kill -TERM 1
대부분의 리눅스 시스템에서 init 자체를 다시 실행시키는 것 외에는 아무것도하지 않을 것이며, 시스템을 종료시키기 위해 할 수있는 유일한 방법은kill -PWR 1
kill -TERM 1
하면 재부팅이 발생합니다 (실제로 ::shutdown:
inittab 의 항목 및 관련 스크립트를 통해 진행됨 )
init
프로세스 를 다시 시작할 수 있습니다 . inittab
재부팅하지 않고 변경하는 데 유용합니다 .
kill -HUP 1
출처 : http://www.cyberciti.biz/faq/linux-unix-kill-hup-1-reread-etcinittab-file/
init
에서이 신호는 프로세스를 다시 시작하지 않고 /etc/inittab
파일 을 다시로드한다는 것을 알고 있습니다. --- 반대로 ( 리눅스에서 대체) systemctl daemon-reexec
실제로 다시 실행합니다. systemd
init
글쎄, 루트는 리눅스에서 init 프로세스를 죽일 수 있습니다 :
strace -p 1 -o OUT &
kill -9 1
세부:
kill -9 1
작동하지 않습니다 :
-bash-4.3# trace-cmd start -e signal_deliver -f 'common_pid == 1' -e signal_generate -f 'pid == 1'
-bash-4.3# echo "My first attempt" >/sys/kernel/debug/tracing/trace_marker
-bash-4.3# kill -9 1
-bash-4.3# trace-cmd show # there is no signal_deliver-event
...
bash-164 [000] .N.. 29.302996: tracing_mark_write: My first attempt
bash-164 [000] d... 29.312586: signal_generate: sig=9 errno=0 code=0 comm=systemd pid=1 grp=1 res=1
그럼 실행 해 봅시다 strace
:
-bash-4.3# echo 1 >/proc/sys/kernel/ftrace_dump_on_oops
-bash-4.3# strace -p 1 -o OUT &
[1] 179
strace: Process 1 attached
-bash-4.3# echo "My second attempt" >/sys/kernel/debug/tracing/trace_marker
-bash-4.3# kill -9 1
bash-4.3# [ 134.943439] Kernel panic - not syncing: Attempted to kill init! exitcode=0x00000009
[ 134.943439]
[ 134.943439] CPU: 0 PID: 1 Comm: systemd Not tainted 4.7.2-201.fc24.x86_64 #1
[ 134.943439] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.9.1-1.fc24 04/01/2014
[ 134.943439] 0000000000000086 00000000610ec632 ffff88001ea43c10 ffffffff813d941f
[ 134.943439] ffffffff81a290c0 ffff88001ea43ca8 ffff88001ea43c98 ffffffff811b2cb6
[ 134.943439] ffffffff00000010 ffff88001ea43ca8 ffff88001ea43c40 00000000610ec632
[ 134.943439] Call Trace:
[ 134.943439] [<ffffffff813d941f>] dump_stack+0x63/0x84
[ 134.943439] [<ffffffff811b2cb6>] panic+0xde/0x22a
[ 134.943439] [<ffffffff810a40ac>] do_exit+0xb6c/0xb70
[ 134.943439] [<ffffffff810a4137>] do_group_exit+0x47/0xb0
[ 134.943439] [<ffffffff810af3ed>] get_signal+0x28d/0x630
[ 134.943439] [<ffffffff81025f57>] do_signal+0x37/0x6c0
[ 134.943439] [<ffffffff8100325b>] ? do_audit_syscall_entry+0x4b/0x70
[ 134.943439] [<ffffffff810ca250>] ? wake_up_q+0x70/0x70
[ 134.943439] [<ffffffff8100330c>] exit_to_usermode_loop+0x8c/0xd0
[ 134.943439] [<ffffffff81003df3>] do_syscall_64+0x103/0x110
[ 134.943439] [<ffffffff817eb921>] entry_SYSCALL64_slow_path+0x25/0x25
[ 134.943439] Dumping ftrace buffer:
[ 134.943439] ---------------------------------
[ 134.943439] bash-154 0.... 10592888us : tracing_mark_write: My first attempt
[ 134.943439] bash-154 0d... 17328079us : signal_generate: sig=9 errno=0 code=0 comm=systemd pid=1 grp=1 res=1
[ 134.943439] bash-154 0.... 80772500us : tracing_mark_write: My second attempt
[ 134.943439] bash-154 0dN.. 85426791us : signal_generate: sig=9 errno=0 code=0 comm=systemd pid=1 grp=1 res=0
[ 134.943439] systemd-1 0d... 85437478us : signal_deliver: sig=9 errno=0 code=0 sa_handler=0 sa_flags=0
[ 134.943439] ---------------------------------
[ 134.943439] Kernel Offset: disabled
[ 134.943439] ---[ end Kernel panic - not syncing: Attempted to kill init! exitcode=0x00000009
[ 134.943439]
을 입력 sudo kill -INT 1
한 다음 어떻게되는지 확인하십시오.