Linux【NO.6】:進程管理常用命令


推薦鏈接:

 

進程管理常用命令


進程簡介:

何為進程?

  簡單講,進程(process)是運行中的程序的一個副本;從創建開始,到下一次結束終止是它的生命周期;

  慣例上圖先,

 

進程的調度

執行用戶代碼的機制叫用戶空(即用戶模式);
執行內核的代碼的機制叫內核空間(即內核模式)

如果發生系統調用,就會轉換成內核模式,然后又會切換到用戶模式;這種叫做模式切換

內核功用:進程管理、文件系統、網絡功能、內存管理、驅動程序、安全功能;

cpu上的指令:
    CPU環0,特權指令,只有kernel才能運行
    CPU環3上的指令普通用戶能運行
內核功用:進程管理、文件系統、網絡功能、內存管理、驅動程序、安全功能;

執行用戶代碼的機制叫用戶空(即用戶模式);
執行內核的代碼的機制叫內核空間(即內核模式);

整個代碼的執行過程中,可能需要不斷的在自己能執行的代碼和調用內核所執行的代碼間轉換;如果代沒有權限執行時,就要做模式轉換,也就意味程序要發起一次軟中斷,軟中斷的作用就是要發起系統調用的,執行內核中的代碼;
如果需要做管理類操作時,就會發起系統調用。任何需要系統特權指令的功能,操作系統就把它封裝成一個一個的調用;任何人任何程序都不得直接操作,必須向內核調用才可以;


模式切換:理想狀態70%用戶 30%內核
多任務是各進程之間是以時間片切割,一個進程運行的時間到了就下去讓其他需要的上來。
多個進程都在等待的話就需要優先級;內核負責進程調度的,它會會將霸占的時間的進程踢掉,

進程的當前狀態在CPU上,CPU上有指令指針寄存器,寄存器保存了當前進程的狀態,其運行速度接近CPU的速度;等要切換下一個進程時;內核在完成進程切換時找一個位置保存進程執行的中間狀態,這叫做保存現場;恢復第二個進程現場,進程間切換不斷發生保存切換現場;
進程的調度

進程的管理

  Linux 內核存儲進程信息的固定格式:task struct;多個任務的task struct組件的鏈表:task list ;為了追蹤內存中的結構信息,內存有了鏈表(雙向鏈表,雙向循環鏈表)
  如果內存空間中存儲了一段進程的相關信息,為了找尋一下個與之相同的結構體信息,每一個進程結構體結束的地方都有一小段數據,這些數據指向用來存放同樣數據的內存的地址;這樣就會形成一個鏈表;

參考:
linux內核調度算法(2)--CPU時間片如何分配
http://blog.csdn.net/russell_tao/article/details/7103012

Android系統開發(8)——linx進程基本概念
http://www.bkjia.com/Androidjc/871896.html
進程調度的基本概念
http://oa.gdut.edu.cn/jpkc/os/multimedia/oscai/chapter2/pages/ch28.htm

Linux內核剖析之進程地址空間(一)
http://www.2cto.com/os/201408/322865.html
linux 進程地址空間的一步步探究
http://blog.chinaunix.net/uid-26833883-id-3193585.html

task_struct結構描述
http://blog.csdn.net/allen_young_yang/article/details/6101015

進程的創建

  init進程負責創建所有的進程;進程都由其父進程創建,內核開設的調用並由fork生成子進程,父進程克隆clone()自己的數據給子進程;創建子進程的目的是在某一時刻來幫父進程完成某一任務。這里需要提及下寫時復制;

coW寫實復制:
  我們知道進程間的內存地址空間是隔離的,fork()系統調用的結果是生成一個新的子進程,為了保證隔離性, 早期的UNIX采用在fork()將父進程的地址空間完整的復制一份。這個操作非常的耗時。 為了提高效率現代的Unix及Linux采用了一種稱為寫時復制的技術,其實也就是一種延遲操作的做法, 子進程和父進程在fork()時並不馬上復制,而是暫時共享內存空間,隨后只要父進程或者子進程試圖寫共享的內存就會產生一個異常, 這時內核才把內存空間進程復制,比如我們在Shell中啟動一個程序時隨后就會啟動新的程序,啟動后的程序將會覆蓋舊的內存空間, 如果提前就復制了,那么這個復制操作其實是白做了,為此系統將這個操作優化為寫時復制;
  參考:

  Linux寫時拷貝技術(copy-on-write) :http://www.cnblogs.com/biyeymyhjob/archive/2012/07/20/2601655.html

父子進程關的系也是保存在task struct中,
  父進程---->靜默--處理銷毀子進程--->
   |                |
   |                |
   子進程---->>

  為了能夠實現快速進程調用,我們用140個隊列保存裝載進程,相同優先級的為一個隊列,調用時內核只需要掃描隊列的首部,根據優先級來判斷哪個先執行;每一個隊列都有兩隊:運行隊列,過期隊列,這樣就280個隊列了,程序從運行隊列中運行完畢,就會被拋到過期隊列;等運行隊列被運行完了,就會和過期隊列調換位置;

進程優先級:
0-139:
    1-99:實時優先級
    數字越大優先級越高
    100-139:靜態優先級
    數字越小優先級越高

    Nice值:-20-19,對應靜態優先級      
        -20對應100
        19對應139
    普通用戶只能調低自己的優先級,只有管理員才能調高;

 

Big O:復雜度,呈現什么樣的走勢
    O(1):無論復雜度多大,解決的時間都是恆定的;理想標准;
         Temp=i;i=j;j=temp;
        以上三條單個語句的頻度均為1,該程序段的執行時間是一個與問題規模n無關的常數。算法的時間復雜度為常數階,記作T(n)=O(1)。如果算法的執行時 間不隨着問題規模n的增加而增長,即使算法中有上千條語句,其執行時間也不過是一個較大的常數。此類算法的時間復雜度是O(1)。

    O(logn):對數
    O(n): 線性,次線性
    O(n**2): 平方
    O(2**n): 指數,有時叫作“幾何”(階)
    參考:
        大O符號
        http://baike.baidu.com/link?url=OpMWVJjZ4h6ZV79Yz2wHXTg1a_vm7Ywi0dKjZH-3Cr7H1Y964sAG4Rq51Z-4xDkWPBrKMyWhHTbrB0uwR4xjC_
        算法的時間復雜度(大O表示法) 
        http://xushixiong.vip.blog.163.com/blog/static/81094067200811184214426/
        log(logarithms)
        http://baike.baidu.com/link?url=A11fWl0T_lX7K5jbVPYjLTLgOZKXQwZv8tMk9taP0fxaIpwfNja_uWDDCIHoSBBpDYCjb1rG05aeZV39Vka0rpvp9nhMAoKABOPhwNPkdkq
Big O算法

 

進程內存:

簡單理解:內核把內存划分成固定大小的內存空間,一般4k,把這些集中分配給進程,偽裝成一個連續的內存;
Page Frame :頁框,用存儲頁面數據

  LRU算法:當內存不夠用時,就會將內存中最近最少使用的進程放進交換分區中;

  MMU:內存管理單元Memory Management Unit

  MMU的作用:當一個進程被加載至CPU上運行時,將其映射關系放到MMU芯片上,負責完成實時轉換;當一個進程的指令訪問它的某個地址(虛擬地址)空間的數據時,就會轉換為真正的物理地址並找到真正的數據(task struct);

參考:
    硬件篇之MMU:  http://my.oschina.net/jerikc/blog/228869

缺頁異常:

  如果此前把一個數據交換出來或者放到其他位置去了,那么它此時的映射關系就被破壞了,所以必須要重新映射;對於整個系統來講,一個進程訪問某空間以為要找的數據在自己的進程空間中,一旦訪問了卻沒有,那么這個數據就必須從磁盤載入;從磁盤載入有兩種可能:1、此前沒有載入,所以要從文件讀進來;2、數據放在交換內存中,也需要載入,這就會造成缺頁異常;訪問數據發現數據不在就是缺頁;

進程中有些數據必須在內存中,有些可以被換出的;必須在內存中的就叫做常駐內存集,而能交換出去的就是交虛擬內存集;

IPC進程間通信機制

雖然進程以為只有自己在運行,但必要時還是需要進程間通信的,這時就需要IPC機制;
IPC:Inter Process Communication進程間通信
    同一個主機上:
        signal  #發現號
        shm:share memory #共享內存
        semnphor #打手勢

    不同主機上:
        rpc:remote procecure call遠程過程調用
        socket:#套接字通信

Linux內核:搶占式多任務

  任何一個進程,當它需要啟動時,發現別的進程在運行,可把別的進程的CPU運行時間搶占過來;比如每個進程運行時間為5毫秒,這5毫秒分配可以搶占的時間點,如果沒人搶這五毫秒就走完了; 

進程類型:
  守護進程:daemon,在系統引導過程啟動的進程,跟終端無關的進程;
  前台進程:跟終端相關,通過終端啟動的進程
    注意:也可以在前台的進程 送往后台,以守護模式運行; 

進程狀態:
運行狀態:running
  就緒態:ready;什么都具備,就是沒調度CPU;可以運行,但沒有被運行;也可以稱為睡眠態;
  睡眠態:可中斷、不可中斷
    可中斷:interruptable;可以立即被調度到CPU運行;

    不可中斷:uniterruptable;調度到CPU運行不起來;進程運行過程中需要加載數據,而內存中沒有時就請求內核操作,內核將數據先加載到內核內存中再從內核內存復制到進程內存中,期間這樣的一次I/O等待,進程是運行不起來的;

    一次IO分兩步: 
    1 內核將數據加載到內核內存中
    2 從內核內存中復制到進程內存

  停止態:暫停於內存中,但不會被調度,除非手動啟動之;stopped
  僵死態:zombie,任何進程都由父進程幫助收屍的,父進程掛了,子進程就變成了僵屍

進程的分類:
  CPU-Bound:CPU密集型,消耗CPU資源多
  IO-Bound:I/O密集型,一般交互的進程I/O比較多


  Linux系統上的進程查看及管理工具

  pstree,ps,pidof,pgrep,top,htop,glances,pmap,vmstat,dstat,kill,pkill,job,bg,fg,nohup,nice,renice,killall,...

pstree命令:

進程樹查看,倒置的樹

演示:
CentOS7 :systemd
[root@localhost ~]# pstree
systemd─┬─NetworkManager─┬─dhclient
        │                └─3*[{NetworkManager}]
        ├─2*[abrt-watch-log]
        ├─abrtd
        ├─agetty
        ├─alsactl
        ├─atd
        ├─auditd─┬─audispd─┬─sedispatch
        │        │         └─{audispd}
        │        └─{auditd}
        ├─chronyd
        ├─crond
        ├─dbus-daemon───{dbus-daemon}
        ├─irqbalance
        ├─lsmd
        ├─lvmetad
        ├─master─┬─pickup
        │        └─qmgr
        ├─polkitd───5*[{polkitd}]
        ├─rsyslogd───2*[{rsyslogd}]
        ├─smartd
        ├─sshd───sshd───bash───pstree
        ├─systemd-journal
        ├─systemd-logind
        ├─systemd-udevd
        └─tuned───4*[{tuned}]
CentOS 6 :init
[root@centos6 ~]# pstree
init─┬─NetworkManager─┬─dhclient
     │                └─{NetworkManager}
     ├─abrtd
     ├─acpid
     ├─atd
     ├─auditd───{auditd}
     ├─automount───4*[{automount}]
     ├─console-kit-dae───63*[{console-kit-da}]
     ├─crond
     ├─cupsd
     ├─dbus-daemon
     ├─hald─┬─hald-runner─┬─hald-addon-acpi
     │      │             └─hald-addon-inpu
     │      └─{hald}
     ├─irqbalance
     ├─login───bash
     ├─5*[mingetty]
     ├─modem-manager
     ├─rpc.statd
     ├─rpcbind
     ├─rsyslogd───3*[{rsyslogd}]
     ├─sshd───sshd───bash───pstree
     ├─udevd───2*[udevd]
     └─wpa_supplicant
演示:pstree命令

 

ps 命令:

ps - report a snapshot of the current processes.
顯示命令執行這一刻瞬間的狀態,並不動態連續;通過查看/proc/PID下查看,當前進程狀態;如果想對進程運行時間監控,應該用 top 工具
內核中的狀態信息供過/proc/輸出給用戶;內核參數有2類,其參數被模擬成文件系統類型:

  • 可設置其值從而調整內核運行特性的參數;/proc/sys/
  • 狀態變量:其用於輸出內核中統計信息或狀態信息,僅用於查看
ps [options]:
    選項有三種風格:
       1   UNIX 
       2   BSD 
       3   GNU 

    啟動進程的方式:
        系統啟動過程中自動啟動:與終端無關的進程;
        用戶通過終端啟動:與終端相關的進程;

    選項:
        a:所有與終端相關的進程;
        x: 所有與終端無關的進程;
            帶[]標識內核線程;
        u: 以用戶為中心來組織進程狀態信息顯示;

        -e:顯示所有進程
        -f: 顯示完整格式的進程信息

        -F: 顯示完整格式的進程信息
            C:CPU utilization
            PSR: 運行在哪個CPU之上

        -H:以層級結構顯示進程的相關信息;

常用組合之一:aux
    VSZ:虛擬內存集
    RSS:Resldent Size,常駐內存集
    STAT: 運行狀態
        R:running
        S:interruptable sleeping 可中斷睡眠
        D:uninerruptable sleeping 不可中斷睡眠(通常 IO 的進程)
        T:Stopped 停止態
        Z:zombie 僵死態

        +:前台進程
        l: 多線程進程
        N:低優先級進程
        <:高優先級進程
        s: session leader 會話領導者
常用組合之二:-ef
    C:CPU占用百分比
    STIME:啟動時間
    TIME:累計運行時間

常用組合之三:-eFH

常用組合之四:-eo,axo
    o field1,field2,...: 自定義要顯示的字段列表,以逗號分隔;
    常用的field:pid,ni,pri,psr,user,pcpu,pmem,stat,comm,tty,ppid,rtprio
        ni:nice值;
        pri:priorty ,優先級;
        rtprio:real time priority,實時優先級;
        psr:運轉那個cpu上
        pcpu:cpu利用率
        pmem:內存占用率
        user:進程用戶
        args:顯示命令和參數
        comm:程序名
        stat:狀態
        tty:終端
        ppip:父進程號
演示:
[root@centos7 1]# ps aux | head -2  #BSD風格
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.6  44000  6524 ?        Ss   09:55   0:03 /usr/lib/systemd/systemd --switched-root --system --deserialize 24
VSZ:虛擬內存集 ;RSS:Resldent Size,常駐內存集 ;STAT: 運行狀態

[root@centos7 1]# ps -ef | head -2 #UNIX風格
UID         PID   PPID  C STIME TTY          TIME CMD
root          1      0  0 09:55 ?        00:00:03 /usr/lib/systemd/systemd --switched-root --system --deserialize 24

[root@centos7 1]# ps -eo ni,pid,pcpu,psr,comm,user,pmem | head -2
 NI    PID %CPU PSR COMMAND         USER     %MEM
  0      1  0.0   1 systemd         root      0.6
演示:ps命令

 

 pgrep,pkill命令:

- look up or signal processes based on name and other attributes
  pgrep [options] pattern 根據進程相關屬性查找進程
  pkill [options] pattern 發送信號(signal)到指定進程

[options] 
                    
-u uid: effective user顯示指定用戶的進程
-U uid:read user 
-t TERMINAL:與指定的終端相關的進程;
-l:顯示進程名
-a: 顯示完整格式的進程名;
-P pid: 顯示此進程的子進程

 

pidof命令:
根據進程名去其PID;

 

top命令:顯示進程相關信息

排序:
    P:cpu百分比排序,默認
    M:以占據內存百分比排序;
    T:累計占用CPU時間排序
改變排序列:shift + > 或 shift + <,默認cpu

高亮顯示當前運行進程:b
高亮顯示列:x
顯示 完整命令:c

首部信息:
    1、utptime信息: l命令啟動關閉
    23:task及cpu信息:t命令啟動關閉
    45:內存信息:m命令啟動關閉

退出:q
修改刷新時間間隔;s
終止指定的進程:k

選項:
    -d # : 指定刷新的時間間隔,默認3秒
    -b: 以批次方式顯示;
    -n # 顯示多少批次;

uptime命令:顯示系統時間、運行時長及平均負載;
過去1分鍾、5分鍾和15分鍾的平均負載;
    等待運行的進程隊列的長度;
演示:
[root@centos7 ~]# top -n 1
top - 16:12:59 up  6:17,  3 users,  load average: 0.08, 0.03, 0.05
Tasks: 363 total,   1 running, 362 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.1 sy,  0.0 ni, 99.8 id,  0.1 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  1003192 total,   721120 free,   127032 used,   155040 buff/cache
KiB Swap:  2097148 total,  2097148 free,        0 used.   720936 avail Mem 

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                                      
   137 root      20   0       0      0      0 S   5.9  0.0   0:03.74 rcu_sched           
1行、utptime信息: l命令啟動關閉
16:12:59:                      當前時間
up  6:17:                      運行時長
3 users:                       當前用戶登錄數
load average: 0.08, 0.03, 0.05:平系統負載
    平系統負載:  過去1分鍾、5分鍾、15分鍾平均隊列長度,等待CPU運行的進程隊列長度;
    注意:通常平均負載長時間超過3個,代表cpu應付不了當前業務負載需要;通常隊列長度的總數量不能大於CPU的數量;

2,3行:task及cpu信息:t命令啟動關閉
Tasks:
363 total:   進程總數
1 running:   正在運行的進程數
362 sleeping:睡眠的進程數
0 stopped:   停止的進程數
0 zombie:    僵屍進程數

%Cpu(s):  
0.0 us:用戶空間占用CPU百分比
0.1 sy:內核空間占用CPU百分比
0.0 ni:用戶進程空間內改變過優先級的進程占用CPU百分比
99.8 id:空閑CPU百分比
0.1 wa:等待I/O完成的CPU時間百分比
0.0 hi:硬中斷
0.0 si:軟中斷
0.0 st:被虛擬化程序偷走的時間百分比;運行虛擬機軟件,那些時間被虛擬機拿走了;
    注意:正常us與sy比率在7:3左右;wa很大,代表I/O系統成為性能瓶頸;st判斷當前cpu實時負載;

4,5行:內存信息:m命令啟動關閉
KiB Mem :  
1003192 total:    物理內存總量;1G
721120 free:      空閑內存總量:
127032 used:      使用的物理內存總量
155040 buff/cache:用於緩存緩沖的內存空間;不算是真占用,可被回收;
    注意:真正空閑內存空間 = free + buff/cache

KiB Swap:
2097148 total:   交換區總量
2097148 free:    空閑交換區總量
0 used:          使用的交換區總量
720936 avail Mem: 

進程信息:
PID:   進程id
USER:  進程所有者的用戶名
PR:    優先級;100+NICE值
NI:    nice值。負值表示高優先級,正值表示低優先級
VIRT:  虛擬內存集
RES:   常駐內級
SHR:   共享內存空間
S:     進程狀態
    D=不可中斷的睡眠狀態
    R=運行
    S=睡眠
    T=跟蹤/停止
    Z=僵屍進程

%CPU:  上次更新到現在的CPU時間占用百分比
%MEM:  進程使用的物理內存百分比
TIME+ :進程使用的CPU時間總計,單位1/100秒
COMMAND:啟動命令
演示:top命令

 

htop命令:

選項:
    -d #: 指定延遲時間間隔;
    -u UserName: 僅顯示指定用戶的進程;
    -s COLUME:以指定字段進行排序;
子命令:
    l: 顯示選定的進程打開的文件列表;
    s:跟蹤選定的進程的系統調用;
    t:以層級關系顯示各進程狀態;
    a: 將選定的進程綁定至某指定的CPU核心;

 

vmstat命令:
- Report virtual memory statistics報告虛擬內存的統計數據

  vmstat [options] [delay [count]]
  ~]# vmstat 2 3   每2秒鍾顯示一次,共3次
  選項:
  -s:顯示內存統計數據

procs:
    r:running;等待運行的進程個數;CPU上等待運行的任務隊列長度;實時的值;
    b:處於不可中斷睡眠態的進程個數;被阻塞的任務隊列的長度;
        注意:
            a隊列長期大於系統CPU的個數,說明CPU不足,需要增加CPU;
            b隊列太長,代表等待I/O很大,I/O能力不佳;
memory:
    swpd:交換內存使用總量;
    free:空閑的物理內存總量;
    buffer:用於buffer的內存總量;緩沖
    cache:用於cache內存總量;緩存
    注意:
        swpd值很大時,代表當前物理內存太少,對於服務器來講能不使用交換內存最好;
swap:
    si:數據進入swap中的數據速率(kb/s)
    so:數據離開swap中的數據速率(kb/s)
    注意:
        si,so很大時,物理內存不夠用;如果si很大,換出so很少時,表示目前目前不是很嚴重;
io:
    bi:從塊設備讀入數據到系統的速率(kb/s)    
    bo:保存數據至塊設備的速率(kb/s)
    注意:
        bi,bo很大時,只能說讀寫很大,並不能判斷性能問題;
system:
    in:interrupts,中斷速率;
    cs:context switch,上下文切換的速率

    注意:
        cs一旦達到上萬個,說明需要運行的進程太多,cpu性能需要提高;
cpu 
    us: user space
    sy:system
    id:idle
    wa:wait 
    st: stolen

 

pmap命令:
- report memory map of a process

pmap [options] pid [...]
    -x :顯示詳細格式的信息;

    另一種查看
        cat /proc/PID/maps

 

 

glances命令:類似於top,htop
- A cross-platform curses-based monitoring tool

需要配置好epel源安裝,由於監控系統可以實現遠程數據采集,這里就不過多敘述;

內建命令:
a  Sort processes automatically     l  Show/hide logs
c  Sort processes by CPU%           b  Bytes or bits for network I/O
m  Sort processes by MEM%           w  Delete warning logs
p  Sort processes by name           x  Delete warning and critical logs
i  Sort processes by I/O rate       1  Global CPU or per-CPU stats
d  Show/hide disk I/O stats         h  Show/hide this help screen
f  Show/hide file system stats      t  View network I/O as combination
n  Show/hide network stats          u  View cumulative network I/O
s  Show/hide sensors stats          q  Quit (Esc and Ctrl-C also work)
y  Show/hide hddtemp stats

    
常用選項:
    -b:以Byte為單位顯示網上數據速率;
    -d:關閉磁盤I/O模塊;
    -m:關閉mount模塊;
    -n:關閉network模塊;
    -t #:刷新時間間隔;
    -1:每個cpu的相關數據單獨顯示;
    -o {HTML|CSV}:輸出格式;
    -f  /PATH/TO/SOMEDIR:設定輸出文件的位置;

C/S模式下運行glances命令:
    服務模式:
        glances  -s  -B  IPADDR
        
        IPADDR:本機的某地址,用於監聽;
        
    客戶端模式:
        glances  -c  IPADDR
        
        IPADDR:是遠程服務器的地址;
glances命令

 

dstat命令:
- versatile tool for generating system resource statistics
資源系統統計數據的工具,基於python集合vmstat\top\iostat\ss等多種命令

dstat [-afv] [options..] [delay [count]]

常用選項:
    -c, --cpu:顯示cpu相關信息;
        -C #,#,...,total
    -d, --disk:顯示磁盤的相關信息
        -D sda,sdb,...,tobal
    -l: 顯示負載
    -g:顯示page相關的速率數據;
    -m:Memory的相關統計數據
    -n:Interface的相關統計數據;
    -p:顯示process的相關統計數據;
    -r:顯示io請求的相關的統計數據;
    -s:顯示swapped的相關統計數據;
    
    --tcp:顯示tcp連接狀態
    --udp:顯示udp連接狀態信息
    --raw:raw套接字狀態信息
    --socket: 套接字狀態信息
    
    --ipc:ipc狀態信息
    
    --top-cpu:顯示最占用CPU的進程;
    --top-cpu-adv:(incl. pid and other stats)
    --top-io:最占用io的進程;
    --top-io-adv:(incl. pid and other stats)
    --top-mem:最占用內存的進程;
    --top-lantency:延遲最大的進程;

 

kill命令
- terminate a process用於向進程發送信號,以實現對進程的管理;

顯示當前系統可用信號:
    kill -l [signal]
    
    每個信號的標識方法有三種:
        1) 信號的數字標識;
        2) 信號的完整名稱;
        3) 信號的簡寫名稱;
        
向進程發信號:
    kill  [-s signal|-SIGNAL]  pid...
    
    常用信號:
        1) SIGHUP:無須關閉進程而讓其重讀配置文件;
        2)SIGINT:終止正在運行的進程,相當於Ctrl+c
        9)SIGKILL:殺死運行中的進程;
        15)SIGTERM:終止運行中的進程;
        18)SIGCONT:
        19)SIGSTOP:

killall命令:

- kill processes by name

  kill [-SIGNAL] program

Linux系統作業控制

  • 前台作業(foregroud):通過終端啟動,且啟動后會一直占終端;
  • 后台作業(backgroud):可以通過終端啟動,但啟動后即轉入后台運行(釋放終端)
如何讓作業運行於后台?
    (1)運行中的作業
        Ctrl+z 
        注意:送往后台后,作業會轉為停止態;
    (2)尚未啟動的作業
        # COMMAND &

        注意:此類作業雖然被送往后台,但其依然與終端相關;終端終止,與終端相關的進程也會終止;如果希望把送往后台的作業剝離與終端的關系:
            # nohup COMMAND &

查看所有的作業:
    # jobs

可實現作業控制的常用命令:
    # fg [[%]JOB_NUM] :把指定的作業調回前台;
    # bg [[%]JOB_NUM] :讓送往后台的作業在后台繼續運行;
    # kill %JOB_NUM  :終止指定的作業;

調整進程優先級

可通過nice值調整的優先級范圍:100-139  分別對應於:-20,19

進程啟動時,其Nice值默認為0,尤其優先級是120;

nice命令:

以指定的nice值啟動並運行命令
    nice [OPTION] [COMMANDE [ARGU]...]
        選項:
            -n NICE
    注意:僅管理員可以調低nice值;

 

renice命令:調整運行中的nice值

 # renice [-n]  NICE PID...

查看Nice值和優先級:  ps axo pid,ni,priority,comm

[root@centos7 ~]# ps axo pid,ni,priority,comm | head -5
   PID  NI PRI COMMAND
     1   0  20 systemd
     2   0  20 kthreadd
     3   0  20 ksoftirqd/0
     5 -20   0 kworker/0:0H

 

 

 

 

 

轉載請注明出處:http://www.cnblogs.com/jasperhsu/p/5080289.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM