kill 9 殺不掉程序

2021-10-08 05:59:05 字數 1556 閱讀 6942

kill -9 傳送sigkill訊號給程序,將其終止,但對於以下兩種情況不適用

1.該程序是殭屍程序(stat z),此時程序已經釋放所有的資源,但是沒有被父程序釋放。殭屍程序要等到父程序結束,或者重啟系統才可以被釋放。

2.程序處於「核心態」,並且在等待不可獲得的資源,處於「核心態 」的資源預設忽略所有訊號。只能重啟系統。

kill 只能殺死處於使用者狀態的程序。

下面是乙個自測試例子:

#include 

#include

#include

#include

#include

int main(int argc ,char *ar**)

else if(pid==0)

else

}return 0;

}

由於父程序沒有退出,所以執行ps -aux | grep 「z」,可以檢視程序的狀態,發現如下

root       1937  0.0  0.1 389000  4336 ?        sl   09:12   0:00 /usr/bin/gnome-keyring-daemon --daemonize --login

root 4447 0.0 0.0 112680 964 pts/2 r+ 10:16 0:00 grep --color=auto z

[root@localhost linux_test]

# ps -aux | grep "[zz]"

user pid %cpu %mem vsz rss tty stat start time command

root 1 0.0 0.1 128164 6828 ? ss 09:07 0:01 /usr/lib/systemd/systemd --switched-root --system --deserialize 21

root 1937 0.0 0.1 389000 4336 ? sl 09:12 0:00 /usr/bin/gnome-keyring-daemon --daemonize --login

root 4385 0.0 0.0 0 0 pts/0 z+ 10:16 0:00 [a.out]

root 4455 0.0 0.0 112680 976 pts/2 s+ 10:17 0:00 grep --color=auto [zz]

從以上資訊 可以得到該程序的程序號是4385

此時的解決方法有兩種

《1》 cat /proc/4385/status 找到該子程序對應的父程序,將其父程序殺死

state: z (zombie)

tgid: 4385

ngid: 0

pid: 4385

ppid: 4384

執行kill -9 4384 如果父程序也殺不死,那就只能執行重啟了

《2》重啟

oralce kill 殺不掉程序

select l.session id sid,s.serial l.locked mode,l.oracle username,s.user l.os user name,s.machine,s.terminal,a.sql text,a.action,alter system kill sess...

kill和kill 9的區別

kill是linux下常見的命令。其man手冊的功能定義如下 kill send a signal to a process 明朗了,其實kill就是給某個程序id傳送了乙個訊號。預設傳送的訊號是sigterm,而kill 9傳送的訊號是sigkill,即exit。exit訊號不會被系統阻塞,所以k...

kill與kill 9的區別

kill命令格式 kill signal pid pid是程序號,可以用 ps 命令查出 signal是傳送給程序的訊號,預設引數下,kill 傳送sigterm 15 訊號給程序,告訴程序,你需要被關閉,請自行停止執行並退出。kill 9 傳送sigkill訊號給程序,告訴程序,你被終結了,請立刻...