day 21 進(jìn)程管理(管理進(jìn)程)

1、管理進(jìn)程狀態(tài)

當(dāng)程序運行為進(jìn)程后,如果希望停止進(jìn)程,此時可以使用linux的kill命令對進(jìn)程發(fā)送關(guān)閉信號,還有killall pkill命令

(1)使用kill-l列出系統(tǒng)所支持的信號

[root@yangdan ~]# kill -l
 1) SIGHUP   2) SIGINT   3) SIGQUIT  4) SIGILL      5) SIGTRAP
 6) SIGABRT  7) SIGBUS   8) SIGFPE   9) SIGKILL    10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM    15) SIGTERM
16) SIGSTKFLT   17) SIGCHLD 18) SIGCONT 19) SIGSTOP    20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG  24) SIGXCPU    25) SIGXFSZ
26) SIGVTALRM   27) SIGPROF 28) SIGWINCH    29) SIGIO      30) SIGPWR
31) SIGSYS  34) SIGRTMIN    35) SIGRTMIN+1  36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+1247) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-1352) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX    

數(shù)字 信號意義 信號翻譯
1 SIGHUP 通常用來重新加載配至文件
9 SIGKLL 強制殺死進(jìn)程
15 SIGTERM 終止進(jìn)程,默認(rèn)kill使用該信號

(2)使用kill命令殺死指定PID的進(jìn)程

1、給vsdtpd 進(jìn)程發(fā)送信號1,15
[root@yangdan ~]# yum install vsfpd -y
[root@yangdan ~]# systemctl start vsftpd
[root@yangdan ~]# ps aux |grep vsftpd
root       8117  0.0  0.1  53276   576 ?        Ss   16:39   0:0 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
root       8119  0.0  0.2 112708   984 pts/0    S+   16:40   0:0 grep --color=auto vsftpd

2、發(fā)送重載信號,例如vsftpd 的配置文件發(fā)生改變,希望重新加載
[root@yangdan ~]# kill -1 8117
[root@yangdan ~]# ps aux |grep vsftpd
root       8117  0.0  0.1  53276   752 ?        Ss   16:39   0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
root       8122  0.0  0.2 112708   988 pts/0    R+   16:42   0:00 grep --color=auto vsftpd



3、發(fā)送停止信號,當(dāng)然vsftpd 服務(wù)有停止的腳本 systemctl stop vsftpd
[root@yangdan ~]# kill 8117
[root@yangdan ~]# ps aux |grep vsftpd
root       8125  0.0  0.2 112708   988 pts/0    R+   16:46   0:00 grep --color=auto vsftpd
[root@yangdan ~]# systemctl start vsftpd
[root@yangdan ~]# ps aux |grep vsftpd
root       8133  0.0  0.1  53276   576 ?        Ss   16:47   0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
root       8135  0.0  0.2 112708   988 pts/0    R+   16:47   0:00 grep --color=auto vsftpd

4、發(fā)送強制停止信號,當(dāng)無法停止服務(wù)時,可強制終止信號
[root@yangdan ~]# kill -9 8117

(3)linux系統(tǒng)中的killall pkill命令用于殺死指定名字的進(jìn)程??梢允褂胟ill命令殺死指定進(jìn)程PID的進(jìn)程,要找到需要殺死的進(jìn)程,然后使用ps命令配合grep來查找進(jìn)程。

1、通過服務(wù)名稱殺掉進(jìn)程
[root@yangdan ~]# ps aux|grep nginx
root       8153  0.0  0.2 112708   988 pts/0    R+   17:01   0:00 grep --color=auto nginx
[root@yangdan ~]# systemctl start nginx
[root@yangdan ~]# pkill nginx
[root@yangdan ~]# killall nginx

2、使用pkill踢出從遠(yuǎn)程登錄到本機的用戶,終止pts/0上所有進(jìn)程,并且bash也結(jié)束(用戶被強制退出)
[root@yangdan ~]# pkill -9 -t pts/0

2、管理后臺進(jìn)程

(1)什么是后臺進(jìn)程

通常進(jìn)程都會在終端前臺運行,一旦關(guān)閉終端,進(jìn)程也隨著結(jié)束,此時就希望進(jìn)程能在后臺運行,將在前臺的進(jìn)程放入后臺運行,可以及時關(guān)閉終端也不影響進(jìn)程的正常運行。

(2)為什么將進(jìn)程放入后臺運行

如:我們此前在國內(nèi)服務(wù)器傳輸大文件時,由于網(wǎng)絡(luò)的問題需要傳輸很久,如果在傳輸?shù)倪^程中出現(xiàn)網(wǎng)絡(luò)抖動或不小心關(guān)閉終端則會導(dǎo)致傳輸失敗,如果將傳輸進(jìn)程放入后臺,就不會出現(xiàn)這樣的問題。

(3)使用什么工具將進(jìn)程放入后臺

之前都選擇使用&符號經(jīng)進(jìn)程放入后臺,然后使用jobs、bg、fg等飯方式??催M(jìn)程狀態(tài),這種方式不太好,最好使用screen
(1)jobs、bg、fg的使用(不推薦)

[root@yangdan ~]# sleep 3000 & // 運行程序(時),讓其在后臺執(zhí)行
[root@yangdan ~]# sleep 4000  //^Z,將前臺的程序掛起(暫停)到后臺
[2]+ stopoed sleep 400
[root@yangdan ~]# ps aux |grep sleep
[root@yangdan ~]# jobs //查看后臺作業(yè)
[1]- Running sleep 3000 &
[2]+ Stopped sleep 4000

[root@yangdan ~]# bg %2 //讓作業(yè)2放入后臺
[root@yangdan ~]# fg %1 //將作業(yè)1調(diào)回到前臺
[root@yangdan ~]# kill %1  //kill 1,終止 PID 為 1 的進(jìn)程

[root@yangdan ~]# (while :;do data; sleep 2; done) & //進(jìn)程在后臺運行,但輸出依然在當(dāng)前終端
[root@yangdang ~]# (while :;do data; sleep 2; done) &>/dev/null &

(2)screen的使用(推薦使用,生產(chǎn)必用)

1、安裝
[root@yangdan ~]# yum install screen -y

2、開啟一個screen窗口,指定名稱
[root@yangdan ~]# screen -S wget_mysql

3、在screen窗口執(zhí)行任務(wù)即可
4、平滑的退出screen,但不會終止screen中的任務(wù)。注意:如果使用exit 才真的關(guān)閉screen窗口,所以要使用ctrl+a+d 關(guān)閉會話
screen -S  表示指定開啟的名稱

5、查看當(dāng)前正在運行的zcreen有哪些
[root@yangdan ~]# screen -list  查看后臺運行的程序
There is a screen on:
        8217.wget_mysql (Attached)
1 Socket in /var/run/screen/S-root.

6、進(jìn)入正在運行的screen
[root@yangdan ~]# screen -r wget_mysql
There is a screen on:
        8217.wget_mysql (Attached)
There is no screen to be resumed matching wget_mysql.
[root@yangdan ~]# screen -r 8217
There is a screen on:
        8217.wget_mysql (Attached)
There is no screen to be resumed matching 8217.

3、進(jìn)程的優(yōu)先級 [進(jìn)階]

(1)什么是優(yōu)先級

優(yōu)先級是指優(yōu)先享受資源,如:老人優(yōu)先、小孩優(yōu)先等

(2)為什么有系統(tǒng)優(yōu)先級

舉例:去游樂園玩摩天輪,游樂園正常情況下是不用排隊的,當(dāng)節(jié)假日來臨時大人、小孩就比正常情況下的人要多好多則會導(dǎo)致響應(yīng)很慢,假設(shè)我是游樂園的VIP(最高優(yōu)先者),無論有多少人在排隊,我是優(yōu)先去玩摩天輪的人,至于沒有花錢的人員(較低優(yōu)先級)則進(jìn)入等待狀態(tài)。

(3)系統(tǒng)中如何給進(jìn)程配置優(yōu)先級

在啟動進(jìn)程時,為不同的進(jìn)程使用不同的調(diào)度策略
nice 值越高:表示優(yōu)先級越低,如+19,該進(jìn)程容易將CPU使用量讓給其他進(jìn)程
nice 值越低:表示優(yōu)先級越高,如-20,該進(jìn)程更不傾向于讓出CPU
1)使用top或ps命令查看進(jìn)程的優(yōu)先級

1、使用top可以查看nice優(yōu)先級。 NI:實際nice級別,默認(rèn)0。 PR:顯示nice值,-20映射到0.+19映射到39
   PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                                                          
   560 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 xfs-log/sdc2  
   783 root      20   0  225724   4252   2776 S  0.0  0.9   0:00.17 abrt-watch-log   

2、使用ps查看進(jìn)程優(yōu)先級
[root@yangdan ~]# ps axo command,nice |grep sshd |grep -v grep
/usr/sbin/sshd -D             0
sshd: root@pts/0              0

2)nice指定程序的優(yōu)先級。格式:nice -n 優(yōu)先級數(shù)字 進(jìn)程名稱

1、開啟vim并且指定程序優(yōu)先級為-5
[root@yangdan ~]# nice -n -5 vim &
[1] 8296

2、查看該進(jìn)程的優(yōu)先級情況
[root@yangdan ~]# ps axo pid,command,nice |grep 8296
  8296 vim                          -5

3)renice命令修改一個正在運行的進(jìn)程優(yōu)先級。格式:renice -n 優(yōu)先級數(shù)字 進(jìn)程pid

1、查看sshd進(jìn)程當(dāng)前的優(yōu)先級狀態(tài)
[root@yangdan ~]# ps axo pid,command,nice |grep sshd
  1444 /usr/sbin/sshd -D             0
  8180 sshd: root@pts/0              0

2、調(diào)整sshd主進(jìn)程的優(yōu)先級
[root@yangdan ~]# renice -n -20 1444
1444 (process ID) old priority 0, new priority -20

3、調(diào)整之后記得退出終端
[root@yangdan ~]# ps axo pid,command,nice |grep sshd
  1444 /usr/sbin/sshd -D           -20
  8180 sshd: root@pts/0              0
[root@yangdan ~]# exit

4、當(dāng)再次登錄sshd服務(wù),會有主進(jìn)程fork子進(jìn)程(那么子進(jìn)程會繼承主進(jìn)程的優(yōu)先級)
[root@yangdan ~]# ps axo pid,command,nice |grep sshd
  1444 /usr/sbin/sshd -D           -20
  8180 sshd: root@pts/0            -20

4、系統(tǒng)平均負(fù)載 [進(jìn)階]

發(fā)現(xiàn)系統(tǒng)變慢時,第一件事就是執(zhí)行top或uptime命令,了解系統(tǒng)的負(fù)載情況

[root@yangdan ~]# uptime
 19:02:01 up 10:44,  2 users,  load average: 0.00, 0.00, 0.03
#熟悉前面幾列,分別為當(dāng)前時間、系統(tǒng)云行時間、正在登錄用戶數(shù)。

#最后三個數(shù)字,依次為過去 1 分鐘、5 分鐘、15 分鐘的平均負(fù)載(Load Average)

(1)什么是平均負(fù)載

平均負(fù)載不就是單位時間內(nèi),系統(tǒng)處于可運行狀態(tài)和不可中斷狀態(tài)的平均進(jìn)程數(shù),也就是平均活躍進(jìn)程數(shù),平均負(fù)載與CPU使用率并沒有直接關(guān)系。

(2)可運行狀態(tài)和不可中斷狀態(tài)

1)可運行狀態(tài)進(jìn)程,是指正在使用CPU或者正在等待CPU的進(jìn)程,也就是ps命令看到處于R狀態(tài)的進(jìn)程
2)不可中斷進(jìn)程,系統(tǒng)中最常見的是等待硬件設(shè)備的I/O響應(yīng),也就是ps命令中看到的D狀態(tài)的進(jìn)程
當(dāng)一個進(jìn)程向磁盤讀寫數(shù)據(jù)時,為了保證數(shù)據(jù)的一致性,在得到磁盤回復(fù)前,是不能被其他進(jìn)程打斷,這個時候就處于不可中斷狀態(tài)。如果進(jìn)程被打斷了,就容易出現(xiàn)磁盤數(shù)據(jù)與進(jìn)城數(shù)據(jù)不一致的問題。
所以,不可中斷狀態(tài)實際上是系統(tǒng)對進(jìn)程和硬件設(shè)備的一種保護(hù)機制。因此可以簡單地理解為,平均負(fù)載就是單位時間內(nèi)的活躍進(jìn)程數(shù)

(3)平均負(fù)載為多少時合理

理性狀態(tài)是每個CPU剛好運行著一個進(jìn)程,每個CPU都得到了充分利用,在評判平均負(fù)載時,首先通過top命令獲取,或使用grep 'model name' /etc/cpuinfo
例:1)如果在4個CPU的系統(tǒng)上,平均負(fù)載為2時,意味著CPU有50%的空閑
2)如果在2個CPU的系統(tǒng)上,平局負(fù)載為2時,意味著所有的CPU都剛好占滿
3)如果在1個CPU的系統(tǒng)上,平均負(fù)載為2時,意味著有一半的進(jìn)程競爭不到CPU

平均負(fù)載有三個值,應(yīng)該都關(guān)注

這三個只就像是天氣一樣,如果只看晚上天氣,感覺在過冬天,如果結(jié)合早上、中午、晚上三個時間點的溫度看,就可以了解的更全面,所以應(yīng)該三個都關(guān)注
(1)如果三個值基本相同的話,那就說明平均負(fù)載是正常的
(2)1 分鐘小于15 分鐘的值,說明平均負(fù)載在減少,15 分鐘就有很大的負(fù)載
(3)1 分鐘大于15 分鐘的值,說明1 分鐘負(fù)載在增加,所以需要持續(xù)觀察

(4)實際環(huán)境生產(chǎn)環(huán)境中,平均負(fù)載高時,需要重點關(guān)注

當(dāng)平均負(fù)載高于70%時,應(yīng)該分析排查負(fù)載高的問題,一旦負(fù)載過高,有可能導(dǎo)致進(jìn)程響應(yīng)慢,影響服務(wù)的正常功能
最好的辦法就是,把系統(tǒng)的平均負(fù)載監(jiān)控起來,然后根據(jù)更多的歷史數(shù)據(jù),判斷負(fù)載變化的趨勢,發(fā)現(xiàn)負(fù)載有明顯升高時,在做分析調(diào)查

(5)平均負(fù)載與CPU使用率的關(guān)系

平均負(fù)載是指單位時間內(nèi),處于可運行狀態(tài)和不可中斷狀態(tài)的進(jìn)程數(shù),所以,他不僅包括正在使用的CPU進(jìn)程,還包括等待CPU和等待I/O的進(jìn)程
而CPU使用率,是單位時間內(nèi)CPU繁忙情況下的統(tǒng)計,跟平均負(fù)載不一定完全對應(yīng)
CPU密集型進(jìn)程,使用大量CPU會導(dǎo)致平均負(fù)載升高,兩者是一致的
I/O密集型進(jìn)程,等待I/O也會導(dǎo)致平均負(fù)載過高,但CPU使用率不一定高
大量CPU的進(jìn)程調(diào)度也會導(dǎo)致平均負(fù)載過高,此時的CPU使用率也會·較高

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容