一. 作業管理
1. 直接将指令放到背景"執行": &
[root @test /root ]# command &
範例:
[root @test /root]# find / -name testing & <==将該執行程式丢到背景執行
[root @test /root]# fg <==将該程式叫回螢幕前執行
說明:
如果想要讓螢幕中的工作( command )在背景底下執行的時後,就使用 & 吧!不過,由于是背景執行的,是以該程式的輸出并不會顯現在螢幕上,是以需要特别留意輸出的資訊的管線重導的問題呦!另外,如何将該程式叫回來螢幕上面執行呢?就使用 fg 即可!當然啰,也可以使用 [Ctrl]+z 來将目前正在進行當中的工作丢到背景底下!那麼擺在背景底下執行有何好處呢?!最大的好處就是不怕被『 [Ctrl]+c 』這個中斷指令來中斷了!!
2. 将"目前"作業放到背景"暫停":[Ctrl]+z
文法:
[root @test /root ]# command
[root @test /root ]# ^Z <==按下[Ctrl]加上 z 鍵
參數說明:
範例:
[root @test /root]# vi .bashrc
^Z <==在 vi 當中的一般模式中鍵入[Ctrl]+z
[1]+ Stopped vi .bashrc <==這裡會顯示将資料丢到背景當中了!
[root @test /root]#
說明:
如果你正在進行 vi ,而且是在編輯一個重要資料檔案,但是偏偏你想起有的程式需要留意,是以需要退出 vi ,不過,你并不想這個時候儲存退出 vi ,那麼該如何是好呢?!就将資料丢到背景裡面去吧!以上面的例子來說明,當你在執行編輯 /root/.bashrc 這個檔案時,想要暫時離開,那麼就直接在 vi 的『一般模式』當中輸入[Ctrl] - z (小寫)按鍵,那麼系統就會告訴你『工作項目 [1] 在背景當中,而其狀态為[Stopped]亦即是停止的狀态!』,并且會離開 vi 進入到 command line 當中,等待使用者輸入指令!那如果想要回到 vi 呢?!呵呵,就需要使用 jobs 配合 bg 或 fg 啰!
3. 觀察目前背景作業狀态:jobs
文法:
[root @test /root ]# jobs [-lrs]
-l : 除了列出作業号外,同進列出PID
-r : 僅列出正在背景運作(run)的作業
-s : 僅列出正在背景暫停(stop)的作業
範例:
[root @test /root]# vi .bashrc
^Z <==在 vi 當中的一般模式中鍵入[Ctrl]+z
[1]+ Stopped vi .bashrc <==這裡會顯示将資料丢到背景當中了!
[root @test /root]# jobs
[1]+ Stopped vi .bashrc <==顯示有一個工作在背景下,狀态為停止。
說明:
剛剛我們提到的 & 與 vi 在背景下執行,那麼你怎麼知道目前你所進行的背景底下的工作有哪些呢?!很簡單,就是使用 jobs 就可以觀察到啦!以上式為例,使用 jobs 就可以知道目前的背景中工作項目有 vi .bashrc 這一項!那個中括号([])裡面的數字就是 jobs 的代号啰!
4. 将背景作業拿到前台處理:fg
文法:
[root @test /root ]# fg %number
[root @test /root ]# bg %number
參數說明:
% :表示 jobs 的作業号碼,%是可有可無的
範例:
[root @test /root]# find / -name test
^Z
[1]+ Stopped find / -name testing
[root @test /root]# vi .bashrc
^Z
[2]+ Stopped vi .bashrc <==這裡會顯示将資料丢到背景當中了!
[root @test /root]# jobs
[1]- Stopped find / -name testing
[2]+ Stopped vi .bashrc
[root @test /root]# fg %1 <==取出[1]作業運作
[root @test /root]# jobs
[1]- Running find / -name testing &
[2]+ Stopped vi .bashrc
[root @test /root]# fg %2 進入 vi 畫面啰!
說明:
OK!那麼如何來了解 jobs 的背景(bg)與前台(fg)的管控呢?!這裡請注意啰!這個bg 是将『背景當中的程式由 stopped 變成 Running 』的一個手段,至于fg『則是将背景中的指令移到螢幕上來動作』,那你怎麼知道你的背景當中有多少的工作(jobs)在進行呢?!就是執行 jobs 來看看背景程式的代号啰!然後以 bg %number 來将資料在背景中執行,而 fg %number 則是将代号為 number 的程式移動到螢幕前面動作!
5. 讓作業在背景運作:bg
文法:
[root @test /root ]# bg %number
參數說明:
% :表示 jobs 的作業号碼,%是可有可無的
注意:[ctrl]-z是将目前作業放到背景去"暫停",而 bg 是讓一個作業在背景運作。
6. 管理背景作業:kill
文法:
[root @test /root ]# kill -sigal %number
參數說明:
signal
-1 :重新讀取一次參數設定檔(類似 reload )
-2 :使用者中斷該工作,類似 [Ctrl]+c 來中斷一個工作
-9 :立刻殺掉一個工作,不論該工作是否為僵屍程式
-15 :以正常的程式方式停止一個工作(這是預設值)
範例:
[root @test /root]# jobs
[1]+ Stopped vi .bashrc
[root @test /root]# kill -9 %1
說明:
如果想要直接殺掉背景工作中的項目,可以直接輸入 kill 來殺掉!但是由于預設是将該程式停止而已, 不見得一定可以将該工作清除幹淨,是以需要送出一個訊号,告訴系統你就是要砍掉該程式!這個時候就使用 kill -9 吧另外, -15 稱為 terminal ,是以一般的正常程式砍掉一個 jobs ,而 –9 有『強制終止』的意思。
二. 程序管理
1. 檢視程序
1.1 ps
文法:
[root @test /root ]# ps -aux
參數說明:
-a : 與終端無關的所有的程序
-u : 有效使用者的相關程序
-x : 通常與a參數一起使用,可以列出較完整的資訊
範例:
[root @test /root]# ps -aux
列出目前所有正在記憶體中的程序
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 1384 468 ? S Mar31 0:05 init [3]
root 2 0.0 0.0 0 0 ? SW Mar31 0:00 [keventd]
........
[root @test /root]# ps -l
将目前屬于自己這次登入的PID與相關資訊顯示出來。
說明:
通常使用『 ps -aux 』這個參數來列出所有的資訊以提供自己檢查程式的問題!在上面的程式列出當中,說明如下:
USER:說明該程式是屬于哪一個人的;
PID:該程式的代号;
%CPU:代表該程式使用了多少 CPU 資源;
%MEM:代表該程式使用了多少的 RAM ;
VSZ, RSS:占去的 ram 的大小( bytes );
TTY:是否為登入者執行的程式?若為 tty1-tty6 則為本機登入者,若為 pts/?? 則為遠端登入者執行的程式
STAT:該程式的狀态,( R )為可執行的,( S )為該程式正在睡眠中,( T )正在偵測或者是停止了, (Z)僵屍程式,就是 zombie 死掉的程式啦!需要以 kill 除去啰!
START:該程式開始的日期;
TIME:該程式跑了多久的時間?
COMMAND:該程式的内容啦!
這是一個很有用的指令,尤其是在偵測系統的狀态時!
1.2 top
文法:
[root @test /root ]# top [-d] | top [-bnp]
參數說明:
-d : 後面接秒數,即整個程序畫面更新的秒數,預設是5秒。
-b : 以批處理的方式執行top.
-n : 與-b搭配,就是需要進行幾次top的輸入結果。
-p : 指定某些個PID來進行觀察。
在執行 top 的程式中,可以輸入下面的字元以進行排序
A :以 age 亦即是執行的先後程式進行排序
T :由啟動的時間排序
M :以所占的 memory 的大小排序
P :以所耗用的 CPU 資源排序
範例:
[root @test /root]# top
11:55pm up 8 days, 7:40, 1 user, load average: 0.22, 0.14, 0.10
71 processes: 69 sleeping, 2 running, 0 zombie, 0 stopped
CPU states: 24.6% user, 3.7% system, 0.0% nice, 71.5% idle
Mem: 255892K av, 222300K used, 33592K free, 0K shrd, 48084K buff
Swap: 289128K av, 8184K used, 280944K free 110472K cached
PID USER PRI NI SIZE RSS SHARE STAT %CPU %MEM TIME COMMAND
9898 root 9 0 5976 5976 1364 S 5.5 2.3 0:00 mrtg
4744 apache 14 0 5312 5052 3764 S 2.1 1.9 0:16 httpd
9189 apache 14 0 4520 4256 3752 S 1.9 1.6 0:01 httpd
9187 apache 10 0 4544 4276 3800 S 1.7 1.6 0:01 httpd
9212 mysql 9 0 7280 4772 2716 S 0.7 1.8 0:00 mysqld
9888 root 12 0 1064 1064 832 R 0.7 0.4 0:00 top
4842 mysql 10 0 7280 4772 2716 S 0.5 1.8 0:06 mysqld
9218 mysql 10 0 7280 4772 2716 S 0.5 1.8 0:00 mysqld
說明:
使用 ps 是一個不錯的管理工具,但是 ps 畢竟不是動态的,若 使用 top 的話,可以用動态(每五秒鐘更新一次)的方式來偵測程式的進行!而且在程式進行中,還可以使用 P 來以 CPU 耗用資源排序、使用 M 來以 memory 占用大小排序等等,非常好用的管理工作!有空的話多以 man top 來玩一玩吧!
1.3 pstree
[[email protected] ~]#pstree [-Aup]
參數:
-A : 各程序樹之間以ASCII字元來連接配接 (+,-,|)
-p : 同時列出每個程序的PID
-u : 同時列出每個程序的所屬賬号名稱
2.删除程序 kill
文法:
[root @test /root ]# kill -signal PID
參數說明:
那個 -signal 跟上面的 kill 一樣:
-9 :殺掉該程式
-15 :停止該程式!
範例:
[root @test /root]# kill -9 2380
說明:
要殺掉一個程式的時後,自然需要知道該程式的 PID 才行!另外,需要注意的是,由于很多的程式都有附屬關系,例如 sendmail 可能會同時開啟相當多的程式在工作(如果郵件量很大的時後!)是以,如果砍掉的是『子程式』是無法将整個程式殺掉的!而要知道該程式的代号(PID)自然就得善用 ps, top 等工具啰! 此外,您常常會發現在一些 scripts 裡面,會寫着 kill –1 PID 的字樣,那個 –l 是讓該 PID 重新讀取一次設定檔的意思,最常發現在 syslogd 這個 daemon 呢!
注意:這個kill與上面删除作業的kill的差別,一個為 %jobNumber(作業号名) 一個為 PID(程序ID)。