1. 程式人生 > >Linux入門進階第四天(下)——程序管理(補充內容)

Linux入門進階第四天(下)——程序管理(補充內容)

bnu 部分 localhost top 現在 exe rdquo init fec

1.PID

  觸發任何一個事件時,系統都會將他定義成為一個程序,並且給予這個程序一個 ID ,稱為 PID,同時依據啟發這個程序的使用者與相關屬性關系,給予這個 PID 一組有效的權限設置。

  同一個程序不同使用者得到的PID是不同的:

  技術分享圖片

2.切換登錄窗口可以使用alt+F1~F7進行切換

3.將指令丟到背景中“執行”的 &

4.將“目前”的工作丟到背景中“暫停”:[ctrl]-z

5.觀察目前的背景工作狀態: jobs

6.將背景工作拿到前景來處理:fg

[root@study ~]# fg %jobnumber
選項與參數:
%jobnumber :jobnumber 為工作號碼(數字)。註意,那個 % 是可有可無的! 範例一:先以 jobs 觀察工作,再將工作取出: [root@study ~]# jobs -l [1]- 14566 Stopped vim ~/.bashrc [2]+ 14567 Stopped find / -print [root@study ~]# fg <==默認取出那個 + 的工作,亦即 [2]。立即按下[ctrl]-z [root@study ~]# fg %1 <==直接規定取出的那個工作號碼!再按下[ctrl]-z [root@study
~]# jobs -l [1]+ 14566 Stopped vim ~/.bashrc [2]- 14567 Stopped find / -print

7.讓工作在背景下的狀態變成運行中: bg

8.管理背景當中的工作: kill

[root@study ~]# kill -signal %jobnumber
[root@study ~]# kill -l
選項與參數:
-l :這個是 L 的小寫,列出目前 kill 能夠使用的訊號 (signal) 有哪些?
signal :代表給予後面接的那個工作什麽樣的指示啰!用 man 7 signal 可知:
-1 :重新讀取一次參數的配置文件 (類似 reload); -2 :代表與由鍵盤輸入 [ctrl]-c 同樣的動作; -9 :立刻強制刪除一個工作; -15:以正常的程序方式終止一項工作。與 -9 是不一樣的。 範例一:找出目前的 bash 環境下的背景工作,並將該工作“強制刪除”。 [root@study ~]# jobs [1]+ Stopped vim ~/.bashrc [2] Stopped find / -print [root@study ~]# kill -9 %2; jobs [1]+ Stopped vim ~/.bashrc [2] Killed find / -print # 再過幾秒你再下達 jobs 一次,就會發現 2 號工作不見了!因為被移除了! 範例二:找出目前的 bash 環境下的背景工作,並將該工作“正常終止”掉。 [root@study ~]# jobs [1]+ Stopped vim ~/.bashrc [root@study ~]# kill -SIGTERM %1 # -SIGTERM 與 -15 是一樣的!您可以使用 kill -l 來查閱! # 不過在這個案例中, vim 的工作無法被結束喔!因為他無法通過 kill 正常終止的意思!

程序的觀察

  1.ps :將某個時間點的程序運行情況擷取下來

[root@study ~]# ps aux <==觀察系統所有的程序數據
[root@study ~]# ps -lA <==也是能夠觀察所有系統的數據
[root@study ~]# ps axjf <==連同部分程序樹狀態
選項與參數:
-A :所有的 process 均顯示出來,與 -e 具有同樣的效用;
-a :不與 terminal 有關的所有 process ;
-u :有效使用者 (effective user) 相關的 process ;
x :通常與 a 這個參數一起使用,可列出較完整信息。
輸出格式規劃:
l :較長、較詳細的將該 PID 的的信息列出;
j :工作的格式 (jobs format)
-f :做一個更為完整的輸出。

  更多請參見手冊介紹:http://linux.51yip.com/search/ps

通常鳥哥都會建議你,直接背兩個比較不同的選項, 一個是只能查閱自己 bash 程序的“
ps -l ”一個則是可以查閱所有系統運行的程序“ ps aux ”!註意,你沒看錯,是“ ps aux ”沒有那
個減號 (-) !

  示例:

[root@localhost ~]# ps -ef   #顯示所有進程的UID,PPIP,C與STIME欄位
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 18:24 ?        00:00:00 init [3]                                                                          
root         2     1  0 18:24 ?        00:00:00 [migration/0]
root         3     1  0 18:24 ?        00:00:00 [ksoftirqd/0]
root         4     1  0 18:24 ?        00:00:00 [watchdog/0]
root         5     1  0 18:24 ?        00:00:00 [migration/1]

  相關輸出欄位介紹:

F:代表這個程序旗標 (process flags),說明這個程序的總結權限,常見號碼有:
若為 4 表示此程序的權限為 root ;
若為 1 則表示此子程序僅進行復制(fork)而沒有實際執行(exec)。
S:代表這個程序的狀態 (STAT),主要的狀態有:
R (Running):該程序正在運行中;
S (Sleep):該程序目前正在睡眠狀態(idle),但可以被喚醒(signal)。
D :不可被喚醒的睡眠狀態,通常這支程序可能在等待 I/O 的情況(ex>打印)
T :停止狀態(stop),可能是在工作控制(背景暫停)或除錯 (traced) 狀態;
Z (Zombie):僵屍狀態,程序已經終止但卻無法被移除至內存外。
UID/PID/PPID:代表“此程序被該 UID 所擁有/程序的 PID 號碼/此程序的父程序 PID 號
碼”
C:代表 CPU 使用率,單位為百分比;
PRI/NI:Priority/Nice 的縮寫,代表此程序被 CPU 所執行的優先順序,數值越小代表該
程序越快被 CPU 執行。詳細的 PRI 與 NI 將在下一小節說明。
ADDR/SZ/WCHAN:都與內存有關,ADDR 是 kernel function,指出該程序在內存的哪
個部分,如果是個 running 的程序,一般就會顯示“ - ” / SZ 代表此程序用掉多少內存 /
WCHAN 表示目前程序是否運行中,同樣的, 若為 - 表示正在運行中。
TTY:登陸者的終端機位置,若為遠端登陸則使用動態終端接口 (pts/n);
TIME:使用掉的 CPU 時間,註意,是此程序實際花費 CPU 運行的時間,而不是系統時
間;
CMD:就是 command 的縮寫,造成此程序的觸發程序之指令為何。

  2.top——top:動態觀察程序的變化

 top 這個程序可以持續
的監測整個系統的程序工作狀態。 在默認的情況下,每次更新程序資源的時間為 5 秒,不
過,可以使用 -d 來進行修改。

  列名解釋:

序號    列名    含義
a        PID        進程id
b        PPID    父進程id
c        RUSER    Real user name
d        UID        進程所有者的用戶id
e        USER    進程所有者的用戶名
f        GROUP    進程所有者的組名
g        TTY        啟動進程的終端名。不是從終端啟動的進程則顯示為 ?
h        PR        優先級
i        NI        nice值。負值表示高優先級,正值表示低優先級
j        P        最後使用的CPU,僅在多CPU環境下有意義
k        %CPU    上次更新到現在的CPU時間占用百分比
l        TIME    進程使用的CPU時間總計,單位秒
m        TIME+    進程使用的CPU時間總計,單位1/100秒
n        %MEM    進程使用的物理內存百分比
o        VIRT    進程使用的虛擬內存總量,單位kb。VIRT=SWAP+RES
p        SWAP    進程使用的虛擬內存中,被換出的大小,單位kb。
q        RES        進程使用的、未被換出的物理內存大小,單位kb。RES=CODE+DATA
r        CODE    可執行代碼占用的物理內存大小,單位kb
s        DATA    可執行代碼以外的部分(數據段+棧)占用的物理內存大小,單位kb
t        SHR        共享內存大小,單位kb
u        nFLT    頁面錯誤次數
v        nDRT    最後一次寫入到現在,被修改過的頁面數。
w        S        進程狀態。
                D=不可中斷的睡眠狀態
                R=運行
                S=睡眠
                T=跟蹤/停止
                Z=僵屍進程
x        COMMAND    命令名/命令行
y        WCHAN    若該進程在睡眠,則顯示睡眠中的系統函數名
z        Flags    任務標誌,參考 sched.h

默認情況下僅顯示比較重要的 PID、USER、PR、NI、VIRT、RES、SHR、S、%CPU、%MEM、TIME+、COMMAND 列。可以通過下面的快捷鍵來更改顯示內容

Linux入門進階第四天(下)——程序管理(補充內容)