日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

centos 杀死进程命令kill

發布時間:2023/12/31 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 centos 杀死进程命令kill 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

Linux 系統中時刻運行著許多進程,如果能夠合理地管理它們,則可以優化系統的性能。在Linux 系統中,有 5 種常見的進程狀態,分別為運行、中斷、不可中斷、僵死與停止,其各自
含義如下所示。
? R (運行)? :? ?進程正在運行或在運行隊列中等待。
? S(中斷)? ? :? 進程處于休眠中,當某個條件形成后或者接收到信號時,則脫離該
狀態。
?D(不可中斷)? ?:? 進程不響應系統異步信號,即便用 kill 命令也不能將其中斷。
? Z(僵尸)? : 進程已經終止,但進程描述符依然存在, 直到父進程調用 wait4()系統函數
后將進程釋放。

?? T(停止) : 進程收到停止信號后停止運行。

?

kill命令用于終止指定的進程,其工作原理是通過向進程發送指定的信號。

基本格式 kill [params] [pid]

常用的是:

?

kill -9 pid //強制終止

  • -1?Hup 終端斷線

  • -2?INT 中斷(同Ctrl+c)

  • -3?QUIT 退出(同Ctrl+\)

  • -15?TERM 終止,是默認的信號,如果應用本身會捕獲該信號,則不能終止

  • -9?KILL 強制終止

  • -18?CONT 繼續

  • -19?STOP 暫停(同Ctrl+z)

查看 httpd 進程?

1、ps aux |grep httpd ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#-aux 顯示所有狀態

[root@localhost init.d]# ps aux |grep httpd
root? ?? ?2091??0.0??0.1? ?5488??2832 ?? ?? ???Ss? ?17:19? ?0:00 /web/apache//bin/httpd -k restart

我們可以用??kill -9 加進程ID? ?如下
[root@moyea309 init.d]# kill -9 2091

注意:kill 只能殺死處于用戶狀態的進程。

kill 命令用于終止進程,-9 表示強迫進程立即停止,例如: kill -9 [PID]

-1表示讓一個進程不用重啟,就可以重讀其配置文件,并讓新的配置信息生效;

-2表示中斷一個進程

-9表示:殺死一個進程

-15表示終止一個進程

指定一個信號 :

? ? ? ? ? 信號號碼 : kill -1

? ? ? ? ?信號名稱 : kill -SIGKILL

? ? ? ? ?信號名稱簡稱 :kill-KILL?

?

常見查看端口的命令:

查看進程占用的端口,可以使用如下命令:

netstat -apn ?| grep 9999

?

查看程序占用的端口

ps aux | grep 23275

查看進程

ps -ef | grep java,表示查看所有進程里 CMD 是 java 的進程信息


ps -aux | grep java,-aux 顯示所有狀態

殺了進程就在終端輸入:

$ kill -s 9 1827

?

在終端中執行ps aux,
各列輸出字段的含義:

?

USER????????進程所有者
PID?????????進程ID
PPID?????????父進程
%CPU???????CPU占用率
%MEM?????內存占用率
NI??????????進程優先級。數值越大,占用CPU時間越少
VSZ??????????進程虛擬大小
RSS??????????頁面文件占用
TTY?????????終端ID
STAT?????????進程狀態
+---D???不可中斷????Uninterruptible sleep (usually IO)
+---R???正在運行,或在隊列中的進程
+---S???處于休眠狀態
+---T???停止或被追蹤
+---Z???僵尸進程
+---W???進入內存交換(從內核2.6開始無效)
+---X???死掉的進程

+---<???高優先級
+---N???低優先級
+---L???有些頁被鎖進內存
+---s???包含子進程
+---+???位于后臺的進程組;
+---l???多線程,克隆線程?multi-threaded (using CLONE_THREAD, like NPTL pthreads do)

?

殺死僵尸進程

用top查看系統中的僵尸進程情況?

再看看這些僵尸是什么程序來的 ,用ps和grep命令尋找僵尸進程

ps -A -o stat,ppid,pid,cmd | grep -e '^[Zz]'

命令注解:

-A 參數列出所有進程

-o 自定義輸出字段 我們設定顯示字段為 stat(狀態), ppid(進程父id), pid(進程id),cmd(命令)這四個參數
?

因為狀態為 z或者Z的進程為僵尸進程,所以我們使用grep抓取stat狀態為zZ進程
Z+:表示正在運行的僵尸進程

?

因為狀態為 z或者Z 的進程為僵尸進程,所以我們使用grep抓取stat狀態為zZ進程?
運行結果參考如下?
?

這里一共出現了3個僵死進程,我們需要把它們一個個都干掉,執行下面的命令

kill -9 21320

或者

kill -HUP 21320來殺掉這個僵尸進程

這樣處理的速度有點慢,直接來個快速干掉所有僵尸進程的命令?

再次運行ps -A -ostat,ppid,pid,cmd | grep -e '^[Zz]'來確認是否將僵尸進程殺死,再查看,僵尸進程沒有了!?

如果kill 子進程的無效,可以嘗試kill 其父進程來解決問題,例如上面例子父進程pid是 12334,那么我們就運行

kill -HUP 12334

檢查當前僵尸進程信息

ps -ef | grep defunct | grep -v grep | wc -l

查看TOP前兩行信息

top | head -2

直接殺死進程

ps -ef | grep defunct | grep -v grep | awk '{print "kill -18 " $3}'

如果父進程也殺不死,那就只能執行重啟了

?

kill后出現問題的解決辦法:

場景:jps 報process information unavailable解決方法
jps時出現如下信息:

22162– process information unavailable

解決辦法:

進入tmp目錄,

cd /tmp

刪除該目錄下

名稱為hsperfdata_{username}的文件夾?
?

然后jps,清凈了。

?

沒有Killall:

yum install psmisc

?

?killall 命令終止進程的 8 大用法

kill?命傳遞一個PID來殺死進程;pkill?命令使用一個正則表達式作為輸入,所以和該模式匹配的進程都被殺死。

killall?,默認情況下,它精確地匹配參數名,然后殺死匹配進程。

默認情況下,killall 命令將向一個/組進程發送一個?SIGTERM?信號,但是,也可以通過參數發送一個指定的信號。

1. 基本用法

假如我們 3 個進程在運行,分別是?hello1, hello2, hello3?,現在我們想殺死 hello1 進程,可以直接使用如下方式:

killall?hello1

運行的結果如下:

root@centos?test]$?ps?aux?|?grep?hello alvin????12061??0.0??0.0???4152???344?pts/0????S????14:41???0:00?./hello1 alvin????12074??0.0??0.0???4152???344?pts/0????S????14:41???0:00?./hello2 alvin????12084??0.0??0.0???4152???340?pts/0????S????14:41???0:00?./hello3 alvin????12089??0.0??0.0?112648???964?pts/0????R+???14:41???0:00?grep?--color=auto?hello [root@centos?test]$?killall?hello1 [1]???Terminated??????????????./hello1 [root@centos?test]$?ps?aux?|?grep?hello alvin????12074??0.0??0.0???4152???344?pts/0????S????14:41???0:00?./hello2 alvin????12084??0.0??0.0???4152???340?pts/0????S????14:41???0:00?./hello3 alvin????12170??0.0??0.0?112648???964?pts/0????R+???14:42???0:00?grep?--color=auto?hello

可以看到,hello1 進程已經被殺死了。

剩下的 hello2 和 hello3 進程,我們想一次性殺死他們,也就是批量殺死進程,可以如下操作:

[root@centos?test]$?killall?hello* hello:?no?process?found hello1:?no?process?found hello.c:?no?process?found [2]-??Terminated??????????????./hello2 [3]+??Terminated??????????????./hello3

如此,以 hello 開頭的進程全部被干掉。

2. 終止某個用戶所運行的進程

可以殺死以滿足某個正則表達式的一組進程,同樣的,我們也可以殺死某個用戶運行的所有進程。

比如,用戶 harry 現在運行如下幾個進程:

[root@centos?test]$?ps?aux?|?grep?harry root?????13675??0.0??0.2?148236??5584??????????Ss???14:55???0:00?sshd:?harry?[priv] harry????13677??0.0??0.1?148236??2944??????????S????14:55???0:00?sshd:?harry@pts/1 root?????13678??0.0??0.2?148236??5444??????????Ss???14:55???0:00?sshd:?harry?[priv] harry????13680??0.0??0.1?148236??2252??????????S????14:55???0:00?sshd:?harry@notty harry????13681??0.0??0.1??53228??2168??????????Ss???14:55???0:00?/usr/libexec/openssh/sftp-server harry????13694??0.0??0.1?116436??3252?pts/1????Ss+??14:55???0:00?-bash harry????13948??0.0??0.0???4152???344?pts/1????S????14:57???0:00?./hello1 harry????13952??0.0??0.0???4152???344?pts/1????S????14:57???0:00?./hello2 harry????13959??0.0??0.0???4152???344?pts/1????S????14:57???0:00?./hello3 alvin????14005??0.0??0.0?112648???964?pts/0????R+???14:58???0:00?grep?--color=auto?harry

我們現在想殺死 harry 所運行的所有進程,可以以如下方式操作:

killall?-u?harry

運行結果如下:

[root@centos?test]$killall?-u?harry [root@centos?test]$?ps?aux?|?grep?harry alvin????14040??0.0??0.0?112648???964?pts/0????R+???14:58???0:00?grep?--color=auto?harry

但是,這個選項要慎用,因為它會把該用戶所有進程,包括終端進程,全部殺死,將導致該用戶直接退出。所以,如果不想挨揍的話不要輕意嘗試這個選項。

3. 終于時間的方式終止進程

假如我們現在運行了很多程序,我們只想殺死運行時間超過 5h 的進程,那么可以使用?-o?選項,其中 o 代表 older 如下:

killall?-o?5h

同樣地,如果你想殺死進行時間小于 4h 的進程,那么可以使用?-y?選項,其中 y 代表 younger ,如下:

killall?-y?4h

這兩個選項同樣非常粗暴,也會把終端退出,所以先不演示了。

4. 忽略大小寫

默認情況下,killall 命令是大小寫敏感的,所以我們如果寫錯大小寫,將無法正確殺死進程。

[alvin@VM_0_16_centos?test]$?killall?HELLO1 TEST1:?no?process?found

如果我們想忽略大小寫,可以加上?-I?(大寫字母 i )選項。

[root@centos?test]$?killall?-I?HELLO1 [1]???Terminated??????????????./hello1

5. 關閉命令執行回顯

默認情況下,killall 會告訴你命令執行情況,但是,我們如果不關心它的執行結果,只想讓它靜默執行,該怎么辦?只需加上?-q?選項即可,其中 q 表示 quite , 如下:

[root@centos?test]$?killall?HELLO2 HELLO2:?no?process?found [root@centos?test]$?killall?-q?HELLO2

6. 列出所有支持的信號

如前文所述,默認情況下,killall 命令將發送 SIGTERM 信號,那么,安可以發送其它信號嗎?當然是可以的。可以使用?-l?選項查看 killall 所支持的所有信號:

[root@centos?test]$?killall?-l HUP?INT?QUIT?ILL?TRAP?ABRT?IOT?BUS?FPE?KILL?USR1?SEGV?USR2?PIPE?ALRM?TERM STKFLT?CHLD?CONT?STOP?TSTP?TTIN?TTOU?URG?XCPU?XFSZ?VTALRM?PROF?WINCH?IO?PWR?SYS UNUSED

你可以使用?-s?選項(后面跟一個信號名)來向一個進程發送特殊信號。

7. 交互式操作

如果你在殺死多個進程時不太放心,擔心把不該殺死的進程給殺死了,那么你可以使用?-i?選項,這樣就可以自由決定哪些進程應該被殺死,哪些進程應該被保留。

[root@centos?test]$?killall?-i?hello* Kill?hello2(13825)???(y/N)?y Kill?hello3(13831)???(y/N)?N hello:?no?process?found hello1:?no?process?found hello3:?no?process?found hello.c:?no?process?found [2]-??Terminated??????????????./hello2

8. 等待直到某個進程被終止

當一個信號被發送至某個進程,如果你想確定該進程已經被殺死了才返回執行結果,可以使用?-w?選項,其中 w 代表 wait ,如下:

[alvin@VM_0_16_centos?test]$?killall?-w?hello1 [4]+??Terminated??????????????./hello1

這里好像看不出什么效果,但實際執行的時候,可以發現執行結果會在一兩秒后出現,而不加 -w 選項的話,執行結果馬上就顯示。

?

?

?

?

?

參考鏈接 :

https://mp.weixin.qq.com/s/UhzFTQM83gTshPDSTxo9LQ

轉載于:https://my.oschina.net/u/3803405/blog/1826863

總結

以上是生活随笔為你收集整理的centos 杀死进程命令kill的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。