Linux實操篇之進程管理詳解
進程
進程這個東西相信大家都有接觸過,我們那Windows舉例,小伙伴們平時打游戲的時候有沒有遇到黑屏的情況,反正小黃以前的電腦不太好,有時候進游戲就黑屏顯示不起來了,這時候相信大家都跟小黃一樣選擇打開任務(wù)管理器(這也是小黃人生中記得第一個快捷鍵CTRL+ALT+數(shù)字點)Windows中的任務(wù)管理器是這樣的,顯示了占用CPU等信息。

Linux中的進程
我們先來說說在Linux下如何打開我們所謂的任務(wù)管理器吧
ps -aux -a: 顯示當(dāng)前終端的所有進程信息 -u: 以用戶的格式顯示進程信息 -x: 顯示后臺進程運行的參數(shù) # 查看所有信息有點長,建議使用more ps -aux | more
接下來我們一一介紹每一列顯示信息的含義
- USER : 此進程是由哪個用戶開啟的
- PID : 進程的唯一ID號
- %CPU : 進程占用CPU的百分比
- %MEM : 進程占用內(nèi)存的百分比
- VSZ : 進程占用虛擬內(nèi)存的大?。↘B)
- RSS : 進程占用物理內(nèi)存的大?。↘B)
- TTY : 終端名稱,一般是縮寫
- STAT : 進程狀態(tài),S-睡眠,s-表示該進程是會話的先導(dǎo)進程,N-表示進程擁有比普通優(yōu)先級更低的優(yōu)先級,R-正在運行,D-短期等待,Z-僵死進程(遇到這種情況就要注意了,說明進程已經(jīng)失效卻還沒有釋放內(nèi)存),T-被跟蹤或者被停止等。
- STATT : 進程的啟動時間
- TIME : 進程占用CPU的總時間
- COMMAND : 啟動進程所用的命令和參數(shù),如果過長會被截斷顯示

父子進程
這個概念應(yīng)該非常好理解,我們來看一下Linux中如何查看進程的父進程
我們通過一個應(yīng)用實例來學(xué)習(xí):以全格式顯示當(dāng)前所有的進程,查看sshd的父進程信息
sshd就是我們遠端連接服務(wù)器的一個命令
- ps -ef 以全格式顯示當(dāng)前所有進程
- -e:顯示所有進程
- -f:全格式
我們還是先來看一下各列描述著什么樣一個信息
- UID : 用戶ID
- PID : 進程ID
- PPID : 該進程的父進程ID
- C : CPU用于計算執(zhí)行優(yōu)先級的因子,數(shù)值越大表示進程是CPU密集型運算,執(zhí)行優(yōu)先級會降低;數(shù)值越小,表明進程是I/O密集型運算,執(zhí)行優(yōu)先級越高
- STIME : 進程啟動時間
- TTY : 終端名稱,一般是縮寫
- TIME : 進程占用CPU的總時間
- CMD : 啟動進程所用的命令和參數(shù)

我們通過管道符就可以看到sshd的父進程ID為1

終止進程
Windows上的終止進程就是任務(wù)管理器打開,右鍵結(jié)束任務(wù),就可以把我們卡死的游戲給關(guān)掉啦。而Linux我們需要通過指令來終止進程,殺死這個進程
kill [選項] 進程號 killall 進程名稱 -9 表示強迫進程立即停止
查看進程樹
樹形結(jié)構(gòu)往往可以讓我們更直觀的查看信息
pstree [選項] -p:顯示進程的PID -u:顯示進程的所屬用戶

服務(wù)管理
服務(wù)本質(zhì)還是一個進程,但是是在后臺運行的,通常都會監(jiān)聽某一個端口,等待其他程序的請求,因此我們又稱之為守護進程。
service管理指令
在centos7后,很多服務(wù)不再使用service,而是使用sysytemctl,我們先來看一下service還可以對哪些服務(wù)起作用
# 使用ls -l /etc/init.d/ 查看可以作用于哪些服務(wù) [root@yellowstarEdu01 ~]# ls -l /etc/init.d/ 總用量 40 -rw-r--r--. 1 root root 18281 8月 24 2018 functions -rwxr-xr-x. 1 root root 4569 8月 24 2018 netconsole -rwxr-xr-x. 1 root root 7923 8月 24 2018 network -rw-r--r--. 1 root root 1160 10月 31 2018 README
我們就使用network這個服務(wù)來學(xué)習(xí)一下service指令,network是一個網(wǎng)絡(luò)指令,通常情況下network是開啟狀態(tài)的
# service network status 查看當(dāng)前網(wǎng)絡(luò)狀態(tài) [root@yellowstarEdu01 ~]# service network status 已配置設(shè)備: lo ens33 當(dāng)前活躍設(shè)備: lo ens33 virbr0 # service network stop 關(guān)閉網(wǎng)絡(luò)(在虛擬系統(tǒng)演示,關(guān)閉網(wǎng)絡(luò)之后遠程連接將斷開) [root@yellowstarEdu01 ~]$ service network stop Stopping network (via systemctl): # service network start 開啟網(wǎng)絡(luò) [root@yellowstarEdu01 ~]$ service network start Starting network (via systemctl): # service network restart 重啟網(wǎng)絡(luò)
chkconfig指令
通過chkconfig命令,可以給服務(wù)的各個運行級別設(shè)置自啟動/關(guān)閉
查看服務(wù)
自啟動/關(guān)閉相當(dāng)于開機啟動或不啟動,我們通過以下命令可以查看服務(wù)的狀態(tài)
在network中我們可以看到在運行級別3,5的狀態(tài)下都設(shè)置了開機啟動網(wǎng)絡(luò)服務(wù)
[root@yellowstarEdu01 ~]# chkconfig --list
注:該輸出結(jié)果只顯示 SysV 服務(wù),并不包含
原生 systemd 服務(wù)。SysV 配置數(shù)據(jù)
可能被原生 systemd 配置覆蓋。
要列出 systemd 服務(wù),請執(zhí)行 'systemctl list-unit-files'。
查看在具體 target 啟用的服務(wù)請執(zhí)行
'systemctl list-dependencies [target]'。
netconsole 0:關(guān) 1:關(guān) 2:關(guān) 3:關(guān) 4:關(guān) 5:關(guān) 6:關(guān)
network 0:關(guān) 1:關(guān) 2:開 3:開 4:開 5:開 6:關(guān)
設(shè)置開機是否啟動
例如我們想對network服務(wù),設(shè)置運行級別為3時,不開機啟動網(wǎng)絡(luò)服務(wù),可以使用以下命令
注意:chkconfig重新設(shè)置服務(wù)自啟動或關(guān)閉,需要重啟虛擬機reboot命令
[root@yellowstarEdu01 ~]# chkconfig --level 3 network off
[root@yellowstarEdu01 ~]# chkconfig --list
注:該輸出結(jié)果只顯示 SysV 服務(wù),并不包含
原生 systemd 服務(wù)。SysV 配置數(shù)據(jù)
可能被原生 systemd 配置覆蓋。
要列出 systemd 服務(wù),請執(zhí)行 'systemctl list-unit-files'。
查看在具體 target 啟用的服務(wù)請執(zhí)行
'systemctl list-dependencies [target]'。
netconsole 0:關(guān) 1:關(guān) 2:關(guān) 3:關(guān) 4:關(guān) 5:關(guān) 6:關(guān)
network 0:關(guān) 1:關(guān) 2:開 3:關(guān) 4:開 5:開 6:關(guān)
systemctl管理指令
systemctl指令管理的服務(wù)在 /usr/lib/systemd/system查看
[root@yellowstarEdu01 ~]# ls -l /usr/lib/systemd/system
查看服務(wù)的自啟動狀態(tài),以防火墻舉例
[root@yellowstarEdu01 ~]# systemctl list-unit-files | grep firewall firewalld.service enabled
開啟、關(guān)閉防火墻
# systemctl disable firewalld 關(guān)閉防火墻開機啟動 # systemctl enable firewalld 開啟防火墻開啟啟動 [root@yellowstarEdu01 ~]# systemctl disable firewalld Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service. Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service. [root@yellowstarEdu01 ~]# systemctl list-unit-files | grep firewall firewalld.service disabled
查看防火墻是否自啟動
[root@yellowstarEdu01 ~]# systemctl is-enabled firewalld disabled
firewall指令
在真正的生產(chǎn)環(huán)境中,我們不可能把防火墻關(guān)閉了,往往需要將防火墻打開,但是如果我們把防火墻打開,那么外部請求數(shù)據(jù)包就不能跟服務(wù)器監(jiān)聽端口進行通訊。
這時候我們需要打開指定的端口,例如80,22,8080等
# firewall-cmd --permanent --add-port=端口/協(xié)議 打開端口 # firewall-cmd --permanent --remove-port=端口/協(xié)議 關(guān)閉端口 [root@yellowstarEdu01 ~]# firewall-cmd --permanent --add-port=111/tcp success # firewall-cmd --reload 重新載入才能生效 [root@yellowstarEdu01 ~]# firewall-cmd --reload success # firewall-cmd --query-port=端口/協(xié)議 查看端口是否開放 [root@yellowstarEdu01 ~]# firewall-cmd --query-port=111/tcp yes
這時候有小伙伴就要問了,怎么查看端口對應(yīng)的協(xié)議呢?只需使用以下指令即可
看111端口最前面的proto就是協(xié)議
[root@yellowstarEdu01 ~]# netstat -nap | more Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:25672 0.0.0.0:* LISTEN 7421/beam.smp tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1/systemd tcp 0 0 0.0.0.0:6000 0.0.0.0:* LISTEN 7581/X tcp 0 0 0.0.0.0:4369 0.0.0.0:* LISTEN 7992/epmd tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN 7927/dnsmasq tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 7426/sshd
動態(tài)監(jiān)控系統(tǒng)
top命令,與ps命令類似,都用來顯示正在執(zhí)行的進程,區(qū)別是top可以在執(zhí)行一段時間更新正在運行的進程
基本語法
# top [選項] -d 秒數(shù) :指定top命令每隔幾秒更新一次,不指定默認為3秒 -i top不顯示任何閑置或僵死進程 -p 通過指定監(jiān)控進程ID來僅僅監(jiān)控某個進程的狀態(tài)
來看看top命令顯示的一些信息

交互操作
P : 以CPU使用率排序,默認就是此項 M : 以內(nèi)存使用率排序 N : 以PID排序 q : 退出top # 監(jiān)視特定用戶 先輸入u,再輸入用戶名 # 終止指定的進程 先輸入k,在輸入要結(jié)束的進程ID
監(jiān)控網(wǎng)絡(luò)狀態(tài)
基本語法
netstat [選項] -an # 按一定順序排列輸出 -p # 顯示哪個進程在調(diào)用
查看服務(wù)名為sshd的服務(wù)的信息
netstat -anp | grep sshd

我們看倒數(shù)第二行,是root用戶登錄的進程并且是已連接,這里虛擬機中的22端口映射著我們主機的42701端口,只有兩個臺機子端口互相開放,才能建立連接。
如果我們退出root用戶,這個進程不會立即回到監(jiān)聽狀態(tài),而是轉(zhuǎn)為TIME_WAIT等待狀態(tài),持續(xù)幾分鐘,如果一直沒有重新連接,就關(guān)閉該進程
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
linux服務(wù)器上安裝Anaconda與pytorch的詳細過程
這篇文章主要介紹了linux服務(wù)器上安裝Anaconda與pytorch的詳細過程,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-10-10
Linux+php+apache+oracle環(huán)境搭建之CentOS下安裝Apache
Linux環(huán)境是在VMware虛擬機中搭建的,重在學(xué)習(xí),安裝的系統(tǒng)是CentOS6.5-64bit。本文主要講訴在CentOS中如何安裝APACHE。2014-08-08
詳解Win10 Bash/WSL調(diào)試Linux環(huán)境下的.NET Core應(yīng)用程序
本篇文章主要介紹了詳解Win10 Bash/WSL調(diào)試Linux環(huán)境下的.NET Core應(yīng)用程序 ,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-04-04
Linux宿主機下/容器下如何修改進程打開的文件句柄數(shù)(open files)
系統(tǒng)級的max-file和進程級的ulimit-n分別控制文件句柄的最大數(shù)量,系統(tǒng)級限制整個系統(tǒng),而ulimit-n只限制單個進程,當(dāng)進程打開的文件句柄數(shù)超限時,會報“Too many files open”錯誤,可以通過特定命令查看和修改這些值2024-10-10
Linux 命令行通配符及轉(zhuǎn)義符的實現(xiàn)
這篇文章主要介紹了Linux 命令行通配符及轉(zhuǎn)義符的實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-11-11
詳解linux系統(tǒng)目錄sys,tmp,usr,var!
在本篇文章里小編給大家詳解了關(guān)于linux系統(tǒng)目錄,sys,tmp,usr,var!的相關(guān)知識點內(nèi)容,有興趣的朋友們參考下。2019-06-06

