偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Linux基礎(chǔ)命令介紹九:進(jìn)程與內(nèi)存

系統(tǒng) Linux
計(jì)算機(jī)存在的目的就是為了運(yùn)行各種各樣的程序,迄今我們介紹的絕大多數(shù)命令,都是為了完成某種計(jì)算而用編程語言編寫的程序,它們以文件的形式保存在操作系統(tǒng)之中(比如/bin下的各種命令);但靜態(tài)的程序并不能“自發(fā)的”產(chǎn)生結(jié)果,只有在操作系統(tǒng)中為其指定輸入數(shù)據(jù)并運(yùn)行起來,才能得到輸出結(jié)果。而操作系統(tǒng)中程序運(yùn)行的最主要表現(xiàn)形式便是進(jìn)程。

計(jì)算機(jī)存在的目的就是為了運(yùn)行各種各樣的程序,迄今我們介紹的絕大多數(shù)命令,都是為了完成某種計(jì)算而用編程語言編寫的程序,它們以文件的形式保存在操作系統(tǒng)之中(比如/bin下的各種命令);但靜態(tài)的程序并不能“自發(fā)的”產(chǎn)生結(jié)果,只有在操作系統(tǒng)中為其指定輸入數(shù)據(jù)并運(yùn)行起來,才能得到輸出結(jié)果。而操作系統(tǒng)中程序運(yùn)行的最主要表現(xiàn)形式便是進(jìn)程。

[[179650]]

靜態(tài)程序可以長久的存在,動(dòng)態(tài)的進(jìn)程具有有限的生命周期。每次程序運(yùn)行的開始(如鍵入一條命令后按下回車鍵),操作系統(tǒng)都要為程序的運(yùn)行準(zhǔn)備各種資源,這些資源絕大多數(shù)都處于內(nèi)存之中。為了限制多用戶進(jìn)程的權(quán)限,linux還定義了兩種進(jìn)程運(yùn)行時(shí)態(tài):內(nèi)核態(tài)和用戶態(tài);當(dāng)進(jìn)程想要請求系統(tǒng)服務(wù)時(shí)(比如操作一個(gè)物理設(shè)備),必須通過系統(tǒng)調(diào)用(操作系統(tǒng)提供給用戶空間的接口函數(shù))來實(shí)現(xiàn),此時(shí)系統(tǒng)切換到內(nèi)核態(tài),代表程序執(zhí)行該系統(tǒng)調(diào)用,執(zhí)行完畢后系統(tǒng)切換回用戶態(tài),繼續(xù)執(zhí)行程序代碼。

本文介紹linux中關(guān)于進(jìn)程與內(nèi)存的管理命令(更多的是查看命令)

1、uptime 系統(tǒng)運(yùn)行時(shí)間

  1. uptime [options] 

單獨(dú)執(zhí)行此命令時(shí),輸出信息表示:當(dāng)前時(shí)間,系統(tǒng)運(yùn)行時(shí)長,登錄用戶個(gè)數(shù),系統(tǒng)過去1、5、15分鐘內(nèi)的平均負(fù)載。

  1. [root@centos7 ~]# uptime 
  2.  10:46:38 up 58 days, 19:20,  3 users,  load average: 0.00, 0.01, 0.05  

2、ps 顯示系統(tǒng)進(jìn)程信息

  1. ps [options] 

單獨(dú)運(yùn)行ps命令時(shí)顯示信息為:進(jìn)程ID號(PID)、終端(TTY)、運(yùn)行累積CPU時(shí)長(TIME)、命令名(CMD)

  1. [root@centos7 ~]# ps 
  2.   PID TTY          TIME CMD 
  3.  9503 pts/1    00:00:00 bash 
  4.  9570 pts/1    00:00:00 ps  

這里簡要敘述一下關(guān)于進(jìn)程、進(jìn)程組、會(huì)話和終端的關(guān)系。linux操作系統(tǒng)為了方便管理進(jìn)程,將功能相近或存在父子、兄弟關(guān)系的進(jìn)程歸為一組,每個(gè)進(jìn)程必定屬于一個(gè)進(jìn)程組,也只能屬于一個(gè)進(jìn)程組。一個(gè)進(jìn)程除了有進(jìn)程ID外,還有一個(gè)進(jìn)程組ID(PGID);每個(gè)進(jìn)程組都有一個(gè)進(jìn)程組組長,它的PID和進(jìn)程組ID相同。像一系列相關(guān)進(jìn)程可以合并為進(jìn)程組一樣,一系列進(jìn)程組也可以合并成一個(gè)會(huì)話session。會(huì)話是由其中的進(jìn)程建立的,該進(jìn)程叫做會(huì)話的首進(jìn)程(session leader)。會(huì)話首進(jìn)程的PID即為此會(huì)話的SID(session ID)。每個(gè)會(huì)話都起始于用戶登錄,終止于用戶退出。會(huì)話中的每個(gè)進(jìn)程組稱為一個(gè)工作(job)。會(huì)話可以有一個(gè)進(jìn)程組成為會(huì)話的前臺工作(foreground),而其他的進(jìn)程組是后臺工作(background)。每個(gè)會(huì)話都關(guān)聯(lián)到一個(gè)控制終端control terminal,當(dāng)會(huì)話終止時(shí)(用戶退出終端),系統(tǒng)會(huì)發(fā)送終止信號(SIGHUP)給會(huì)話中的所有進(jìn)程組,進(jìn)程對此信號的默認(rèn)處理方式為終止進(jìn)程。

ps接受三種格式的選項(xiàng),帶前綴符號-的UNIX格式的選項(xiàng);不帶前綴的BSD風(fēng)格的選項(xiàng);帶兩個(gè)-的GNU長格式選項(xiàng)。三種類型的選項(xiàng)可以自由組合,但可能會(huì)出現(xiàn)沖突。

選項(xiàng)a(BSD)表示顯示所有和終端關(guān)聯(lián)的進(jìn)程信息,當(dāng)配合選項(xiàng)x(BSD)一起使用時(shí)表示顯示所有進(jìn)程信息(此時(shí)終端無關(guān)的進(jìn)程TTY列顯示為?)。

選項(xiàng)-a(UNIX)表示顯示與終端關(guān)聯(lián)的除了會(huì)話首進(jìn)程之外的進(jìn)程信息。選項(xiàng)-e表示所有進(jìn)程。

  1. [root@centos7 ~]# ps a 
  2.   PID TTY      STAT   TIME COMMAND 
  3.  2528 tty1     Ss+    0:00 -bash 
  4.  9336 pts/0    Ss     0:00 -bash 
  5.  9503 pts/1    Ss     0:00 -bash 
  6.  9550 pts/2    Ss+    0:00 -bash 
  7.  9571 pts/0    S+     0:00 man ps 
  8.  9582 pts/0    S+     0:00 less -s 
  9.  9643 pts/1    R+     0:00 ps a 
  10. [root@centos7 ~]# ps -a 
  11.   PID TTY          TIME CMD 
  12.  9571 pts/0    00:00:00 man 
  13.  9582 pts/0    00:00:00 less 
  14.  9644 pts/1    00:00:00 ps  

如例子中所示,BSD風(fēng)格的選項(xiàng)還會(huì)顯示進(jìn)程的狀態(tài)信息以及命令的參數(shù)。進(jìn)程在運(yùn)行的過程當(dāng)中可能處于的狀態(tài)包括:

  1. D 不可中斷的睡眠狀態(tài)(通常在等待IO) 
  2. R 正在運(yùn)行或可以運(yùn)行(在運(yùn)行隊(duì)列中) 
  3. S 可中斷的睡眠狀態(tài)(等待一個(gè)事件完成) 
  4. T 暫停狀態(tài) 
  5. t 跟蹤狀態(tài) 
  6. W 換頁狀態(tài)(2.6內(nèi)核以后版本) 
  7. X 死亡狀態(tài)(不可見) 
  8. Z 僵死狀態(tài) 
  9. #BSD風(fēng)格的選項(xiàng)STAT列還可能包括以下字符 
  10. < 高優(yōu)先級進(jìn)程 
  11. N 低優(yōu)先級進(jìn)程 
  12. L 鎖定狀態(tài) 
  13. s 會(huì)話首進(jìn)程 
  14. l 多線程進(jìn)程 
  15. + 進(jìn)程處于前臺進(jìn)程組  

選項(xiàng)u顯示用戶導(dǎo)向的進(jìn)程信息(如進(jìn)程的發(fā)起用戶,用戶態(tài)占用CPU和MEM百分比等)

  1. [root@centos7 ~]# ps au 
  2. USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND 
  3. root      2528  0.0  0.0 115636  2384 tty1     Ss+  9月30   0:00 -bash 
  4. root      9336  0.0  0.0 115596  2240 pts/0    Ss   08:44   0:00 -bash 
  5. root      9571  0.0  0.0 119196  1972 pts/0    S+   10:59   0:00 man ps 
  6. root      9582  0.0  0.0 110276   980 pts/0    S+   10:59   0:00 less -s 
  7. root      9835  0.0  0.0 115636  2172 pts/1    Ss   13:48   0:00 -bash 
  8. root      9938  0.0  0.0 115512  2096 pts/2    Ss   14:49   0:00 -bash 
  9. root      9960  0.0  0.0 154068  5632 pts/2    S+   14:50   0:00 vim others.sh 
  10. root      9967  0.0  0.0 139496  1640 pts/1    R+   14:59   0:00 ps au  

VSZ表示占用的總的地址空間大小。它包括了沒有映射到內(nèi)存中的頁面。

RSS表示實(shí)際駐留"在內(nèi)存中"的內(nèi)存大小,不包括交換出去的內(nèi)存。和VSZ的單位均為KB

通常查看所有進(jìn)程信息會(huì)使用命令ps -ef或ps aux

選項(xiàng)-o或o表示指定輸出格式

如顯示所有bash進(jìn)程的pid,命令名,運(yùn)行于哪顆邏輯cpu:

  1. [root@centos7 ~]# ps -eo pid,comm,psr|grep bash 
  2.  2528 bash              1 
  3.  9336 bash              4 
  4.  9835 bash              3 
  5.  9938 bash              6  

配合選項(xiàng)--sort可指定按某一列排序輸出

  1. #表示按用戶名排序 
  2. ps -eo pid,user,args --sort user  

還可以用-o指定許多其他信息,請查詢相關(guān)手冊。

3、kill 終止進(jìn)程

  1. kill [options] pid... 

命令kill會(huì)發(fā)送特定的信號給指定的進(jìn)程或進(jìn)程組,如果沒有指定信號,則發(fā)送TERM信號

選項(xiàng)-l表示列出所有支持的信號: 

  1. [root@centos7 ~]# kill -l 
  2.  1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL       5) SIGTRAP 
  3.  6) SIGABRT      7) SIGBUS       8) SIGFPE       9) SIGKILL     10) SIGUSR1 
  4. 11) SIGSEGV     12) SIGUSR2     13) SIGPIPE     14) SIGALRM     15) SIGTERM 
  5. 16) SIGSTKFLT   17) SIGCHLD     18) SIGCONT     19) SIGSTOP     20) SIGTSTP 
  6. 21) SIGTTIN     22) SIGTTOU     23) SIGURG      24) SIGXCPU     25) SIGXFSZ 
  7. 26) SIGVTALRM   27) SIGPROF     28) SIGWINCH    29) SIGIO       30) SIGPWR 
  8. 31) SIGSYS      34) SIGRTMIN    35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3 
  9. 38) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8 
  10. 43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13 
  11. 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12 
  12. 53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7 
  13. 58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2 
  14. 63) SIGRTMAX-1  64) SIGRTMAX 
  15. [root@centos7 ~]#   

可以使用選項(xiàng)-s指定要發(fā)送的信號

如在一個(gè)終端啟動(dòng)進(jìn)程sleep 300,在另一個(gè)終端查看并使用信號SIGKILL將其終止:

  1. [root@centos7 ~]# sleep 300 
  2. #此時(shí)會(huì)一直等待sleep執(zhí)行完畢 
  3. #在另一個(gè)終端中 
  4. [root@centos7 temp]# ps -ef|grep [s]leep 
  5. root     10359  9835  0 12:05 pts/1    00:00:00 sleep 300 
  6. #發(fā)送信號 
  7. [root@centos7 temp]# kill -s SIGKILL 10359 
  8. #原終端顯示 
  9. [root@centos7 ~]# sleep 300 
  10. 已殺死 
  11. [root@centos7 ~]#   

或者執(zhí)行命令kill -9 10359是同樣的效果。關(guān)于其他信號的作用,請自行搜索。

4、pgrep和pkill 搜索或者發(fā)送信號給進(jìn)程

  1. pgrep [options] pattern 
  2. pkill [options] pattern  

這里的pattern是正則表達(dá)式,用來匹配進(jìn)程名

如查看名稱為gunicorn的所有進(jìn)程

  1. [root@centos7 ~]# pgrep gunicorn 
  2. 17268 
  3. 17286 
  4. 17289 
  5. 17290 
  6. 17293  

選項(xiàng)-l顯示進(jìn)程名和pid

  1. [root@centos7 ~]# pgrep -l gun 
  2. 17268 gunicorn 
  3. 17286 gunicorn 
  4. 17289 gunicorn 
  5. 17290 gunicorn 
  6. 17293 gunicorn  

如終止所有sleep進(jìn)程

  1. pkill sleep 

如使syslogd重讀它的配置文件

  1. pkill -HUP syslogd 

5、top 顯示進(jìn)程信息

top命令實(shí)時(shí)動(dòng)態(tài)的顯示系統(tǒng)匯總信息和進(jìn)程狀態(tài)信息,它每隔1s刷新一次,按鍵盤q鍵退出。

單獨(dú)執(zhí)行top命令時(shí)顯示如下輸出:

  1. top - 03:20:02 up 59 days, 17:30,  3 users,  load average: 0.00, 0.01, 0.05 
  2. Tasks: 184 total,   1 running, 183 sleeping,   0 stopped,   0 zombie 
  3. %Cpu(s):  0.1 us,  0.0 sy,  0.0 ni, 99.9 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st 
  4. KiB Mem :  8010720 total,  5100308 free,   420652 used,  2489760 buff/cache 
  5. KiB Swap:  8257532 total,  8257532 free,        0 used.  6905944 avail Mem  
  6.  
  7.   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND 
  8.     1 root      20   0  193664   8708   2396 S   0.0  0.1   1:23.98 systemd 
  9.     2 root      20   0       0      0      0 S   0.0  0.0   0:00.44 kthreadd 
  10.     3 root      20   0       0      0      0 S   0.0  0.0   0:00.10 ksoftirqd/0 
  11.     5 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/0:0H 
  12.     7 root      rt   0       0      0      0 S   0.0  0.0   0:00.34 migration/0 
  13.     8 root      20   0       0      0      0 S   0.0  0.0   0:00.00 rcu_bh 
  14.     9 root      20   0       0      0      0 S   0.0  0.0   0:00.00 rcuob/0 
  15.    10 root      20   0       0      0      0 S   0.0  0.0   0:00.00 rcuob/1  

下面分別對每行輸出內(nèi)容進(jìn)行解釋(注:top版本為3.3.10,其他版本的輸出第四行和第五行可能不同)

***行顯示信息和命令uptime的輸出一致;

第二行顯示任務(wù)匯總信息,狀態(tài)即為進(jìn)程可能狀態(tài)中的四種;

第三行顯示cpu負(fù)載信息,其中us表示用戶態(tài)任務(wù)占用CPU時(shí)間百分比,sy表示內(nèi)核態(tài)任務(wù)占用CPU時(shí)間百分比,ni表示改變過進(jìn)程優(yōu)先級的進(jìn)程(通過nice或renice命令)占用CPU時(shí)間百分比,id表示CPU空閑時(shí)間百分比,wa表示等待輸入輸出的進(jìn)程占用CPU時(shí)間百分比,hi表示硬件中斷花費(fèi)時(shí)間,si表示軟件中斷花費(fèi)時(shí)間,st表示虛擬機(jī)等待真實(shí)物理機(jī)CPU資源的時(shí)間

第四行顯示內(nèi)存信息,total表示總內(nèi)存,free表示未分配內(nèi)存,used表示使用的內(nèi)存(值為total-free-buff/cache的結(jié)果),buff/cache表示緩存內(nèi)存;

第五行顯示交換分區(qū)使用量,其中avail Mem表示啟動(dòng)一個(gè)新程序時(shí)可以分配給它的***內(nèi)存,和第三行free列不同的地方在于,它會(huì)統(tǒng)計(jì)可以被回收的緩存分配器(slab)和頁高速緩沖存儲(chǔ)器(page cache)中的內(nèi)存。(在一些較早的top實(shí)現(xiàn)中,并沒有這一列的值)

接下來經(jīng)過一個(gè)空行之后,顯示的是進(jìn)程相關(guān)信息,表頭各列字段和ps命令的輸出均有相對應(yīng)的關(guān)系,其中PR表示優(yōu)先級;NI表示nice值(后述);VIRT表示虛擬內(nèi)存大小,對應(yīng)ps命令中的VSZ;RES表示進(jìn)程常駐內(nèi)存大小,對應(yīng)ps命令中的RSS;SHR表示共享內(nèi)存大小;S表示進(jìn)程狀態(tài),對應(yīng)ps命令的STAT;

linux系統(tǒng)的進(jìn)程狀態(tài)中有一個(gè)優(yōu)先級(priority)的概念,其值是一個(gè)動(dòng)態(tài)變化的整數(shù),范圍是0-139,此值越小,則優(yōu)先級越高,那么它就越優(yōu)先被CPU執(zhí)行。如果top命令PR列顯示為rt,表示此進(jìn)程為實(shí)時(shí)進(jìn)程,它的優(yōu)先級范圍是0-99,比其他的普通進(jìn)程都要高。linux中還有靜態(tài)優(yōu)先級的概念,用戶可以通過使用命令nice和renice對進(jìn)程設(shè)置或改變靜態(tài)優(yōu)先級,它可以看成是動(dòng)態(tài)優(yōu)先級的修正值,能夠影響動(dòng)態(tài)優(yōu)先級的值。

PR列顯示的值為實(shí)際優(yōu)先級減去實(shí)時(shí)進(jìn)程***優(yōu)先級之后的值,3.10內(nèi)核非實(shí)時(shí)進(jìn)程的默認(rèn)值為20,即:DEFAULT_PRIO = MAX_RT_PRIO + 20 = 120

NI列不為0時(shí),表示進(jìn)程被設(shè)置過靜態(tài)優(yōu)先級值,范圍是-20到19,它與當(dāng)前優(yōu)先級值的關(guān)系是:DEFAULT_PRIO = MAX_RT_PRIO + (nice) + 20

如使用nice啟動(dòng)一個(gè)sleep進(jìn)程:

  1. #當(dāng)不使用選項(xiàng)-n指定時(shí),默認(rèn)值為10 
  2. [root@centos7 ~]# nice -n -10 sleep 300 
  3. #對于已存在的進(jìn)程可以使用renice命令調(diào)整其靜態(tài)優(yōu)先級 
  4. [root@centos7 ~]#  
  5. [root@centos7 ~]# ps -eo pri,ni,comm|grep sleep 
  6. 29  -10 sleep 
  7. [root@centos7 ~]# 
  8. [root@centos7 ~]# top -bn1 |egrep 'COMMAND$|sleep$' 
  9.   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND 
  10. 11967 root      10 -10  107892    616    528 S   0.0  0.0   0:00.00 sleep 
  11. #注意這里ps和top優(yōu)先級值顯示的不同,ps命令pri列的值 29 = MAX_PRIO(139) -  MAX_RT_PRIO(100) + nice(-10)。它們實(shí)際的優(yōu)先級值是相等的。  

上例中使用了選項(xiàng)-n表示top刷新次數(shù),-b表示批處理模式運(yùn)行top,此模式會(huì)去掉輸出中的控制字符,方便將輸出交給其他程序處理。

選項(xiàng)-o fieldname按指定列排序輸出,選項(xiàng)-O可以列出-o能夠指定的列名

  1. #自行執(zhí)行命令查看效果 
  2. top -O |tr '\n' ' ' 
  3. top -bn1 -o PR  

下面簡要介紹一些top中可以使用的交互命令:

  1. q 退出top 
  2. h 獲得幫助信息 
  3. 1 顯示每個(gè)邏輯cpu的信息 
  4. k 終止一個(gè)進(jìn)程(會(huì)提示用戶輸入需要終止的pid,以及需要發(fā)送什么樣的信號) 
  5. r 重新設(shè)置進(jìn)程靜態(tài)優(yōu)先級(相當(dāng)于執(zhí)行renice) 
  6. i 忽略閑置和僵死進(jìn)程 
  7. H 顯示線程信息 
  8. M 根據(jù)駐留內(nèi)存大小排序 
  9. P 根據(jù)CPU使用百分比排序 
  10. W 將當(dāng)前設(shè)置寫入~/.toprc文件中  

6、free 顯示系統(tǒng)內(nèi)存使用情況

  1. free [options] 

free命令顯示系統(tǒng)當(dāng)前內(nèi)存、swap(交換分區(qū))的使用情況,默認(rèn)單位是KB

  1. #版本3.3.10 
  2. [root@centos7 ~]# free 
  3.               total        used        free      shared  buff/cache   available 
  4. Mem:        8010720      423060     4540476      375580     3047184     6897052 
  5. Swap:       8257532           0     8257532  

顯示信息和top命令輸出中的對應(yīng)值一致,其中shared表示內(nèi)存文件系統(tǒng)(tmpfs)中使用內(nèi)存的大小。

前面講述了available對應(yīng)值所表示的含義,通常查看系統(tǒng)當(dāng)前還有多少可用內(nèi)存,看available的對應(yīng)值就可以了。這里available = free + 緩存(可被回收部分)。

但在較老版本的free中并沒有這個(gè)值,它的輸出可能是這樣的:

  1.              total       used       free     shared    buffers     cached 
  2. Mem:       8174384    4120488    4053896          0     229320    1041712 
  3. -/+ buffers/cache:    2849456    5324928 
  4. Swap:     16779884          0   16779884  

說明:

buffer(緩沖) 是為了提高內(nèi)存和硬盤(或其他I/O設(shè)備)之間的數(shù)據(jù)交換的速度而設(shè)計(jì)的

cache(緩存) 是為了提高cpu和內(nèi)存之間的數(shù)據(jù)交換速度而設(shè)計(jì)的

所以輸出中buffers可簡單理解為準(zhǔn)備寫入硬盤的緩沖數(shù)據(jù);cached可理解為從硬盤中讀出的緩存數(shù)據(jù)(頁高速緩沖存儲(chǔ)器),緩存中可被回收部分來自cached和slab(緩存分配器)

Mem行:used = total - free此時(shí)的空閑內(nèi)存free列并不能體現(xiàn)系統(tǒng)當(dāng)前可用內(nèi)存大小

-/+ buffers/cache行:used = total - free(Mem) - (buffers + cached),這里的free列和前面所述的available關(guān)系為available = free + 緩存(可被回收部分)

所以當(dāng)沒有available列可查看時(shí),并不能通過free命令查到或計(jì)算出真正可用內(nèi)存,需要知道緩存部分的具體情況。

選項(xiàng)-b、-k、-m、-g分別表示指定各值的單位:bytes, KB, MB, 或者 GB

7、fuser 使用文件或套接字定位進(jìn)程

fuser經(jīng)常用來查看文件被哪些進(jìn)程所使用

  1. [root@centos7 ~]# fuser . 
  2. /root:                2528c 11430c 11447c  

例子表示顯示有三個(gè)進(jìn)程在使用當(dāng)前目錄,其中:2528c 前面數(shù)字表示進(jìn)程PID,后面的字符c表示當(dāng)前目錄(即進(jìn)程在此目錄下工作),還可能出現(xiàn)的字符有:

  1. e 表示進(jìn)程正在運(yùn)行執(zhí)行文件 
  2. f 打開文件,默認(rèn)輸出時(shí)省略 
  3. F 寫方式打開文件,默認(rèn)時(shí)輸出省略 
  4. r 根目錄 
  5. m mmap文件或共享庫文件  

選項(xiàng)-k表示發(fā)送信號SIGKILL給相關(guān)進(jìn)程(謹(jǐn)慎使用)

選項(xiàng)-i表示交互,在kill一個(gè)進(jìn)程之前詢問用戶

選項(xiàng)-l列出支持的信號

選項(xiàng)-SIGNAL指定信號

8、lsof 列出打開文件

在這一篇中我們簡單描述了bash進(jìn)程打開的前三個(gè)文件,并分別關(guān)聯(lián)到文件描述符0,1,2。對于其他進(jìn)程打開的文件也是同樣,系統(tǒng)為每個(gè)進(jìn)程維護(hù)一個(gè)文件描述符表,該表的值都是從0開始的數(shù)字。單獨(dú)執(zhí)行l(wèi)sof命令時(shí)會(huì)顯示系統(tǒng)中所有進(jìn)程打開的文件

  1. #命令版本為4.87 
  2. [root@centos7 temp]# lsof |head 
  3. COMMAND     PID   TID    USER   FD      TYPE             DEVICE  SIZE/OFF       NODE NAME 
  4. systemd       1          root  cwd       DIR              253,0      4096        128 / 
  5. systemd       1          root  rtd       DIR              253,0      4096        128 / 
  6. systemd       1          root  txt       REG              253,0   1489960       6044 /usr/lib/systemd/systemd 
  7. systemd       1          root  mem       REG              253,0     20032  201329002 /usr/lib64/libuuid.so.1.3.0 
  8. systemd       1          root  mem       REG              253,0    252704  201330338 /usr/lib64/libblkid.so.1.1.0 
  9. systemd       1          root  mem       REG              253,0     90632  201328968 /usr/lib64/libz.so.1.2.7 
  10. systemd       1          root  mem       REG              253,0     19888  201329137 /usr/lib64/libattr.so.1.1.0 
  11. systemd       1          root  mem       REG              253,0     19520  201328509 /usr/lib64/libdl-2.17.so 
  12. systemd       1          root  mem       REG              253,0    153192  201328867 /usr/lib64/liblzma.so.5.0.99  

每行一個(gè)打開的文件,表頭各列意為:

  1. COMMAND 進(jìn)程命令名前9個(gè)字符 
  2. PID     進(jìn)程ID 
  3. TID     任務(wù)ID 
  4. FD  1)文件描述符號或者下面字符: 
  5.     cwd 當(dāng)前工作目錄 
  6.     err FD錯(cuò)誤信息 
  7.     ltx 共享庫代碼 
  8.     mem 內(nèi)存映射文件 
  9.     mmap 內(nèi)存映射設(shè)備 
  10.     pd  父目錄 
  11.     rtd 根目錄 
  12.     txt 程序代碼 
  13.     2)當(dāng)是FD(數(shù)字)時(shí),后面可能跟下面權(quán)限字符: 
  14.     r 讀 
  15.     w 寫 
  16.     u 讀寫 
  17.     空格 權(quán)限未知且無鎖定字符 
  18.     - 權(quán)限未知但有鎖定字符 
  19.     3)權(quán)限字符后可能有如下鎖定字符: 
  20.     r 文件部分讀鎖 
  21.     R 整個(gè)文件讀鎖 
  22.     w 文件部分寫鎖 
  23.     W 整個(gè)文件寫鎖 
  24.     u 任意長度讀寫鎖 
  25.     U 未知類型鎖 
  26.     空格 無鎖 
  27. TYPE    類型,可能值為: 
  28.     DIR 目錄 
  29.     REG 普通文件 
  30.     CHR 字符設(shè)備文件 
  31.     BLK 塊設(shè)備文件 
  32.     FIFO 管道文件 
  33.     unix UNIX套接字文件 
  34.     IPv4 IPv4套接字文件 
  35.     .... 
  36. DEVICE  設(shè)備號 
  37. SIZE/OFF 文件大小或偏移量(bytes) 
  38. NODE    文件inode號  

選項(xiàng)-n表示不做ip到主機(jī)名的轉(zhuǎn)換

選項(xiàng)-c string顯示COMMAND列中包含指定字符的進(jìn)程所有打開的文件

選項(xiàng)-u username顯示所屬user進(jìn)程打開的文件

選項(xiàng)-d FD顯示打開的文件描述符為FD的文件

  1. [root@centos7 ~]# lsof -d 4 
  2. COMMAND     PID    USER   FD      TYPE             DEVICE SIZE/OFF      NODE NAME 
  3. systemd       1    root    4u  a_inode                0,9        0      5755 [eventpoll] 
  4. systemd-j   539    root    4u     unix 0xffff880230168f00      0t0     10467 /run/systemd/journal/socket 
  5. systemd-u   549    root    4u     unix 0xffff88003693d640      0t0     12826 /run/udev/control 
  6. lvmetad     555    root    4wW     REG               0,18        4      8539 /run/lvmetad.pid 
  7. auditd      693    root    4w      REG              253,0   701364 208737917 /var/log/audit/audit.log 
  8. ....  

選項(xiàng)+d DIR顯示目錄中被進(jìn)程打開的文件

選項(xiàng)+D DIR遞歸顯示目錄中被進(jìn)程打開的文件

  1. [root@centos7 ~]# lsof +d /root|head -3 
  2. COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF      NODE NAME 
  3. bash     2528 root  cwd    DIR  253,0     4096 201326721 /root 
  4. bash    12902 root  cwd    DIR  253,0     4096 201326721 /root  

選項(xiàng)-i表示顯示符合條件的進(jìn)程打開的文件,格式為[46][protocol][@hostname|hostaddr][:service|port]

  1. #查看22端口運(yùn)行情況 
  2. [root@centos7 ~]# lsof -ni :22 
  3. COMMAND   PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME 
  4. sshd     1358 root    3u  IPv4    8979      0t0  TCP *:ssh (LISTEN) 
  5. sshd     1358 root    4u  IPv6    8981      0t0  TCP *:ssh (LISTEN) 
  6. sshd    12900 root    3u  IPv4 3509687      0t0  TCP 10.0.1.254:ssh->192.168.78.143:57325 (ESTABLISHED) 
  7. #例子,smtp為/etc/services文件中列出服務(wù)中的一種 
  8. [root@centos7 ~]# lsof -ni 4TCP@0.0.0.0:22,smtp   
  9. COMMAND   PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME 
  10. sshd     1358 root    3u  IPv4    8979      0t0  TCP *:ssh (LISTEN) 
  11. master   2162 root   13u  IPv4   16970      0t0  TCP 127.0.0.1:smtp (LISTEN) 
  12. sshd    12900 root    3u  IPv4 3509687      0t0  TCP 10.0.1.254:ssh->192.168.78.143:57325 (ESTABLISHED)  

試想,如果刪除了一個(gè)正在被其他進(jìn)程打開的文件會(huì)怎樣?實(shí)驗(yàn)來看看現(xiàn)象: 

  1. #使用more命令查看一個(gè)文件 
  2. [root@centos7 ~]# more /root/.bash_history 
  3. #在另一個(gè)終端使用lsof查看 
  4. [root@centos7 ~]# lsof|grep ^more 
  5. more      14470          root  cwd       DIR              253,0      4096  201326721 /root 
  6. more      14470          root  rtd       DIR              253,0      4096        128 / 
  7. more      14470          root  txt       REG              253,0     41096  134321844 /usr/bin/more 
  8. more      14470          root  mem       REG              253,0 106065056  134319094 /usr/lib/locale/locale-archive 
  9. more      14470          root  mem       REG              253,0   2107816  201328503 /usr/lib64/libc-2.17.so 
  10. more      14470          root  mem       REG              253,0    174520  201328905 /usr/lib64/libtinfo.so.5.9 
  11. more      14470          root  mem       REG              253,0    164440  225392061 /usr/lib64/ld-2.17.so 
  12. more      14470          root  mem       REG              253,0    272001   67147302 /usr/share/locale/zh_CN/LC_MESSAGES/util-linux.mo 
  13. more      14470          root  mem       REG              253,0     26254  201328839 /usr/lib64/gconv/gconv-modules.cache 
  14. more      14470          root    0u      CHR              136,1       0t0          4 /dev/pts/1 
  15. more      14470          root    1u      CHR              136,1       0t0          4 /dev/pts/1 
  16. more      14470          root    2u      CHR              136,1       0t0          4 /dev/pts/1 
  17. more      14470          root    3r      REG              253,0     17656  202386313 /root/.bash_history 
  18. #刪除這個(gè)文件 
  19. [root@centos7 ~]# rm -f /root/.bash_history 
  20. #查看 
  21. [root@centos7 ~]# lsof -d 3|grep ^more 
  22. more      14470    root    3r      REG              253,0    17656  202386313 /root/.bash_history (deleted) 
  23. [root@centos7 ~]# 
  24. #會(huì)發(fā)現(xiàn)文件列多出了delete的字樣  

linux系統(tǒng)中/proc目錄保存了系統(tǒng)所有進(jìn)程相關(guān)的數(shù)據(jù),里面的數(shù)字目錄名即為PID。我們進(jìn)一步來看一下剛才的more進(jìn)程的文件描述符

  1. [root@centos7 ~]# cat /proc/14470/fd/3 > /root/.bash_history.bak 
  2. #此操作會(huì)將文件描述符3中的內(nèi)容保存至/root/.bash_history.bak 
  3. #停止more進(jìn)程并查看 
  4. [root@centos7 ~]# ls -l /root/.bash_history* 
  5. -rw-r--r-- 1 root root 17656 11月 30 07:47 /root/.bash_history.bak 
  6. [root@centos7 ~]# cat /root/.bash_history.bak 
  7. #會(huì)發(fā)現(xiàn)原文件沒有了,新文件保存了原文件的所有內(nèi)容  

結(jié)論就是,如果在刪除文件的時(shí)候有進(jìn)程正在打開該文件,那么該文件的內(nèi)容還是可以通過進(jìn)程的對應(yīng)文件描述符恢復(fù)的。同時(shí),如果刪除了某文件,發(fā)現(xiàn)空間并沒有釋放,說明有進(jìn)程正在打開該文件(命令lsof|grep delete查看),重新啟動(dòng)該進(jìn)程之后,空間就會(huì)得到釋放。

9、iostat 顯示CPU、I/O統(tǒng)計(jì)信息

  1. [root@centos7 ~]# iostat 
  2. Linux 3.10.0-327.el7.x86_64 (centos7)   2016年11月30日  _x86_64_        (8 CPU) 
  3.  
  4. avg-cpu:  %user   %nice %system %iowait  %steal   %idle 
  5.            0.12    0.00    0.03    0.00    0.00   99.85 
  6.  
  7. Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn 
  8. sda               0.23         0.79         3.05    4178309   16079082 
  9. dm-0              0.22         0.57         2.94    3002207   15480498 
  10. dm-1              0.00         0.00         0.00       1088          0 
  11. dm-2              0.03         0.22         0.11    1146430     596232 
  12. dm-3              0.06         0.01         1.91      28900   10079073 
  13. dm-4              0.03         0.01         1.91      28644   10079073  

顯示信息中cpu部分在命令top的描述中都有相應(yīng)的解釋,I/O部分是各個(gè)設(shè)備讀寫速率及總量信息,其中tps表示每秒多少次I/O請求

選項(xiàng)-c顯示CPU信息

選項(xiàng)-d顯示設(shè)備信息

選項(xiàng)-x顯示更詳細(xì)的信息

命令iostat m n數(shù)字(m,n),m表示時(shí)間間隔,n表示次數(shù);此時(shí)iostat會(huì)每隔m秒打印一次,打印n次。

  1. [root@centos7 ~]# iostat -c 1 3 
  2. Linux 3.10.0-327.el7.x86_64 (centos7)   2016年11月30日  _x86_64_        (8 CPU) 
  3.  
  4. avg-cpu:  %user   %nice %system %iowait  %steal   %idle 
  5.            0.12    0.00    0.03    0.00    0.00   99.85 
  6.  
  7. avg-cpu:  %user   %nice %system %iowait  %steal   %idle 
  8.            0.12    0.00    0.00    0.00    0.00   99.88 
  9.  
  10. avg-cpu:  %user   %nice %system %iowait  %steal   %idle 
  11.            0.12    0.00    0.12    0.00    0.00   99.75  

也可以接設(shè)備名表示查看指定設(shè)備的I/O信息

  1. [root@centos7 ~]# iostat sda 
  2. Linux 3.10.0-327.el7.x86_64 (centos7)   2016年11月30日  _x86_64_        (8 CPU) 
  3.  
  4. avg-cpu:  %user   %nice %system %iowait  %steal   %idle 
  5.            0.12    0.00    0.03    0.00    0.00   99.85 
  6.  
  7. Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn 
  8. sda               0.23         0.79         3.05    4178309   16084862  

10、vmstat 顯示虛擬內(nèi)存統(tǒng)計(jì)信息

  1. vmstat [options] [delay [count]] 

同樣也會(huì)顯示一些CPU和I/O的信息

選項(xiàng)-w格式化輸出

  1. [root@centos7 ~]# vmstat -w 
  2. procs -----------------------memory---------------------- ---swap-- -----io---- -system-- --------cpu-------- 
  3.  r  b         swpd         free         buff        cache   si   so    bi    bo   in   cs  us  sy  id  wa  st 
  4.  1  0            0      4517628         3184      3067904    0    0     0     1    1    0   0   0 100   0   0  

其中

  1. procs 
  2.     r 表示可運(yùn)行狀態(tài)進(jìn)程數(shù)量 
  3.     b 表示不可中斷睡眠狀態(tài)進(jìn)程數(shù)量 
  4. memory 
  5.     swpd  虛擬內(nèi)存使用量 
  6.     free  空閑內(nèi)存 
  7.     buff  buffer緩沖中內(nèi)存使用量 
  8.     cache cache緩存中內(nèi)存使用量 
  9. swap 
  10.     si   硬盤交換至內(nèi)存量 
  11.     so   內(nèi)存交換至硬盤量 
  12. io 
  13.     bi   從塊設(shè)備中收到的塊(blocks)數(shù) 
  14.     bo   發(fā)送至塊設(shè)備的塊數(shù) 
  15. system 
  16.     in   每秒中斷次數(shù),包括鎖。 
  17.     cs   每秒進(jìn)程上下文切換次數(shù)。 
  18. cpu (同命令top
  19.     us   用戶態(tài)任務(wù)占用CPU時(shí)間百分比 
  20.     sy   內(nèi)核態(tài)任務(wù)占用CPU時(shí)間百分比 
  21.     id   CPU空閑時(shí)間百分比 
  22.     wa   等待輸入輸出的進(jìn)程占用CPU時(shí)間百分比 
  23.     st   虛擬機(jī)等待真實(shí)物理機(jī)CPU資源的時(shí)間 

選項(xiàng)-m顯示slab信息

選項(xiàng)-s顯示各種內(nèi)存計(jì)數(shù)器及其信息

選項(xiàng)-d顯示磁盤I/O信息

選項(xiàng)-p device顯示設(shè)備分區(qū)詳細(xì)I/O信息

同iostat一樣也支持按頻率打印次數(shù)

11、mpstat 顯示CPU相關(guān)信息

  1. mpstat [options] [interval [count]] 

顯示信息和top命令相似

  1. [root@centos7 ~]# mpstat 1 2 
  2. Linux 3.10.0-327.el7.x86_64 (centos7)   2016年11月30日  _x86_64_        (8 CPU) 
  3.  
  4. 09時(shí)18分19秒  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle 
  5. 09時(shí)18分20秒  all    0.12    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00   99.88 
  6. 09時(shí)18分21秒  all    0.12    0.00    0.12    0.00    0.00    0.00    0.00    0.00    0.00   99.75 
  7. 平均時(shí)間:  all    0.12    0.00    0.06    0.00    0.00    0.00    0.00    0.00    0.00   99.81  

選項(xiàng)-A顯示所有CPU及中斷信息相當(dāng)于執(zhí)行mpstat -I ALL -P ALL

選項(xiàng)-I { SUM | CPU | SCPU | ALL }顯示中斷信息

選項(xiàng)-P { cpu [,...] | ON | ALL }顯示CPU信息

  1. [root@centos7 ~]# mpstat -P 3,5 
  2. Linux 3.10.0-327.el7.x86_64 (centos7)   2016年11月30日  _x86_64_        (8 CPU) 
  3.  
  4. 09時(shí)29分03秒  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle 
  5. 09時(shí)29分03秒    3    0.15    0.00    0.04    0.00    0.00    0.00    0.00    0.00    0.00   99.81 
  6. 09時(shí)29分03秒    5    0.11    0.00    0.03    0.00    0.00    0.00    0.00    0.00    0.00   99.86  

本文簡單介紹了linux中進(jìn)程和內(nèi)存的相關(guān)命令,進(jìn)程和內(nèi)存在計(jì)算機(jī)操作系統(tǒng)中非常重要,涉及到的內(nèi)容也非常多,這里就不做展開了。

責(zé)任編輯:龐桂玉 來源: segmentfault
相關(guān)推薦

2017-01-13 15:39:29

Linux進(jìn)程基礎(chǔ)介紹

2016-12-14 19:24:41

2010-06-11 16:57:37

Linux 查看進(jìn)程

2016-12-27 10:48:59

Linux命令磁盤與文件系統(tǒng)

2016-12-08 22:26:28

2010-06-13 15:13:45

Linux 查看進(jìn)程

2015-07-21 16:06:49

Linux進(jìn)程管理命令

2009-12-25 10:48:23

ps -aux

2016-12-29 11:13:30

shellbashlinux

2016-12-27 19:10:38

Linux命令啟動(dòng)流程

2015-06-03 10:17:12

Linux進(jìn)程管理命令

2013-11-06 15:01:51

Linux命令內(nèi)存

2016-12-27 19:29:14

Linux命令定時(shí)任務(wù)

2016-12-07 18:22:23

shelllinuxgrep

2016-12-23 13:07:11

shelllinuxsed

2016-12-27 10:34:57

Linux命令軟件包管理

2016-12-23 10:56:34

linuxshellawk

2016-11-15 15:50:22

linux基礎(chǔ)命令vim

2010-07-01 14:52:42

Linux grep命

2020-01-07 09:20:58

Linuxuseradd 命令
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號