1. 程式人生 > >Linux學習命令匯總十一——Linux進程管理、作業控制及進程命令詳解

Linux學習命令匯總十一——Linux進程管理、作業控制及進程命令詳解

ps top vmstat dmstat 進程管理

本章Blog相關Linux知識點


進程(process):進程是程序的執行實例,即運行中的程序,也是程序的副本;程序放置於磁盤中,而進程放置於內存中;進程的啟動及調度均是由內核發起的。init是所有進程的父進程,而子進程是由fork()進程生成。

線程(Thread):一個進程至少包括一個線程,通常將該線程稱為主線程,所以線程是比進程更小的單位,是系統分配處理器時間資源的基本單元。一個進程要想同時在多顆CPU上運行,必須得分成互不影響的多個執行流,而後每組單獨在各自所分配的CPU上運行,這種分化後的執行流且有著比進程更小資源分配單位稱之為線程。

程序(Program):程序只是一個普通文件,是一個機器代碼指令和數據的集合,這些指令和數據存儲在磁盤上的一個可執行映象(Executable Image)中,所以,程序是一個靜態的實體。

進程優先級0-139 :

實時優先級:0-99 ,數字越大,優先級越高

靜態優先級:100-139,數字越小,優先級越高

進程nice值:

指靜態優先級,降低優先級
取值範圍:-20—19;-20對用100,19對用139

進程類型:守護進程、用戶進程

守護進程:系統啟動時運行的進程,類似windows上的開機進程(開機任務),跟終端無關

用戶進程:用戶通過終端啟動的進程,也可以叫前臺進程,需要註意的是,也可以把前臺進程送往後臺,以守護模式運行。

進程狀態:

運行態:running ,正在運行的進程就是當前進程(由current所指向的進程),而準備運行的進程只要得到CPU就可以立即投入運行,CPU是這些進程唯一等待的系統資源。系統中有一個運行隊列(run_queue),用來容納所有處於可運行狀態的進程,調度程序執行時,從中選擇一個進程投入運行。

等待態:waiting,處於該狀態的進程正在等待某個事件(event)或某個資源,它肯定位於系統中的某個等待隊列(wait_queue)中。Linux中處於等待狀態的進程分為兩種:可中斷的等待狀態和不可中斷的等待狀態。處於可中斷等待態的進程可以被信號喚醒,如果收到信號,該進程就從等待狀態進入可運行狀態,並且加入到運行隊列中,等待被調度;而處於不可中斷等待態的進程是因為硬件環境不能滿足而等待。

睡眠態:sleeping,可中斷睡眠(interruptable)、不可中斷睡眠(uninterruptable)

停止態:stop ,不會被調度 stopped ,此時的進程暫時停止運行來接受某種特殊處理。通常當進程接收到SIGSTOP、SIGTSTP、SIGTTIN或 SIGTTOU信號後就處於這種狀態。例如,正接受調試的進程就處於這種狀態。

僵死態:zombie,系統調用,終止進程的信息也還沒有回收。顧名思義,處於該狀態的進程就是死進程,這種進程實際上是系統中的垃圾,必須進行相應處理以釋放其占用的資源。

linux運行終端:通過命令 #tty 查看

串行終端,串行端口終端(Serial Port Terminal)是使用計算機串行端口連接的終端設備,通常使用/dev/ttys/#表示

物理終端,如/dev/console

虛擬終端,Linux中提供的虛擬終端默認有6個,其中第1個是圖形界面,第2到6個則是字符界面。可以通過Ctrl+Alt+F(1~6)組合鍵在不同的虛擬終端之間進行切換,Ctrl+Alt+F7啟動圖形界面(先啟動圖形功能#startx) ,如/dev/tty/#

偽終端(模擬終端),我們通常都是通過網絡遠程對Linux服務器進行管理,這種通過遠程登錄方式所打開的終端稱為偽終端(pts)。比如我們通過Xshell遠程登錄到Linux系統,如:/dev/pts/1
特殊命令組合功能:

Ctrl +c 取消當前程序

Shift +Pageup/Pagedown 翻屏查看命令界面之前的數


進程管理命令:pstree,ps,pgrep,top,htop,vmstat,dstat


# pstree [-a] [-c] [-h|-Hpid] [-l] [-n] [-p] [-u] [-Z] [-A|-G|-U] [pid|user] 查看進程樹命令

pstree -V

-a 顯示進程詳細信息

-p 顯示進程及進程號

[root@PXE ~]# pstree -a
init
  ├─crond
  ├─dbus-daemon --system
  ├─dhcpd -user dhcpd -group dhcpd
  ├─hald
  │   ├─hald-runner
  │   │   ├─hald-addon-acpi
  │   │   └─hald-addon-inpu
  │   └─{hald}
  ├─ntpd -u ntp:ntp -p /var/run/ntpd.pid -g
  ├─sshd
  │   ├─sshd 
  │   │   └─bash
  │   └─sshd 
  │       └─bash
  │           └─pstree -a
  ├─udevd -d
  │   ├─udevd -d
  │   └─udevd -d
  └─xinetd -stayalive -pidfile /var/run/xinetd.pid
[root@PXE ~]# pstree -p
init(1)─┬─crond(1212)
        ├─dbus-daemon(1064)
        ├─dhcpd(1202)
        ├─hald(1096)─┬─hald-runner(1097)─┬─hald-addon-acpi(1141)
        │            │                   └─hald-addon-inpu(1129)
        │            └─{hald}(1098)
        ├─ntpd(1186)
        ├─sshd(1165)─┬─sshd(1249)───bash(1254)
        │            └─sshd(5379)───bash(5384)───pstree(5508)
        ├─udevd(415)─┬─udevd(1247)
        │            └─udevd(1248)
        └─xinetd(1177)

# ps [options] :顯示當前進程狀態

a 顯示所有與終端相關的進程

x 顯示所有與終端無關的進程

u 顯示所有的用戶

-H:顯示進程的層次信息

-F:顯示額外信息

-o :要顯示的字段,自定義顯示格式 例# ps -axo PID,COMMAND

常用選項

aux 顯示所有進程的所有信息

-ef 顯示所有進程的所有信息

-eHF 顯示所有進程的額外信息及進程層次關系

[root@PXE ~]# ps au
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root       1232  0.0  0.0   4064   544 tty1     Ss+  18:53   0:00 /sbin/mingetty /dev/tty1
root       1234  0.0  0.0   4064   544 tty2     Ss+  18:53   0:00 /sbin/mingetty /dev/tty2
...
[root@PXE ~]# ps aux 
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.0  19364  1560 ?        Ss   18:52   0:01 /sbin/init
...
root       5566  0.0  0.0 110252  1136 pts/1    R+   22:22   0:00 ps aux

#各選項含義:
USER:顯示運行此進程的用戶
PID: 進程ID號
%CPU:當前進程運行時長占據總CPU時長的百分比
%MEM:當前進程使用內存占據總內存的百分比
VSZ: 虛擬內存集,即當前進程使用的內存加上共享庫大小
RSS: 常駐內存集,當前進程常駐內存的大小,即不能被交換出去的空間大小
TTY: 當前進程所關聯的終端
STAT:進程狀態
S:睡眠
D:不可中斷睡眠(crond守護進程)
R:運行
T:停止
Z:僵死
s:session leader(會話領導者)
l:多線程進程
+:前臺進程
N:低優先級進程
<:高優先級進程
START:進程啟動時間
TIME: 當前進程真正占據CPU的時間,而不是掛表時鐘
COMMAND:當前進程是由哪個命令發起的

[root@PXE ~]# ps -ef
UID         PID   PPID  C STIME TTY          TIME CMD
root          1      0  0 18:52 ?        00:00:01 /sbin/init
root          2      0  0 18:52 ?        00:00:00 [kthreadd]
root          3      2  0 18:52 ?        00:00:00 [migration/0]

[root@PXE ~]# ps -eHF
F S UID         PID   PPID  C PRI  NI ADDR SZ WCHAN    RSS PSR STIME TTY          TIME CMD
4 S root          1      0  0  80   0 -  4841 poll_s  1560   1 18:52 ?        00:00:01 /sbin/init
1 S root          2      0  0  80   0 -     0 kthrea     0   0 18:52 ?        00:00:00 [kthreadd]
1 S root          3      2  0 -40   - -     0 migrat     0   0 18:52 ?        00:00:00 [migration/0]
...
[root@PXE ~]# ps axo user,pid,command    # 顯示指定的字段 user,pid,command
USER        PID COMMAND
root          1 /sbin/init
root          2 [kthreadd]
root          3 [migration/0]
...

#各選項含義:
F:當前進程的標誌位(flags),4為管理員
S:當前進程的狀態
PID:當前進程ID號
PPID:父進程ID號
C:使用時間占據CPU百分比
PRI:當前優先級
NI:當前進程的nice值
ADDR:kernel function,指出該程序在內存的那個部分。如果是個 running的程序,一般就是 "-"
SZ:使用掉內存大小
WCHAN:當前程序是否在運行中,"-"表示running
RSS:常駐內存集
PSR:當前進程被分配給哪個處理器
STIME:當前進程啟動時間
TTY:當前進程所關聯的終端
TIME:累計在CPU上運行的時間
COMMAND:當前進程是由哪個命令發起的

# pgrep [-flvx] [-d delimiter] [-n|-o] [-P ppid,...] [-g pgrp,...] 只顯示符合條件的進程號 例: # pgrep bash 顯示bash進程的進程號

[-s sid,...] [-u euid,...] [-U uid,...] [-G gid,...]
[-t term,...] [pattern]

-f:僅顯示與進程匹配的名字

-o:僅顯示找到的最小(起始)進程號

-n:僅顯示找到的最大(結束)進程號

-l:顯示進程名稱與進程pid

-P:指定父進程號

-g:指定進程組

-t:指定開啟進程的終端

-u:指定進程的有效用戶ID

[root@PXE ~]# pgrep bash   # 顯示bash進程的進程號
1254
5384
[root@PXE ~]# pgrep named   # 顯示named進程的進程號
1297
[root@PXE ~]# pgrep -u named   # 顯示用戶為named的進程號
1297 
[root@PXE ~]# pgrep -l ntpd  # 顯示進程名稱與進程pid
2230 ntpd


# pidof [-s] [-c] [-x] [-o omitpid] [-o omitpid..] program [program..] 顯示運行程序的進程ID

[root@PXE ~]# pidof sshd   # 查找sshd進程的id號
1371 1244 1166
[root@PXE ~]# pidof -s sshd    # 查找sshd進程的id號,但只顯示一個
1371



# top -hv | -abcHimMsS -d delay -n iterations -p pid [, pid ...] 查看系統進程

-d #:指定延遲時長,單位是秒
-b:以批處理模式操作
-n #:在批模式下,共顯示多少批

-p pid:顯示進程號為pid的進程

top 命令下交互命令,下列按鍵代表不同的功能:

M:按內存占用百分比排序

P :按cpu占用百分比排序

T :按照累積占用cpu時間長度排序

1鍵 是否顯示各個cpu信息,輸入1鍵關閉多個cpu顯示,在輸入1鍵又打開多個cpu顯示,如此循環

m鍵 是否顯示內存信息,輸入m鍵關閉內存信息顯示,在輸入m鍵又打開內存信息顯示,如此循環

t鍵 是否顯示cpu和進程的統計信息,輸入t鍵關閉cpu和進程的統計信息,在輸入t鍵又打開cpu和進程的統計信息,如此循環

l鍵 是否顯示負載信息,輸入l鍵關閉負載信息,在輸入l鍵又打開負載信息,如此循環

s鍵 輸入時間,調整top刷新時間間隔

k鍵 輸入進程id,中止某一個進程

q鍵 退出top命令界面

[root@PXE ~]# top -d 10 -p 1   #顯示pid為1的進程且10s刷新一次
top - 23:02:22 up  4:09,  1 user,  load average: 0.00, 0.00, 0.00
Tasks:   1 total,   0 running,   1 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0%us,  0.1%sy,  0.0%ni, 99.7%id,  0.2%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   1941304k total,   506252k used,  1435052k free,    40000k buffers
Swap:  4194300k total,        0k used,  4194300k free,   300940k cached

   PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                              
     1 root      20   0 19364 1560 1248 S  0.0  0.1   0:01.41 init                                                                                  
[root@PXE ~]# top -b -d 3 -n 2   #3秒刷新一次,批次顯示,顯示2批次後退出top
top - 23:27:46 up  4:34,  1 user,  load average: 0.00, 0.00, 0.00
Tasks: 100 total,   1 running,  99 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0%us,  0.1%sy,  0.0%ni, 99.7%id,  0.1%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   1941304k total,   506540k used,  1434764k free,    40036k buffers
Swap:  4194300k total,        0k used,  4194300k free,   300948k cached

   PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                               
     1 root      20   0 19364 1560 1248 S  0.0  0.1   0:01.41 init                                                                                  
     2 root      20   0     0    0    0 S  0.0  0.0   0:00.01 kthreadd                                                                              
     3 root      RT   0     0    0    0 S  0.0  0.0   0:00.01 migration/0                                                                           
     4 root      20   0     0    0    0 S  0.0  0.0   0:00.01 ksoftirqd/0  
top - 23:27:49 up  4:35,  1 user,  load average: 0.00, 0.00, 0.00
Tasks: 100 total,   1 running,  99 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0%us,  0.2%sy,  0.0%ni, 99.8%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   1941304k total,   506572k used,  1434732k free,    40036k buffers
Swap:  4194300k total,        0k used,  4194300k free,   300948k cached

   PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                               
  5379 root      20   0  100m 4528 3496 S  0.3  0.2   0:00.55 sshd                                                                                  
     1 root      20   0 19364 1560 1248 S  0.0  0.1   0:01.41 init                                                                                  
     2 root      20   0     0    0    0 S  0.0  0.0   0:00.01 kthreadd                                                                              
     3 root      RT   0     0    0    0 S  0.0  0.0   0:00.01 migration/0   
...    
#註:
top - 05:37:06(當前時間) up  5:46(系統運行時長),  4 users(用戶數),  load average: 0.00, 0.00, 0.00 (等待運行的隊列長度,平均負載,1分鐘,5分鐘和15分鐘)
Tasks: 106 total(總進程數),   1 running(運行), 105 sleeping(睡眠),   0 stopped(停止),   0 zombie(僵死)
Cpu(s):  0.0%us(userspace用戶空間占用百分比),  0.0%sy(system),  0.0%ni(被nice值調整的),  0.0%id(idle空閑 ),  0.0%wa(wait等待),  0.0%hi(hardware 硬中斷占據時間),  0.0%si(軟中斷),  0.0%st (被偷走的)
Mem:   1906492k total(總內存大小),   352428k used(使用內存),  1554064k free(空閑內存),    26424k buffers(buffer內存)
Swap:  4095996k total(總swap內存大小),   0k used,  4095996k free,   180828k cached (緩存大小)
    PID:進程id號
    USER:進程所有者的用戶名
    PR:進程優先級
    NI:nice值
    VIRT:進程使用的虛擬內存總量 
    RES:進程使用的、未被換出的物理內存大小
    SHR:共享內存大小
    S:進程狀態,包括R運行,S睡眠,T停止,D不可中斷進程,Z僵死進程
    %CPU:上次更新到現在的CPU時間占用百分比
    %MEM:進程使用的物理內存百分比
    TIME+:進程使用的CPU時間總計


# htop [-dChusv] 查看系統進程,為top功能的升級版

-d:設置刷新時間,單位為秒;

-C:設置界面為無顏色;

-u:顯示指定用戶的進程;

-s:對指定列進行排序顯示;

技術分享圖片

F1:顯示幫助信息;

U:取消所有選中的進程;

s:顯示光標所在進程執行的系統調用;

l:顯示光標所在進程的文件列表;

a:綁定進程到指定的CPU;

u:顯示指定用戶的進程;

M:按照內存使用百分比排序,對應MEM%列;

P:按照CPU使用百分比排序,對應CPU%列;

T:按照進程運行的時間排序,對應TIME+列;

K:隱藏內核線程;

H:隱藏用戶線程;

#:快速定位光標到PID所指定的進程上。

技術分享圖片


# vmstat [-a] [-n] [-t] [-S unit] [delay [ count]] 顯示虛擬內存信息

vmstat [-s] [-n] [-S unit]

vmstat [-m] [-n] [delay [ count]]

vmstat [-d] [-n] [delay [ count]]

vmstat [-p disk partition] [-n] [delay [ count]]

vmstat [-f]vmstat [-V]

例:#vmastat 1 3 每個1秒鐘並顯示3次

-s 顯示內存統計信息

-d 顯示磁盤統計信息

[root@PXE ~]# vmstat -a
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0 1465856  41000 306400    0    0     6     2    7    9  0  0 100  0  0    
[root@PXE ~]# vmstat -d   #顯示硬盤統計信息
disk- ------------reads------------ ------------writes----------- -----IO------
       total merged sectors      ms  total merged sectors      ms    cur    sec
sda    14325   4702  680386   75203   3061  30380  267544   44943      0     69
dm-0   12436      0  374954  119300  18277      0  146216  235270      0     50
dm-1    1352      0   15826   16179     54      0     432      94      0      1
dm-2    3929      0  278258   20775  15101      0  120808 3140282      0     17
dm-3     197      0    1570     656      3      0      24       2      0      0
[root@PXE ~]# vmstat -s     #顯示內存統計信息
      1941304  total memory
       475448  used memory
       217052  active memory
       143012  inactive memory
 ...
       407750 interrupts
       518106 CPU context switches
   1527877269 boot time
         6474 forks
#註:
FIELD DESCRIPTION FOR VM MODE
   Procs
       r: The number of processes waiting for run time.
       b: The number of processes in uninterruptible sleep.

   Memory
       swpd: the amount of virtual memory used.
       free: the amount of idle memory.
       buff: the amount of memory used as buffers.
       cache: the amount of memory used as cache.
       inact: the amount of inactive memory. (-a option)
       active: the amount of active memory. (-a option)

   Swap
       si: Amount of memory swapped in from disk (/s).
       so: Amount of memory swapped to disk (/s).

   IO
       bi: Blocks received from a block device (blocks/s).
       bo: Blocks sent to a block device (blocks/s).

   System
       in: The number of interrupts per second, including the clock.
       cs: The number of context switches per second.

   CPU
       These are percentages of total CPU time.
       us: Time spent running non-kernel code. (user time, including nice time)
       sy: Time spent running kernel code. (system time)
       id: Time spent idle. Prior to Linux 2.5.41, this includes IO-wait time.
       wa: Time spent waiting for IO. Prior to Linux 2.5.41, included in idle.
       st: Time stolen from a virtual machine. Prior to Linux 2.6.11, unknown.

FIELD DESCRIPTION FOR DISK MODE
   Reads
       total: Total reads completed successfully
       merged: grouped reads (resulting in one I/O)
       sectors: Sectors read successfully
       ms: milliseconds spent reading

   Writes
       total: Total writes completed successfully
       merged: grouped writes (resulting in one I/O)
       sectors: Sectors written successfully
       ms: milliseconds spent writing

   IO
       cur: I/O in progress
       s: seconds spent for I/O


# dstat [-afv] [options..] [delay [count]] dstat 是一個可以取代vmstat,iostat,netstat和ifstat這些命令的多功能工具,是一個全能系統信息統計工具

-a :相當於-cdngy

-l :顯示負載統計量

-m :顯示內存使用率(包括used,buffer,cache,free值)

-r :顯示I/O統計

-s :顯示交換分區使用情況

-t :將當前時間顯示在第一行

–fs :顯示文件系統統計數據(包括文件總數量和inodes值)

–nocolor :不顯示顏色(有時候有用)

–socket :顯示網絡統計數據

-–tcp :顯示常用的TCP統計

-–udp :顯示監聽的UDP接口及其當前用量的一些動態數據

-–disk-util :顯示某一時間磁盤的忙碌狀況

-–freespace :顯示當前磁盤空間使用率

-–proc-count :顯示正在運行的程序數量

-–top-bio :指出塊I/O最大的進程

-–top-cpu :圖形化顯示CPU占用最大的進程

-–top-io :顯示正常I/O最大的進程

-–top-mem :顯示占用最多內存的進程

技術分享圖片


# kill [-s signal|-p] [--] pid... 用於實現向其他進程發送信息

kill -l 顯示可用的信號

常用格式:

# kill -n 進程id , 例:#kill -9 36901

# kill -SIG[name] 進程id , 例: # kill -SIGKILL 36901

# kill -[name] 進程id , 例:# kill -KILL 36901

[root@PXE ~]# kill -l  #顯示所有信號列表
 1) SIGHUP     2) SIGINT     3) SIGQUIT     4) SIGILL     5) SIGTRAP
 6) SIGABRT     7) SIGBUS     8) SIGFPE     9) SIGKILL    10) SIGUSR1
11) SIGSEGV    12) SIGUSR2    13) SIGPIPE    14) SIGALRM    15) SIGTERM
16) SIGSTKFLT    17) SIGCHLD    18) SIGCONT    19) SIGSTOP    20) SIGTSTP
21) SIGTTIN    22) SIGTTOU    23) SIGURG    24) SIGXCPU    25) SIGXFSZ
26) SIGVTALRM    27) SIGPROF    28) SIGWINCH    29) SIGIO    30) SIGPWR
31) SIGSYS    34) SIGRTMIN    35) SIGRTMIN+1    36) SIGRTMIN+2    37) SIGRTMIN+3
38) SIGRTMIN+4    39) SIGRTMIN+5    40) SIGRTMIN+6    41) SIGRTMIN+7    42) SIGRTMIN+8
43) SIGRTMIN+9    44) SIGRTMIN+10    45) SIGRTMIN+11    46) SIGRTMIN+12    47) SIGRTMIN+13
48) SIGRTMIN+14    49) SIGRTMIN+15    50) SIGRTMAX-14    51) SIGRTMAX-13    52) SIGRTMAX-12
53) SIGRTMAX-11    54) SIGRTMAX-10    55) SIGRTMAX-9    56) SIGRTMAX-8    57) SIGRTMAX-7
58) SIGRTMAX-6    59) SIGRTMAX-5    60) SIGRTMAX-4    61) SIGRTMAX-3    62) SIGRTMAX-2
63) SIGRTMAX-1    64) SIGRTMAX    
#註:
1信號SIGHUP:通知程序重讀配置文件,而不用重啟程序,相當於reload
2信號SIGINT:相當於Ctrl+c功能,結束運行的任務
9信號SIGKILL:殺死進程
15信號SIGTERM:終止進程 ,默認信號為15
[root@PXE ~]# ps aux | grep ntpd
ntp        5904  0.0  0.1  30744  2152 ?        Ss   08:37   0:00 ntpd -u ntp:ntp -p /var/run/ntpd.pid -g
root       7161  0.0  0.0 103276   848 pts/1    S+   14:52   0:00 grep ntpd
[root@PXE ~]# kill -9 5904   # 通過數字信號強制終止ntp 進程 
[root@PXE ~]# ps aux | grep dhcpd
dhcpd      1202  0.0  0.2  48208  4084 ?        Ss   02:21   0:00 /usr/sbin/dhcpd -user dhcpd -group dhcpd
root       7165  0.0  0.0 103272   840 pts/1    S+   14:59   0:00 grep dhcpd
[root@PXE ~]# kill -KILL 1202   # 通過信號名稱強制終止ntp 進程 
[root@PXE ~]# ps aux | grep xinetd
root       1177  0.0  0.0  21716   988 ?        Ss   02:21   0:00 xinetd -stayalive -pidfile /var/run/xinetd.pid
root       7183  0.0  0.0 103272   840 pts/1    S+   15:02   0:00 grep xinetd
[root@PXE ~]# kill -SIGKILL 1177    # 通過信號全名強制終止ntp 進程


# pkill [-signal] [-fvx] [-n|-o] [-P ppid,...] [-g pgrp,...] # 基於名稱或其它屬性來查找進程,性能與killall類似

[-s sid,...] [-u euid,...] [-U uid,...] [-G gid,...]
[-t term,...] [pattern]

# killall [-Z,--context pattern] [-e,--exact] [-g,--process-group] [-i,--interactive] [-q,--quiet] [-r,--regexp] 通過名字殺死某些進程
[-s,--signal signal] [-u,--user user] [-v,--verbose] [-w,--wait] [-I,--ignore-case] [-V,--version] [--] name ...
killall -l

# killall -SIGNAL name 殺死name應用

[root@PXE ~]# ps aux | grep named 
named      1308  0.0  0.7 216872 15280 ?        Ssl  17:07   0:00 named -u named
root       1696  0.0  0.0 103276   844 pts/0    S+   18:03   0:00 grep named
[root@PXE ~]# pkill named      #結束named進程
[root@PXE ~]# ps aux | grep named
root       1700  0.0  0.0 103272   844 pts/0    S+   18:03   0:00 grep named
[root@PXE ~]# ps aux | grep dhcpd
dhcpd      1203  0.0  0.1  48208  3588 ?        Ss   16:53   0:00 /usr/sbin/dhcpd -user dhcpd -group dhcpd
root       1707  0.0  0.0 103276   848 pts/0    S+   18:05   0:00 grep dhcpd
[root@PXE ~]# killall dhcpd     #結束dhcpd程序進程
[root@PXE ~]# ps aux | grep dhcpd
root       1710  0.0  0.0 103272   844 pts/0    S+   18:07   0:00 grep dhcpd


Linux的作業控制及nice值調整


Linux作業控制:

前臺作業:占據著一個終端

後臺作業:作業執行時不占據終端,作業啟動後就釋放終端、

非守護進程類的程序,啟動以後都在前臺工作

如果已經啟動:前臺-->後臺。ctrl+z把前臺作業送往後臺,作業被”停止“

如果尚未啟動:# COMMAND &

退出當前會話,作業也會終止,因為作業與當前終端相關,如果把作業送往後臺後,不期望作業隨終止結束而停止
# nohup COMMAND &

如何讓送往後臺的作業繼續執行:

# fg [%]作業號碼:將作業調回前臺繼續進行

# bg [%]作業號碼:讓作業在調整為優先啟動

終止作業:默認的為最後一個進入後臺的任務

# kill %作業號碼:終止作業

查看作業號:
# jobs

[root@PXE ~]# top &    #把作業送往後臺
[1] 1907
[root@PXE ~]# vi /etc/init.d/xinetd   # 使用 crtl +z 把進程由前臺轉為後臺
^Z
[2]+  Stopped      vim /etc/init.d/xinetd
[root@PXE ~]# find /var  -print
^Z
[root@PXE ~]# jobs
[1]   Stopped                 top
[2]-  Stopped                 vim /etc/init.d/xinetd
[3]+  Stopped                 find /var -print
[root@PXE ~]# bg %2    #把2號後臺任務調為優先啟動
[2] vim /etc/init.d/xinetd &
[root@PXE ~]# jobs
[1]-  Stopped                 top
[2]+  Stopped                 vim /etc/init.d/xinetd
[3]   Stopped                 find /var -print
[root@www ~]# fg      # 默認取出那個 + 的工作,亦即 [2]。
[root@PXE ~]# fg %1
top
top - 20:08:11 up  3:15,  1 user,  load average: 0.00, 0.00, 0.00
Tasks: 100 total,   1 running,  98 sleeping,   1 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
Mem:   1941304k total,   313784k used,  1627520k free,    60920k buffers
Swap:  4194300k total,        0k used,  4194300k free,   145412k cached

   PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                       
     1 root      20   0 19364 1556 1248 S  0.0  0.1   0:01.08 init                                                                           
     2 root      20   0     0    0    0 S  0.0  0.0   0:00.01 kthreadd                                                                       
     3 root      RT   0     0    0    0 S  0.0  0.0   0:00.09 migration/0                                                                    
     4 root      20   0     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/0                                                                    
     5 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 stopper/0                                                                      
     6 root      RT   0     0    0    0 S  0.0  0.0   0:00.01 watchdog/0                                                                     
     7 root      RT   0     0    0    0 S  0.0  0.0   0:00.31 migration/1    
[root@www ~]# jobs     #查看作業號
[3]+  Stopped                 find /var -print
[root@PXE ~]# kill %3       #終止3號作業

[3]+  Stopped                 find /var -print
[root@PXE ~]# jobs
[3]+  Terminated              find /var -print
[root@PXE ~]# jobs     # 3號作業已終止
[root@PXE ~]# nohup top &    #把進程調入後臺執行
[1] 2426


# renice [-n] priority [[-p] pid ...] [[-g] pgrp ...] [[-u] user ...] 調整運行中進程的優先級

renice -h | -v

# nice [OPTION] [COMMAND [ARG]...] 以預先定義的nice優先級啟動進程

[root@PXE ~]# ps axo ni,pid,command | grep bash    # 只顯示pid,nice值以及command 
  0   1967 -bash
  0   2041 -bash
  0   2091 grep bash
[root@PXE ~]# renice -5 2041       # 調整nice值為-10
2041: old priority 0, new priority -5
[root@PXE ~]# ps axo ni,pid,command | grep bash   # 2041進程nice值變為了-5
  0   1967 -bash
 -5   2041 -bash
 -5   2096 grep bash
[root@PXE ~]# nice -n 1 ntpd   #對於未啟用的ntp進程調整nice值,增加1
[root@PXE ~]# ntpd          
[root@PXE ~]# ps axo pid,ni,command | grep ntpd   #查看ntp進程nice值 ,變為-4
  2230  -4 ntpd
  2247  -5 grep ntpd


本章blog知識點匯總


# pstree [-a|-p] 查看進程樹命令

# ps aux 查看當前進程狀態

# ps ef 顯示所有進程的所有信息

# ps axo pid,ni,command 只顯示進程的pid,nice值,command

# pgrep pattern 只顯示符合pattern的進程

# pidof pattern 顯示運行程序的進程ID

# top 查看系統進程

# top -d delay -n iterations -p pid [, pid ...] 查看系統進程

# htop 查看系統進程,為top功能的升級版

# vmstat [delay [ count]] 顯示虛擬內存信息

# dstat [delay [count]] dstat 是一個可以取代vmstat,iostat,netstat和ifstat這些命令的多功能工具,是一個全能系統信息統計工具

# kill [-s signal|-p] [--] pid... 用於實現向其他進程發送信息

# pkill [-signal] [-fvx] [-n|-o] [-P ppid,...] [-g pgrp,...] # 基於名稱或其它屬性來查找進程,性能與killall類似

# killall -SIGNAL name 殺死name應用

# COMMAND & 把作業送往後臺

# fg [%]作業號碼:將作業調回前臺繼續進行

# bg [%]作業號碼:讓作業在後臺調整為優先執行

# kill %作業號碼:終止作業

# jobs 查看作業號

# renice [-n] priority [[-p] pid ...] [[-g] pgrp ...] [[-u] user ...] 調整運行中進程的優先級

# nice [OPTION] [COMMAND [ARG]...] #以預先的優先級啟動進程


Linux學習命令匯總十一——Linux進程管理、作業控制及進程命令詳解