大家好,我是高勝寒,本文是Linux運維-循序漸進學運維-基礎篇的第46篇文章。
kill命令屬於系統進程管理命令。
1. 命令格式
kill [參數][進程號】
2. 命令功能
發送指定的信號到相應的京城,不指定型號將發送SIGTERM(15)終止進程。
3. 命令參數
參數 | 含義 |
---|---|
-l | 信號,若果不加信號的編號參數,則使用“-l”參數會列出全部的信號名稱 |
-a | 當處理當前進程時,不限制命令名和進程號的對應關係 |
-p | 指定kill 命令只打印相關進程的進程號,而不發送任何信號 |
-s | 指定發送信號 |
-u | 指定用戶 |
-v | 指定用戶 |
–version | 顯示版本信息 |
4. kill相關的命令
關閉進程3個命令:kill killall pkill
kill關閉進程:kill 進程號 關閉單個進程
killall和pkill 命令用於殺死指定名字的進程
5. 關於kill的信號
kill -l
常用的信號:
信號編號 | 信號名 | 作用 |
---|---|---|
1) | SIGHUP | 重新加載配置 |
2) | SIGINT | 鍵盤中斷 crtl+c |
3) | SIGQUIT | 退出 |
9) | SIGKILL | 強制終止 |
15) | SIGTERM | 終止(正常結束),缺省信號 |
18) | SIGCONT | 繼續 |
19) | SIGSTOP | 停止 |
20) | SIGTSTP | 暫停 crtl+z |
6. 使用方法
1) 徹底殺死進程:
查看進程id
殺死進程
[root@zmgaosh ~]# kill -9 2287
2)殺死程序
[root@zmgaosh ~]# yum install httpd #安裝http
[root@zmgaosh ~]# systemctl start httpd # 啓動http
查看進程ID
[root@zmgaosh ~]# ps -aux |grep http
root 10448 0.0 0.1 230432 5184 ? Ss 19:48 0:00 /usr/sbin/httpd -DFOREGROUND
apache 10531 0.0 0.0 230432 3000 ? S 19:48 0:00 /usr/sbin/httpd -DFOREGROUND
apache 10532 0.0 0.0 230432 3000 ? S 19:48 0:00 /usr/sbin/httpd -DFOREGROUND
apache 10533 0.0 0.0 230432 3000 ? S 19:48 0:00 /usr/sbin/httpd -DFOREGROUND
apache 10534 0.0 0.0 230432 3000 ? S 19:48 0:00 /usr/sbin/httpd -DFOREGROUND
apache 10535 0.0 0.0 230432 3000 ? S 19:48 0:00 /usr/sbin/httpd -DFOREGROUND
root 13745 0.0 0.0 112728 972 pts/0 R+ 19:49 0:00 grep --color=auto http
可以看到http的進程有點多,我們如果用kill -9 需要一個一個殺死,這個使用pkill的作用就顯現出來了。
pkill 或者killall 可以一次性殺死程序。
所以此處可以用
pkill -9 httpd
或
killall -9 httpd
重要提示:
不要隨便使用kill -9的命令,強制殺死進程不是一個好習慣。
我們平時用的kill命令,默認是kill -15, 當我們執行kill後,事實上系統內部的操作是:
- 立即停止程序
- 釋放相應資源後終止程序
- 忽略該信號,繼續執行程序
在退出前會做一些準備工作,比如釋放資源,清理臨時文件等,做完了這些操作才正式停止,如果在做準備工作的時候遇到了阻礙,應用程序會選擇忽略該終止信號。
而kill -9 有時候會導致數據丟失,尤其是一些web應用,定時任務或者包含長事務的應用中,儘量不要使用kill -9. 工作中很多的服務都需要很長的時間來收尾,比如tomcat容器,dubbo服務,流量引擎等,這些地方儘快不要用 -9.
切記: 保證業務穩定安全是重中之重。
總結:
- 殺死不存在的程序會報錯
- 使用kill的時候不指定信號,默認會發送信號15, 信號15是終止指定進程, 讓進程在退出之前清理並釋放資源
- 使用kill時候,如果加上 -9表示強制終止程序,可能會使數據丟失。
我是高勝寒,一個在教培行業不忘初心的人, 關注我,一起學習,歡迎點贊收藏,我們下篇文章再見!