進程是程序的具體實現,執行程序的具體過程。java
對比window系統進程,ctrl+alt+delete(看到的進程相似)。node
操做系統的一個重要功能就是爲進程提供方便,好比啓動進程、爲進程分配內存空間、管理進程的相關信息等等。shell
執行一個程序或命令就能夠啓動一個進程。進程啓動時,操做系統爲其分配相對應的系統內惟一的進程ID(PID)。apache
#Linux啓動的第一個進程。 [root@localhost ~]# pidof init 1 #進程演示 [root@localhost ~]# ps a vim install.log #圖像界面新開一個Terminal #vim install.log
[root@localhost ~]# ps aux |grep bash root 2491 0.0 0.1 108304 1920 pts/0 Ss 05:18 0:00 /bin/bash root 2515 0.0 0.1 108304 1916 pts/1 Ss 05:20 0:00 -bash root 25541 0.0 0.1 108340 1776 pts/2 Ss+ 07:08 0:00 /bin/bash root 25871 0.0 0.0 103252 828 pts/1 S+ 08:04 0:00 grep bash [root@localhost ~]# su - tom [tom@localhost ~]$ ps aux | grep bash root 2491 0.0 0.1 108304 1920 pts/0 Ss 05:18 0:00 /bin/bash root 2515 0.0 0.1 108304 1916 pts/1 Ss 05:20 0:00 -bash root 25541 0.0 0.1 108340 1776 pts/2 Ss+ 07:08 0:00 /bin/bash tom 25874 0.0 0.1 108340 1772 pts/1 S 08:04 0:00 -bash tom 25895 0.0 0.0 103252 828 pts/1 S+ 08:04 0:00 grep bash [root@localhost ~]# service httpd start #使用root身份啓動httpd服務 [root@localhost ~]# ps aux |grep httpd #查看httpd進程 root 2785 0.0 0.7 184288 3852 ? Ss 07:39 0:00 /usr/sbin/httpd apache 2788? S 07:39 0:00 /usr/sbin/httpd
以apache用戶進行管理,達到安全機制,root身份啓動後交給普通用戶apache(apache用戶無登陸權限,防止他人惡意入侵後使用用戶作一些操做)。
不一樣用戶執行相同程序,注意其權限的不一樣。vim
[tom@localhost ~]$ ps au |grep vim tom 26012 0.0 0.3 143572 3256 pts/2 S+ 08:22 0:00 vim test root 26013 0.0 0.3 143576 3268 pts/0 S+ 08:22 0:00 vim abc
ps(process status) :將某個時間點的程序運做狀況截取下來。安全
-a:(all)(和輸入終端(terminal)關聯的全部process,一般與x一塊兒使用,列出完整信息。bash
-x:後臺進程,一般與a這個參數一塊兒使用,可列出較完整信息。網絡
-u:有效使用者(effective user)相關的process。ssh
ps -aux:觀察系統全部的程序數據 (經常使用)!!!oop
ps axjf:能夠用相似於樹狀的形式顯示。
參數不用背,能夠經過man ps或使用Linux的命令大全查看(推薦)。
示例:
#僅查看本身的bash相關的進程。 [root@localhost ~]# ps -l F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 4 S 0 2305 2301 0 80 0 - 27084 wait pts/0 00:00:00 bash 4 R 0 2357 2305 0 80 0 - 27035 - pts/0 00:00:00 ps #觀察系統全部程序: ps aux(很是經常使用) [root@localhost ~]# ps aux | head -4 USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.1 0.1 19360 1540 ? Ss 05:07 0:01 /sbin/init root 2 0.0 0.0 0 0 ? S 05:07 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? S 05:07 0:00 [migration/0]
USER:該process屬於那個使用者。
PID:該process的程序標識符。
%CPU:該process使用掉的 CPU 資源百分比。
%MEM:該process所佔用的物理內存百分比。
VSZ:該process使用掉的虛擬內存量 (Kbytes)。
RSS:該process佔用的物理的內存量 (Kbytes)。
TTY:該process是在哪一個終端機上面運做,若與終端機無關則顯示?,另外,tty1-tty6是本機上面的登入者程序,若爲pts/0等等的,則表示爲由網絡鏈接進主機的程序。(pts表示虛擬終端,例如pts/一、pts/2等,如xshell鏈接)
STAT:該進程目前的狀態,狀態顯示與ps -l的S旗標相同(R/S/D/T/Z)。
START:該process被觸發啓動的時間。
TIME:該process實際使用CPU運做的時間。
COMMAND:該程序的實際命令是什麼。
D:不可中斷 Uninterruptible(usually IO)。
R:正在運行,或在隊列中的進程。
S:處於休眠狀態。
T :中止或被追蹤。
Z:殭屍進程。殭屍進程(狀態:Z )一般形成殭屍進程的緣由是該進程應該已經執行完畢,或者是因故障應該要終止,但該進程的父進程卻沒法完整、有效的將進程結束掉,而形成進程一直存在內存當中。若是發如今某個進程的CMD後面,殭屍進程還接上<defunct>時,就表明該進程是殭屍進程。
例如:apache 8683 0.0 0.9 83384 9992 ? Z 14:33 0:00 /usr/sbin/httpd <defunct> 。
W:進入內存交換(從內核2.6開始無效)。
X:死掉的進程。
<:高優先級。
N:低優先級。
s:包含子進程。
+:位於後臺的進程組。
top:動態觀察進程的變化。
ps是截取一個時間點的進程狀態,而top則能夠持續觀察進程運行的狀態。
-d:後面能夠接秒數,就是整個程序畫面更新的秒數。默認5秒。
-b:以批次的方式執行top,還有更多的參數可使用,一般會搭配數據流重導向,來將批次的結果輸出成爲檔案。
-n:(Number)與-b搭配,意義是須要進行幾回top的輸出結果。
-p:指定某些個PID來進行觀察監測而已。
#top -d 2 #top -b #top -b -n 2 #top -b -n 5 > a.log #cat a.log
cat僅用於查看,不具有編輯功能,vim是能夠編輯內容的,vim是vi編譯器的升級版,能夠理解爲是一個強大的三方插件。
?:顯示在top當中能夠輸入的按鍵指令。
P:以CPU的使用資源排序顯示。
M:以Memory的使用資源排序顯示。
N:以PID來排序。
T:由該Process使用的CPU時間累積(TIME+)排序。
k:給予某個PID後kill該進程(內核2.6後失效)。
q:離開top軟件的按鍵。
#top –d 1
按以上選項測試:
[root@localhost ~]#top -d 2 #每兩秒鐘更新一次 top top - 05:06:55 up 13 min, 1 user, load average: 0.00, 0.06, 0.10 Tasks: 125 total, 1 running, 124 sleeping, 0 stopped, 0 zombie Cpu(s): 0.2%us, 0.0%sy, 0.0%ni, 99.5%id, 0.0%wa, 0.0%hi, 0.2%si, 0.0%st Mem: 1012352k total, 299596k used, 712756k free, 19276k buffers Swap: 2031608k total, 0k used, 2031608k free, 108536k cached
第一行顯示的信息:目前的時間,開機到目前爲止所通過的時間up 13min,已經登入系統的用戶人數1user,系統在一、五、15分鐘的平均工做負載。
第二行顯示的是目前進程的總量與個別進程在什麼狀態(running、sleeping、stopped、zombie)。
第三行顯示CPU的總體負載。
第四行和第五行表示目前的物理內存與虛擬內存使用狀況。
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 2301 root 20 0 15036 1244 956 R 0.5 0.1 0:00.50 top 1 root 20 0 19356 1540 1228 S 0.0 0.2 0:01.71 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.04 migration/0 4 root 20 0 0 0 0 S 0.0 0.0 0:00.01 ksoftirqd/0 5 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/0 6 root RT 0 0 0 0 S 0.0 0.0 0:00.00 watchdog/0 7 root RT 0 0 0 0 S 0.0 0.0 0:00.11 migration/1
每一個process使用的資源狀況:
PID:每一個process的ID。
USER:該process所屬的使用者。
PR:Priority的簡寫,程序的優先執行順序,越小越早被執行。
NI:Nice的簡寫,與Priority(優先級)有關,也是越小越早被執行。
%CPU:CPU的使用率。
%MEM:內存的使用率。
TIME+:CPU使用時間的累加。
COMMAND:進程名稱。
top默認使用CPU使用率(%CPU)做爲排序的重點,若是想要使用內存使用率排序,則能夠按下M,若要恢復則按下P便可。
#將top信息進行3次並輸出到文件中: [root@localhost ~]# top -b -n 3 > /tmp/top.txt #查看top.txt文件 [root@localhost tmp]# cat top.txt
pstree查看進程樹。
-A:各程序樹之間的鏈接以ASCII字符來鏈接。
-U:各程序樹之間的鏈接以萬國碼(UTF-8)的字符來鏈接。在某些終端接口下可能會有亂碼。
-p:並同時列出每一個process的PID。
-u:並同時列出每一個process的所屬帳號名稱。
系統進程樹同時顯示PID與user(root身份來執行,屬於roo的程序不會顯示)。
[root@localhost ~]# pstree -Aup
kill發送信號(並不僅是殺進程)。
-l:這個是L的小寫,列出目前kill可以使用的信號(signal)有哪些。
Signal:向進程發送的信號,指示其進行不一樣操做。用man 7 signal可知:
-15:以正常的程序方式終止一個進程!!!
-9:馬上強制終止一個進程!!!(!!不能強制結束系統級別的進程)
-2:表明由鍵盤輸入 [ctrl]-c 一樣的動做。
-1:對於sshd這樣的守護進程,從新讀取一次參數的配置文件(相似reload),若是進程爲非守護進程,默認爲終止進程!!
[root@localhost ~]# 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
具體含義能夠經過man來查看。
[root@localhost ~]# man kill SEE ALSO bash(1), tcsh(1), kill(2), sigvec(2), signal(7) [root@tedu ~]# man 7 signal Signal Value Action Comment ------------------------------------------------------------SIGHUP 1 Term Hangup detected on controlling terminal or death of controlling process SIGINT 2 Term Interrupt from keyboard SIGKILL 9 Term Kill signal SIGTERM 15 Term Termination signal
查看其中某個進程。
[root@localhost ~]# ps aux |grep sshd root 1859 0.0 0.1 66604 1180 ? Ss 04:55 0:00 /usr/sbin/sshd root 2345 0.0 0.3 100348 4040 ? Ss 05:21 0:00 sshd: root@pts/0 root 2927 0.0 0.0 103256 832 pts/0 S+ 07:10 0:00 grep sshd
從新加載並啓動。
[root@localhost ~]# kill -1 1859 [ root@tedu ~]# ps aux |grep sshd root 2345 0.0 0.3 100348 4040 ? Ss 05:21 0:00 sshd: root@pts/0 root 2928 0.0 0.1 66604 1144 ? Ss 07:14 0:00 /usr/sbin/sshd root 2930 0.0 0.0 103252 824 pts/0 S+ 07:15 0:00 grep sshd
再次查看發現重啓後的進程的pid發生了改變。
killall -signal 命令名:終止以某命令名稱啓動的所有進程。
向syslogd這個命令啓動的進程發送一個SIGHUP信號
[root@localhost ~]# killall -9 syslogd
強制終止全部以httpd啓動的進程
[root@localhost ~]# killall -9 httpd
可使用hadoop(以java啓動的進程)
[root@localhost ~]# jps #查看hadoop的進程 [root@localhost ~]#ps aux|grep java [root@localhost ~]#ps ax|grep datanode對應的PID [root@localhost ~]#killall -15 java [root@localhost ~]# jps #發現對應的進程已經所有關閉 (須要安裝java後才能執行。)
上一篇:Linux基礎之網絡