1. 程式人生 > >Linux的程序管理、檢視、殺死程序、任務管理、系統資源監控(課堂學習筆記)

Linux的程序管理、檢視、殺死程序、任務管理、系統資源監控(課堂學習筆記)

 

一、程序管理

1.檢視Linux啟動的第一個程序

2.檢視程序狀態

2.1觀察系統所有程式:ps aux

2.2檢視部分程序

2.3啟動httpd服務

2.4程序樹(可以檢視父程序與子程序)

二、檢視程序

1.Linux程序狀態

2.觀察程序變化命令:top

三、殺死程序:kill命令

四、系統資源監控

1.free命令

2.uname命令

3.uptime命令

4.netstat命令

5.vmstat命令

6.防火牆的啟動、狀態檢視、關閉

五、任務管理

六、華為老師的思維導圖


一、程序管理

程式與程序之間的區別與聯絡?

程序是由程序控制塊、程式段、資料段三部分組成。一個程序可以包含若干執行緒(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執行多個任務:

觀察後臺任務:

停止:

六、華為老師的思維導圖