Linux进阶之路————进程与服务管理
引言
在Linux 中,每個執(zhí)行的程序(代碼)都成為一個進程,Linux 為每一個進程分配了一個唯一的 id 號 - PID。
每個進程都會對應一個父進程,而這個父進程可以復制多個子進程,例如 www 服務器。
每個進程都可能以兩種方式存在 - 前臺/ 后臺,所謂前臺進程就是用戶目前的屏幕上可以進行操作的。后臺進程則是實際在操作,但由于屏幕上無法看到的進程,通常運行在管理員無法感知的后臺。
一般系統(tǒng)服務都是以后臺進程的形式存在,比如 sshd 服務進程,其中的 d 代表 daemon (守護進程),而且會常駐在系統(tǒng)中,如果不進行特殊操作,一般只有在關機時才會終止。
一、顯示系統(tǒng)中的進程列表
基本語法:
ps -aux
一般使用 ps 指令都會帶上參數(shù),-a 代表 all 所有進程;-u 代表 user 以用戶格式顯示;-x 代表顯示后臺進程運行參數(shù)。
字段詳解:
USER - 進程的用戶名
PID - 進程 ID
%CPU - 占用 CPU 百分比
%MEM - 占用物理內存百分比
VSZ - 使用的虛擬內存大小(單位:KB)
RSS - 使用的物理內存大小(單位:KB)
TTY - 終端名稱,縮寫
STAT - 進程狀態(tài),S - 睡眠,s - 表示該進程是會話的先導進程,N-表示進程擁有比普通優(yōu)先級更低的優(yōu)先級,R-正在運行,D-短期等待,Z-僵死進程,T-被跟蹤或被停止。
START - 進程啟動時間
TIME - 進程占用 CPU 總時間
COMMAND - 進程執(zhí)行時的命令行,過長的話可能會截斷顯示
另外,ps -aux 還可以通過管道符和過濾命令? “| grep 進程名”? ?來專門查找指定進程的詳情信息:
可以看到上面的途中,查看ssh 進程的信息,顯示結果中,第一行是 sshd 后臺進程,因為它在啟動時使用了 /usr/sbin/sshd 命令。而最后一行可以看到使用的是 grep ssh ,也就是我們正在查詢時開啟的一個進程。第二和第三行是通過外部的 ssh 終端設備連接進來而開啟的后臺進程,第四行則是一個 sftp 相關的后臺進程。
有趣的是,如果我通過 kill -9 殺掉 3362 進程,那么遠程終端的文件視圖就會連接中斷,同時第四行的 sftp 后臺進程也會終止:
終端命令行依然可以操作,由此可見進程列表中顯示的信息與實際的進程情況完全匹配。
二、查看父進程
還有一種查詢進程的方式是:
ps -ef
這句指令的意思是“全格式顯示所有進程,包括父進程”。一般也會配合 管道符 “|” 和 篩選指令 grep 、分頁指令 more 等一起使用。
PPID 就是父進程的 PID 。
C 代表CPU 用于計算執(zhí)行優(yōu)先級的因子。數(shù)值越大,表名進程是 CPU 密集型運算,執(zhí)行優(yōu)先級會降低;數(shù)值越小,表名進程是 IO 密集型運算,執(zhí)行優(yōu)先級會提高。
STIME 進程啟動的時間
TTY? 終端名稱
TIME? CPU 占用時間
CMD? 啟動進程所用的命令和參數(shù)
三、終止進程
基本語法:
kill? 參數(shù)? 進程PID
常用參數(shù): -9。
Linux 中的 kill 指令用來終止指定進程的運行。
通常,終止一個前臺進程只需要 Ctrl + C ,但是對于一個后臺進程就需要使用 kill 指令,并且要先查看我們想要終止進程的 PID。
我們來使用 man kill 來查看一下 kill? 的使用手冊:
在描述中的第一段話意思是這樣的:
指令 kill 發(fā)送特定的信號給特定的進程或進程組。如果沒有指定信號,那么就會發(fā)送 TERM 信號。TERM 信號會殺死那些沒有捕獲這個信號的進程。對于其他的進程,可能有必要使用 KILL(9) 信號,因為這個信號不會被捕獲。
在 kill 說明中有一個參數(shù) 是 -l? 可以列出所有的可發(fā)送信號:
因此,kill -9 的含義就是強制殺死進程。
四、服務管理
服務的本質其實就是進程,但是運行于后臺,通常會監(jiān)聽某個端口,等待其他程序的請求,比如mysqld,sshd 防火墻等,因此我們又稱為守護進程
4.1 service指令
在CentOS 7之前都是通過 service 指令來管理后臺系統(tǒng)服務,CentOS7 之后,采用systemctl 指令來進行管理。這里講解 service 的用法,后期會針對 CentOS 7 來進程補充。
基本語法:
service? 服務名? start | stop | restart | reload | status
案例:查看Linux 防火墻的情況,關閉并重啟防火墻:
可以在宿主機終端采用 telnet 指令來檢查端口是否可以連接(國慶期間又裝了一個 CentOS 6 ,ip 是200):
4.2 查看Linux自啟動服務
在命令行輸入 setup 指令并回車即可查看系統(tǒng)自啟動服務:
服務名稱前面的 [ ] 內如果有 * 號,說明此項服務屬于開機自啟。
除了這種方式,還可以通過/etc/init.d/服務名稱 文件來查看:
不過在這里好像只能看到系統(tǒng)都有哪些服務。
4.3 服務的運行級別
在前面的文章中《Linux進階之路————Linux運行級別》中,總結了關于Linux 系統(tǒng)運行級別的概念和知識,這里服務的運行級別也和之前的運行級別是一脈相承的。
首先我們知道,Linux 的啟動流程是如下所示的:
服務的運行級別對應著系統(tǒng)的運行級別,如果系統(tǒng)當前的運行級別是3,那么5 運行級別的服務就不會開機啟動,而需要手動操作。
通過 chkconfig 指令可以給每個服務的各個運行級別設置 自啟動/ 關閉,設置之后即生效。
常用語法:
chkconfig? --list | grep? 服務名? ?# 查看服務的運行級別狀態(tài),過濾處理可選
?chkconfig 服務名 --list? # 查看某個服務的運行級別狀態(tài)
?chkconfig? [--level? 運行級別編號]? 服務名? on | off? ? ? # 在某個運行級別下開啟或關閉自啟動,若不寫運行級別,默認全部
案例:關閉所有運行級別下的防火墻服務的自啟動:
五、進程監(jiān)控
Linux 使用 top 命令來進行進程監(jiān)控。
top 命令和 ps 命令有些類似,它們都用來顯示正在執(zhí)行的進程,但二者又有不同,top 最大的特點在于可以定期刷新進程列表中的狀態(tài)。
基本語法:
top [選項]
可選參數(shù):
-d 秒數(shù)? ? ? ? 指定top 命令刷新頻率,默認是 3。
-i? ? ? ? ? ? ? ? ? ?不顯示任何閑置或者僵死進程
-p? PID? ? ? ? ? 指定進程ID 的進程狀態(tài)
當進入到 top 的交互模式中時,可以通過下面一些參數(shù),來與 top 命令進行交互:
P? ? ? ? ? ? 以CPU 使用率排序,默認是此項
M? ? ? ? ? ? 以內存使用率排序
N? ? ? ? ? ? ?以 PID 排序
q? ? ? ? ? ? ? 退出 top 命令
輸入 top 命令可以顯示上圖中的信息,默認每 3 秒刷新一次,如果按下交互鍵,在排序的同時可以立即刷新列表。輸入q 可以退出 top 。
上圖中,up 代表系統(tǒng)啟動了多久,2 users 表示當前用戶數(shù),load average 應該是平均負載的意思。其余的選項可以網(wǎng)上搜索或見名猜意 (* ̄︶ ̄)。
六、網(wǎng)絡監(jiān)控
6.1 netstat?
網(wǎng)絡監(jiān)控采用 netstat 命令。
基本語法:
netstat [選項]?
常用參數(shù):
-an? ?按一定排序輸出
-p? ? ?顯示哪個進程在調用
案例:查看sshd 的服務信息:
可以看到,如果sshd 服務是關閉的狀態(tài)的話,那么 netstat 也查詢不到 sshd 的網(wǎng)絡監(jiān)聽狀態(tài)。
6.2 ping
不論是Windows 還是 Linux ,這個命令都是通用的。它是一種檢測網(wǎng)絡的工具,可以快速查看遠程主機是否可以連通,主機間的介質是否為斷,網(wǎng)線是否脫落或網(wǎng)卡故障等。
如果兩臺主機之間可以正常通信,那么就會顯示上圖所示,如果通信異常,那么就不會顯示時間等信息。
綜上,就是關于系統(tǒng)服務相關的知識總結,歡迎文末留言。
總結
以上是生活随笔為你收集整理的Linux进阶之路————进程与服务管理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux启动SAP服务,sap启动相关
- 下一篇: Linux进阶之路————磁盘查询