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