天天看點

Linux作業與程序管理

一. 作業管理

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)。

繼續閱讀