Linux的程序管理、檢視、殺死程序、任務管理、系統資源監控(課堂學習筆記)
一、程序管理
程式與程序之間的區別與聯絡?
程序是由程序控制塊、程式段、資料段三部分組成。一個程序可以包含若干執行緒(Thread)
程序為應用程式的執行例項,是應用程式的一次動態執行。
程序是程式在計算機上的一次執行活動。執行一個程式,就是啟動了一個程序。
程式是死的(靜態的),程序是活的(動態的)。程序可以分為系統程序和使用者程序。凡是用於完成作業系統的各種功能的程序就是系統程序,它們就是處於執行狀態下的作業系統本身;使用者程序就是所有由你啟動的程序。程序是作業系統進行資源分配的單位。
在Windows下,程序又被細化為執行緒,也就是一個程序下有多個能獨立執行的更小的單位。
1.檢視Linux啟動的第一個程序
pidof init
tty、pty與pts的區別?
這個問題我參照的如下部落格:
https://blog.csdn.net/deyili/article/details/5467342
2.檢視程序狀態
(1)作用:將某個時間點的程式運作情況擷取下來。
(2)選項和引數
a:和輸入終端(terminal)關聯的所有process,通常與x一起使用,列出完整資訊。
x:後臺程序,通常與a 這個引數一起使用,可列出較完整資訊
u:有效使用者(effective user) 相關的process
2.1觀察系統所有程式:ps aux
USER:該process的使用者
PID:該process的程式識別符號
%CPU:該process使用掉的CPU 資源百分比
%MEM:該process所佔用的實體記憶體百分比
VSZ:該process使用掉的虛擬記憶體量(Kbytes)
RSS:該process佔用的物理的記憶體量(Kbytes)
TTY:該process是在那個終端機上面運作,若與終端機無關則顯示?, 另外, tty1-tty6 是本機上面的登入者程式,若為pts/0 等等的,則表示為由網路連線進主機的程式
STAT:該程序目前的狀態,狀態顯示與ps-l 的S 旗標相同(R/S/D/T/Z)
START:該process被觸發啟動的時間
TIME:該process實際使用CPU 運作的時間
COMMAND:該程式的實際命令
ps -lA 也是能夠觀察所有系統的資料
2.2檢視部分程序
ps aux | grep bash
2.3啟動httpd服務
service httpd start
root使用者啟動httpd服務之後,下放給8個apache偽使用者:
2.4程序樹(可以檢視父程序與子程序)
1.ps axjf
2.pstree
pstree命令是用於檢視程序樹之間的關係,誰程序是父程序,誰是子程序,一目瞭然。
-A: 各程序樹之間的連線以ASCII碼字元來連線
-U:各程序樹之間的連線以utf8字元來連線,某些終端可能會有錯誤
-p:同時列出每個程序的PID
-u: 同時列出每個程序的所屬賬號名稱
pstree -Aup:
檢視前面若干個程序:ps aux | head -4
檢視最後幾行的程序:ps aux | tail -2
二、檢視程序
1.Linux程序狀態
- R (TASK_RUNNING),指正在被CPU執行或者就緒的狀態(在run_queue佇列裡的狀態)
- S (TASK_INTERRUPTIBLE),可中斷的睡眠狀態;處於等待狀態中的程序,一旦被該程序等待的資源被釋放,那麼該程序就會進入執行狀態
- D (TASK_UNINTERRUPTIBLE),不可中斷的睡眠狀態,該狀態的程序只能用wake_up()函式喚醒。
- T (TASK_STOPPED or TASK_TRACED),當程序收到訊號SIGSTOP、SIGTSTP、SIGTTIN或SIGTTOU時就會進入暫停狀態。可向其傳送SIGCONT訊號讓程序轉換到可執行狀態。
- Z (TASK_DEAD -EXIT_ZOMBIE),殭屍程序:當程序已經終止執行,但是父程序還沒有詢問其狀態的情況。不可被kill,即不響應任務訊號,無法用SIGKILL殺死。
2.觀察程序變化命令:top
引數選項
-d:後面可以接秒數,就是整個程式畫面更新的秒數;預設5秒。
-b:以批次方式執行top,還有更多引數可以使用,通常會搭配資料流重導向來將批次的結果輸出成為檔案。
-n:與-b 搭配,作用是需要進行幾次top的輸出結果。
-p :指定某些個PID 來進行觀察監測。
1.top -d 5
top -b -n 2:輸出了兩段
、
三、殺死程序:kill命令
作用:kill傳送訊號,並不只是殺程序
選項與引數
-l :這個是L的小寫,列出目前kill 能夠使用的訊號(signal)有哪些? signal :向程序傳送的訊號,指示其進行不同操作。用man 7 signal 可知。
-15:以正常的程式方式終止一個程序!!!
-9:立刻強制終止一個程序!!!
-2:代表由鍵盤輸入[ctrl]-c 同樣的動作
-1:對於sshd這樣的守護程序,重新讀取一次引數的配置檔案(類似reload),如果程序為非守護程序,預設為終止程序
操作:
kill -l
釋出 pstree -aup | grep sshd:
用引數 -1 來殺1773程序:
kill -1 1773
這裡發現沒有殺死sshd程序,又重新載入,但是pid變了,從1773變成了2209。
下面用引數-9來殺死這個守護程序sshd:
啟動httpd程序並檢視其程序樹:
父程序被kill掉,它的子程序是否就一起被kill掉?
可以發現kill了父程序後,其下的子程序並沒有被kill
但是如果任務是殺死所有使用者的httpd程序,那麼就需要多次釋出kill命令,顯得非常繁瑣
Linux提供了一個很好的命令:killall
利用killall命令殺死所有使用者的httpd程序:直接把父程序連帶的子程序也殺死了。
四、系統資源監控
1.free命令
可以顯示當前系統未使用的和已使用的記憶體數目,還可以顯示被核心使用的記憶體緩衝區。
-b:以Byte為單位顯示記憶體使用情況;
-k:以KB為單位顯示記憶體使用情況;
-m:以MB為單位顯示記憶體使用情況;
-o:不顯示緩衝區調節列;
-s<間隔秒數>:持續觀察記憶體使用狀況;
-t:顯示記憶體總和列;
-V:顯示版本資訊。
free -m -t:
第一行選單列的意思:
total:記憶體總數;
used:已經使用的記憶體數;
free:空閒的記憶體數;
shared:當前已經廢棄不用;
buffers Buffer:快取記憶體數;
cached Page:快取記憶體數。
關係:total = used + free
2.uname命令
用於列印當前系統相關資訊(核心版本號、硬體架構、主機名稱和作業系統型別等)
選項:
-a或--all:顯示全部的資訊;
-m或--machine:顯示電腦型別;
-n或-nodename:顯示在網路上的主機名稱;
-r或--release:顯示作業系統的發行編號;
-s或--sysname:顯示作業系統名稱;
-v:顯示作業系統的版本;
-p或--processor:輸出處理器型別或"unknown";
-i或--hardware-platform:輸出硬體平臺或"unknown";
-o或--operating-system:輸出作業系統名稱;
--help:顯示幫助;
--version:顯示版本資訊。
3.uptime命令
能夠列印系統總共運行了多長時間和系統的平均負載。uptime命令可以顯示的資訊顯示依次為:現在時間、系統已經運行了多長時間、目前有多少登陸使用者、系統在過去的1分鐘、5分鐘和15分鐘內的平均負載。
4.netstat命令
用來列印Linux中網路系統的狀態資訊,可讓你得知整個Linux系統的網路情況。
列出所有埠 (包括監聽和未監聽的)
netstat -a #列出所有埠
netstat -at #列出所有tcp埠
netstat -au #列出所有udp埠
列出所有處於監聽狀態的 Sockets
netstat -l #只顯示監聽埠
netstat -lt #只列出所有監聽 tcp 埠
netstat -lu #只列出所有監聽 udp 埠
netstat -lx #只列出所有監聽 UNIX 埠
顯示每個協議的統計資訊
netstat -s 顯示所有埠的統計資訊
netstat -st 顯示TCP埠的統計資訊
netstat -su 顯示UDP埠的統計資訊
更多操作檢視:http://man.linuxde.net/netstat
5.vmstat命令
的含義為顯示虛擬記憶體狀態(“Viryual Memor Statics”),但是它可以報告關於程序、記憶體、I/O等系統整體執行狀態。
選項:
-a:顯示活動內頁;
-f:顯示啟動後建立的程序總數;
-m:顯示slab資訊;
-n:頭資訊僅顯示一次;
-s:以表格方式顯示事件計數器和記憶體狀態;
-d:報告磁碟狀態;
-p:顯示指定的硬碟分割槽狀態;
-S:輸出資訊的單位。
引數:
- 事件間隔:狀態資訊重新整理的時間間隔;
- 次數:顯示報告的次數。
統計目前主機CPU狀態,每秒一次,共計四次:
6.防火牆的啟動、狀態檢視、關閉
# service iptables start //啟動
# service iptables status //檢視狀態
# service iptables stop //停止
# service iptables restart //重啟
以上狀態的修改,在伺服器重啟前生效。
永久關閉:
chkconfig iptables off
永久開啟:
chkconfig iptables on
在伺服器重啟後生效,防火牆在伺服器重啟前的狀態並沒有發生改變。
網路服務關鍵字:network
五、任務管理
jobs命令用於顯示Linux中的任務列表及任務狀態,包括後臺執行的任務。該命令可以顯示任務號及其對應的程序號。其中,任務號是以普通使用者的角度進行的,而程序號則是從系統管理員的角度來看的。一個任務可以對應於一個或者多個程序號。
在Linux系統中執行某些操作時候,有時需要將當前任務暫停調至後臺,或有時須將後臺暫停的任務重啟開啟並調至前臺,這一序列的操作將會使用到 jobs、bg、和fg 三個命令以及兩個快捷鍵來完成。
選項:
-l:顯示程序號;
-p:僅任務對應的顯示程序號;
-n:顯示任務狀態的變化;
-r:僅輸出執行狀態(running)的任務;
-s:僅輸出停止狀態(stoped)的任務。
1、前臺程序
可以控制與執行命令的bash環境稱為前臺程序。
2、後臺程序
在作業系統中自行執行,你無法使用[ctrl]+c終止,可使用bg/fg命令操作的任務。
後臺執行的任務不能接收終端(terminal/shell)的輸入。
Ctrl+Z 切換到後臺 或者 tail -F install.log &
在當前bash執行多個任務:
觀察後臺任務:
停止:
六、華為老師的思維導圖