進程管理

Process Manager


  • 工作管理 

    • jobs

    • ctrl+z,&

    • bg,fg

    • nohup

  • 進程,資源管理 

    • 查看:pstree,ps,top,vmstat,pmap

    • 查詢:pgrep,pidof,fuser,lsof

    • 管理:kill,nice,renice

  • 管理軟件or命令 

    • htop

    • glances

    • dstat

  • 任務計劃 

    • at

    • crontab

  • 額外常用的命令和工具 

    • iostat

    • sar 

    • iftop


工作管理

什么是工作管理? 
工作管理(job control)能夠有效的管理當前bash前景與背景中的工作,眾所周知,一個終端只能同時進行一個工作,那如果我想多個工作同時進行怎么辦,那就要用到所謂的工作管理的方法。

工作管理有什么用? 
將前景中的程序放到背景中暫定或運行,使得一個終端可以同時進行多項工作。

jobs:顯示當前bash背景中所有的工作與狀態

jobs [-l] [%job_id] :顯示當前所有工作或指定的工作。

-l:顯示PID

[root@xiao ~]# jobs
[1]   Stopped                 man ftp
[2]-  Stopped                 ping 192.168.0.1
[3]+  Stopped                 vim a

[JOB_ID]mark status  jobs_name

JOB_ID:工作的ID,以時間向上遞增,數字越小,表示越早放入背景。
mark:標識進程順序,'+'為當前工作,'-'為上一個工作,空為前兩個之前的工作。
status:工作的狀態,runing表示在背景中運行,stopped表示在背景中停止。
jobs_name:被放入背景中的工作內容或指令。

ctrl+z:將程序暫停并放入當前bash的背景中。

[root@xiao ~]# ping 192.168.0.1
PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data.
^Z
[4]+  Stopped                 ping 192.168.0.1

&:將程序放入當前bash的背景中執行。

[root@xiao ~]# ping 192.168.0.1 &

bg:將背景中的工作狀態變更為running。

bg [%jobs_id]

bg:將背景中的工作放回前景中執行。

fg [%jobs_id]


假設我們現在將一個工作丟入背景中去執行,然后我們就退出了當前終端,我們背景中的工作還會繼續執行么?NO,因為我們其實使用ctrl+z或者&都只是將工作丟入當前終端的背景中,那如果我們想要把工作丟入系統背景中改怎么辦,那就來看看nohup這個命令。

nohup:將工作丟入系統背景中,離線管理。

nohup [command] [&]

nohup ping 192.168.0.1       在前景中工作
nohup ping 192.168.0.1 &     在背景中工作

ps.由于是在系統前景背景中執行,所以所有輸出都與當前終端無關,系統就會將輸出信息保存在當前目錄下nohup.out這個文件中。

進程,資源管理

什么是進程? 
進程(process)是程序運行時的一個對程序的一個copy,是一個程序的實例,存在自己的生命周期,即進程運行開始和進程結束。

進程有什么功能? 
能夠讓操作系統更加有效,有序的管理,使用計算機資源。

pstree:顯示進程樹

pstree [option] [pid | user]

    -a:all
   -p:顯示PID
   ...

   [root@xiao ~]# pstree -p
   systemd(1)─┬─AliHids(1012)─┬─{AliHids}(1013)
      │               ├─{AliHids}(1014)
      │               ├─{AliHids}(1016)
      │               ├─{AliHids}(1017)
      │               ├─{AliHids}(1018)
      │               ├─{AliHids}(1020)

       ...

   ps.可以看出我的系統是centos6還是7呢?看第一個程序systemd就知道啦~,centos7啦!

ps:顯示當前進程的快照信息。

ps [options]

a:以BSD風格顯示當前終端的進程信息。       注意BSD風格是不帶-的哦!
u:以BSD風格顯示當前用戶的進程信息。
x:以BSD風格顯示與當前終端無關的信息。

-e:顯示所有進程信息。
-l:顯示長信息。
-f:顯示全框架擴展信息。
-h:以樹狀顯示。

常用用法:
   ps aux
   ps -elf
   ps -eh
   ...

字段含義:
[root@xiao ~]# ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.3  41076  3532 ?        Ss   15:57   0:01 /usr/lib/systemd/systemd --switched-root --s
root         2  0.0  0.0      0     0 ?        S    15:57   0:00 [kthreadd]
root         3  0.0  0.0      0     0 ?        S    15:57   0:00 [ksoftirqd/0]
root         5  0.0  0.0      0     0 ?        S<   15:57   0:00 [kworker/0:0H]

USER:進程的屬主
PID:PID號
%CPU:占用的當前CPU百分比
%MEM:占用的當前內存百分比
VSZ:虛擬內存大小。
RSS TTY:常駐內存集大小,無法被交換的內存空間。
STAT:進程狀態
   S:sleep,可中斷睡眠。
   D:不可中斷睡眠。
   R:running,運行中。
   T:stop,停止的。
   Z:zombie,僵尸程序。
   N:NICE,低優先級。
   <:高優先級。
   l:多線程進程。
   s:是多個進程的首進程。
   +:前臺進程組進程。
START:被觸發的時間
TIME:實際占用的CPU運行時間
COMMAND:觸發的命令

top:動態顯示當前系統狀態及進程信息。

top [option]

-d #:#秒刷新一次。
-b:以批次刷新。
-n:刷新的次數。
-p:指定某一個PID單獨檢測。

top是一個以交互界面為主的監控當前系統資源,進程狀態的工具。 **

交互命令:
   P:按照使用的CPU百分比排序。
   M:按照占用內存的百分比排序。
   T:按照實際占用的CPU時間和排序。
   N:按照PID排序。
   1:顯示第一顆CPU核心信息
       ...
   k:按下k之后輸入一個PID,然后輸入信號傳遞執行。
   r:按下r之后輸入一個PID,然后輸入nice值設置。
   q:quit
   ...

字段含義:
top - 21:05:05 up  5:07,  2 users,  load average: 0.00, 0.01, 0.05
Tasks:  96 total,   1 running,  95 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.3 st
KiB Mem :  1015476 total,   829448 free,    39864 used,   146164 buff/cache
KiB Swap:        0 total,        0 free,        0 used.   838364 avail Mem

PID     USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                                  
25      root      20   0       0      0      0 S  0.3  0.0   0:01.98 rcuos/0                                  

LINE1:
   21:05:05:系統當前時間。
   up  5:07:系統已經運行了多久。
   2 users:有幾個用戶在線。
   load average: 0.00, 0.01, 0.05  :CPU平均負載,1分鐘,5分鐘,15分鐘。
LINE2:
   Tasks:  96 total:進程總數
   1 running:運行數量
   95 sleeping:睡眠數量  
   0 stopped:停止數量  
   0 zombie:僵尸數量
LINE3:
   0.0 us:用戶空間占用CPU百分比  
   0.0 sy:內核空間占用CPU百分比  
   0.0 ni:更改過NICE值得進程所占用CPU百分比
   99.7 id:空閑的CPU百分比  
   0.0 wa:IO等待所占用的CPU百分比  
   0.0 hi:硬中斷所占用的CPU百分比      
   0.0 si:軟中斷所占用的CPU百分比  
   0.3 st:虛擬化所占用的CPU百分比
LINE4:
   1015476 total:內存總大小
   829448 free:空閑的內存
   39864 used:被使用的內存
   146164 buff/cache:緩沖/緩存所占用的內存
LINE5:
   0 total:swap數量。
   0 free:swap空閑的數量
   0 used:使用的swap
   838364 avail Mem:真正可用的內存大小
LINE6
LINE7:
   PID:PID號
   USER:進程屬主
   PR:進程優先級
   NI:NICE值
   VIRT:進程使用的虛擬內存總量。
   RES:進程使用的物理內存總量。
   SHR:共享內存大小。
   S:status
   %CPU:占用的當前CPU百分比
   %MEM:占用的當前內存百分比
   TIME:實際占用的CPU運行時間
   COMMAND:觸發的命令

vmstat:顯示當前虛擬內存狀態

vmstat [option] [延遲秒數# 偵測次數#]
   -S [K | M]:單位,KB MB
   ...

字段含義:
[root@xiao ~]# vmstat -S M 1 2
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    810     18    124    0    0     6     1   71  200  0  0 100  0  0
0  0      0    810     18    124    0    0     0     0   90  214  0  1 99  0  0

r:運行中的進程數量
b:不可中斷的進程數量
swpd:內存總量
free:空閑的內存
buff:緩沖區大小
cache:緩存區大小
si:swap in
so:swap out
bi:block in
bo:block out
in:系統終端次數
cs:系統事件切換次數
us:用戶空間
sy:系統空間
id:cpu空閑
wa:IO讀取占用CPU百分比
st:虛擬化占用CPU百分比

pmap:顯示虛擬內存與物理地址空間的對應關系

pmap [PID]

[root@xiao ~]# pmap 1
1:   /usr/lib/systemd/systemd --switched-root --system --deserialize 21
00007f81aafbe000     16K r-x-- libuuid.so.1.3.0
00007f81aafc2000   2044K ----- libuuid.so.1.3.0
00007f81ab1c1000      4K r---- libuuid.so.1.3.0
00007f81ab1c2000      4K rw--- libuuid.so.1.3.0
00007f81ab1c3000    224K r-x-- libblkid.so.1.1.0
00007f81ab1fb000   2048K ----- libblkid.so.1.1.0
00007f81ab3fb000     12K r---- libblkid.so.1.1.0

pgrep:根據進程名查詢進程PID

pgrep [-l 顯示PID和P—NAME] [process_name]

pidof:根據進程名查詢進程PID,類似pgrep

pidof [process_name]

fuser:根據文件查詢PID

fuser [PATH]

lsof:列出當前系統所打開的文件

lsof [option] 
-u username : username 
-g giu : gid 


kill:傳遞一個信號給指定進程。

kill [-signal] [PID]

常用信號: 
   SIGHUP    1        終端線路掛斷
   SIGINT    2        鍵盤輸入的中斷命令,從終端輸入 Ctrl-C 時發生
   SIGKILL    9        KILL信號
   SIGTERM    15        正常結束

ps.具體的信號可參考  man signal  命令

nice:為一個進程設置nice值,只能將nice值向比較大的數字設置,無法設置-#。

nice -n # COMMAND

renice:為一個進程設置nice值,隨意設置,需要#權限。

renice # PID

管理軟件or命令 *

Linux中,對比TOP這些古老又經典的工具,還有有許多非常方便的軟件可以供我們使用來監控管理系統,下面我們就來認識一下吧。

htop:交互式的查看進程信息,top的增強版

htop [option]

-d:更新頻率。
-u:指定username
-p:指定pid

交互命令:

P:以CPU占用百分比排序。
M:以MEM占用百分比排序。
T:按實際占用的CPU運行時間的和來排序。
F1:打開幫助菜單。
F2:打開設置界面。
F3:按照PID或者USER字段查詢,刪除字段,需 ctrl+backspace。
F4:按照PID或者USER字段過濾,刪除字段,需 ctrl+backspace。
F5:以樹狀顯示進程。
F6:按照選擇的字段排序。
F7:減小NICE值。
F8:加上NICE值。
F9:選定指定進程,傳遞選擇的信號。
F10:退出,quit。

glances:一個跨平臺的基于多視窗的監測工具

glances [option]

-t:指定刷新頻率。
-s:啟動service模式。
-c:啟動client模式。
-P:指定service IP

交互命令:

a:自動排序。
c:CPU占用百分比排序。
m:MEM占用百分比排序。
p:進程名排序。
i:I/O速率,比例排序。
d:顯示/隱藏 磁盤I/O狀況。
f:顯示/隱藏 文件系統狀況。
n:顯示/隱藏 網絡狀況。
s:顯示/隱藏    sensors狀況。
y:顯示/隱藏 hddtemp狀況。
z:隱藏/顯示 process 列表
l:顯示/隱藏 日志。
b:切換網絡 bits和Bytes 的單位顯示
w:刪除警告日志信息。
x:刪除警告和重要日志信息。
1:全局CPU或者每顆CPU的信息。
t:顯示網絡的組合I/O信息。
u:顯示積累的網絡I/O信息。
h:help
q:quit

dstat:生成系統資源統計工具

dstat [options] [刷新頻率 [次數]]

-c [-C {cpu1,cpu2,total}...]:顯示CPU信息與每顆的CPU核心信息。
-d [-D {sda,sdb,total}...]:顯示磁盤與指定的磁盤信息。
-s [-S {swap1,swap2,total}...]:顯示磁盤與指定的磁盤信息。
-m:menmory信息。
-n:network信息。
-p:process信息。
-r:I/O信息。
-s:system的信息,中斷與事件交換。

任務計劃

任務計劃是什么? 
當我們要指定計算機在某一時刻執行某一任務就需要用到任務計劃了。 
任務計劃的功能? 
使系統在指定的時間執行指定的程序。

比如說我們想要在晚上11點發一封郵件給某人,或者定時每天晚上10點備份文件,那就要用到接下來的命令了!

at:單一任務計劃設置

at [option] [TIME]

-l:列出當前所有計劃。
-d [id]:刪除計劃。
-m:無論有沒有輸出都發一封郵件到用戶郵箱。
-c [id]:列出任務要執行的詳細指令內容

時間格式:

HH:MM YYYY-MM-DD       04:30 2016-05-30
[HH:MM YYYY-MM-DD,now]+[NUMBER# [minutes|hours|days|weeks]]  
   now+1day  
   4:00+2hour  
   5:00 2016-06-31+1hour

寫入執行指令的方式:

1.直接在at的交互界面中寫入,然后ctrl+d退出即可。
   [root@xiao ~]# at 5:00 2016-06-30+1 hour
   at> cat /etc/passwd
   at> <EOT>    按下ctrl+d
   job 18 at Thu Jun 30 06:00:00 2016
2.通過管道傳輸。
   [root@aliyun ~]# echo "cat /etc/passwd" | at 5:00 2016-06-30+1 hour
   job 19 at Thu Jun 30 06:00:00 2016
3.通過輸入重定向(stdin).
   [root@aliyun ~]# at 5:00 2016-06-30+1 hour < a.sh
   job 20 at Thu Jun 30 06:00:00 2016

我們知道at只能設置一次任務計劃,也就是說我們如果想要在每次的同一個時段執行一個命令,是無法完成的,所以,如果我們想要安排循環例行執行的任務計劃就要使用接下來這個命令。。

crontab:設置循環例行任務計劃

crontab [options] [-e]

    -u [username]:只有管理員才能使用,為指定用戶設置任務計劃。
   -l:查詢crontab的工作內容。
   -r:移除所有的crontab的工作內容。
   -i:刪除時先要確認。
   -e:編輯crontab的工作內容。

   [m] [h] [d] [m] [week] username command

時間格式:

*:所有的值。
13,5:指定多個值。
1-5:指定范圍內的所有值。

/#:時間間隔, /2表示每兩個小時。

crontab是怎么實現的呢?

cratab

crontab的文件

/etc/crontab:存放了crontab的系統設定檔案,以及root的任務計劃。
/etc/cron.d/*:存放了自我開發軟體的系統設定檔案和各自的任務計劃。
   以上的設定檔中其中設定了使用的shell ,可執行文件的PATH路徑信息,郵件發送給哪個用戶。
/var/spool/cron/USERNAME:存放了用戶的任務計劃檔案。

額外常用的命令和工具

iostat:監控系統設備的io狀況

iostat [options] [刷新頻率[刷新次數]]

    -d:輸出磁盤的io狀況。
   -p [device]:指定磁盤。
   -c:輸出cpu使用狀況。
   -x:輸出擴展信息    
   -t:輸出搜集數據時的時間

sar:系統活動情況報告

sar [option] [刷新頻率[刷新次數]]

    -u:輸出CPU使用情況的統計信息
   -v:輸出inode、文件和其他內核表的統計信息
   -d:輸出每一個塊設備的活動信息
   -r:輸出內存和交換空間的統計信息
   -b:顯示I/O和傳送速率的統計信息
   -a:文件讀寫情況
   -c:輸出進程統計信息,每秒創建的進程數
   -R:輸出內存頁面的統計信息
   -y:終端設備活動情況
   -w:輸出系統交換活動信息
   -n {DEV|EDEV|NFS|NFSD|SOCK|ALL}:輸出指定的網絡信息

iftop:監測網卡實時流量,反向解析IP,顯示端口信息。

iftop [option]

    -i [device]:指定監測的設備
   -B:單位為Byte
   -n:主機信息直接顯示ip
   -N:端口信息直接顯示端口號
   -F IP_ADDR/MASK:監測特定網絡的流量

原創文章,作者:Net18_肖肖,如若轉載,請注明出處:http://www.www58058.com/14350

(0)
Net18_肖肖Net18_肖肖
上一篇 2016-04-11 15:29
下一篇 2016-04-11

相關推薦

  • Linux基礎知識之腳本初級編程

    1.編程語言的分類:機器語言,匯編語言,高級語言     高級語言:         靜態語言:編譯型語言 在程序執行之前就會編譯成機器代碼(完全轉化完成)       &nbsp…

    Linux干貨 2016-08-15
  • LV+M

    1、查看分區情況: 2、創建sdc分區,并且更改分區類型為8e  3、同樣步驟2操作,創建sdd分區 4、創建物理卷pv: 5、查看當前系統的物理卷: 6、創建卷組vg: 7、查看當前系統的卷組: 8、創建邏輯卷lv: 9、查看當前系統的邏輯卷: 10、創建文件系統ext4: 11、創建目錄/mnt/lv1并且掛載: 12、擴展物理卷: 13、擴展…

    Linux干貨 2016-09-19
  • 源碼編譯安裝dropbear

    tar -jxf dropbear-2013.58.tar.bz2 cd dropbear-2013.58 ./configure make PROGRAMS=”dropbear dbclient dropbearkey dropbearconvert scp” make PROGRAMS=”dropbear dbclie…

    Linux干貨 2017-10-21
  • Linux 終端類型

      1、 什么是終端     終端就是用戶與主機進行交互的一種介質(方式),可以是虛擬的,也可以是實體的。   2、 終端種類       (1)控制臺終端(/dev/console):在Linux系統中,計算機顯示器通常被稱為控制臺終端。Console與虛擬終端相關聯…

    Linux干貨 2016-10-19
  • 6、vim編輯和查找和特殊權限

    http://note.youdao.com/yws/public/redirect/share?id=dd29f6f6ad717181cdd6d01bbf8db554&type=false

    Linux干貨 2016-08-08
  • Hadoop Hive與Hbase整合+thrift

    1.  簡介 Hive是基于Hadoop的一個數據倉庫工具,可以將結構化的數據文件映射為一張數據庫表,并提供完整的sql查詢功能,可以將sql語句轉換為MapReduce任務進行運行。 其優點是學習成本低,可以通過類SQL語句快速實現簡單的MapReduce統計,不必開發專門的MapReduce應用,十分適合數據倉庫的統計分析。 Hive與HBas…

    Linux干貨 2015-04-13
欧美性久久久久