進程: 已經啓動的可執行程序的運行實力html
進程的組成:一個進程包含內核中的一部分地址空間和一系列數據結構。其中地址空間是內核標記的一部份內存以供進程使用,而數據結構則用來紀錄每一個進程的具體信息。web
最主要的進程信息包括:算法
每一個進程都會從內核獲取一個惟一的 ID 值。絕大多數用來操做進程的命令和系統調用,都須要用 PID 指定操做的進程對象。shell
在 Unix 和 Linux 系統中,一個已經存在的進程必須「克隆」它自身來建立一個新的進程。當新的進程克隆後,最初的進程便做爲父進程存在。windows
一個進程的 UID 是其建立者的身份標誌(也是對其父進程 UID 的複製)。一般只有進程的建立者和超級用戶纔有操做該進程的權限。
EUID 是一個額外的 UID,用來決定在任意一個特定時間點,一個進程有權限訪問的文件和資源。對絕大多數進程而言,UID 和 EUID 是相同的(特殊狀況即 setuid)bash
一個進程的計劃優先級決定了它能獲取到的 CPU 時間。內核有一個動態的算法來計算優先級,同時也會關注一個 Niceness 值,來決定程序運行的優先順序。網絡
信號屬於進程級別的中斷請求。它們能夠做爲進程間通訊的手段,或者由終端發送以殺死、中斷、掛起某個進程。數據結構
Linux的信號列表:ui
[root@web ~]# 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
經常使用信號:spa
9)SIGKILL:用來當即結束程序的運行。本信號不能被阻塞、處理和忽略。
15)SIGTERM:程序結束(terminate)信號。與SIGKILL不一樣的是該信號能夠被阻塞和處理。一般用來要求程序本身正常(優雅地)退出。shell命令kill缺省產生這個信號。
19)SIGSTOP:中止(stopped)進程的執行。注意它和terminate以及interrupt的區別:該進程還未結束,只是暫停執行。本信號不能被阻塞、處理或忽略。
簡介:ps 命令就是最根本相應狀況下也是至關強大地進程查看命令.運用該命令能夠肯定有哪些進程正在運行和運行地狀態、 進程 是否結束、進程有沒有僵死、哪些進程佔用了過多地資源等等.總之大部分信息均爲能夠經過執行該命令獲得
-e 顯示全部進程,環境變量
-f 全格式
-h 不顯示標題
-l 長格式
-w 寬輸出
a
顯示終端上地全部進程,包括其餘用戶地進程
命令使用案例:
列出全部進程:
[root@web ~]# ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.7 190900 3796 ? Ss 09:28 0:01 /usr/lib/syste root 2 0.0 0.0 0 0 ? S 09:28 0:00 [kthreadd] root 4 0.0 0.0 0 0 ? S< 09:28 0:00 [kworker/0:0H] root 5 0.0 0.0 0 0 ? S 09:28 0:00 [kworker/u256: root 6 0.0 0.0 0 0 ? S 09:28 0:00 [ksoftirqd/0]
[root@web ~]# ps ef PID TTY STAT TIME COMMAND 918 pts/0 Ss 0:00 -bash USER=root LOGNAME=root HOME=/root PATH=/usr/lo 949 pts/0 S 0:00 \_ bash XDG_SESSION_ID=4 HOSTNAME=172.16.234.111 TE 1258 pts/0 R+ 0:00 \_ ps ef XDG_SESSION_ID=4 HOSTNAME=172.16.234.1
列出相似進程樹的程序:
[root@web ~]# ps axjf PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND 0 2 0 0 ? -1 S 0 0:00 [kthreadd] 2 4 0 0 ? -1 S< 0 0:00 \_ [kworker/0:0H] 2 5 0 0 ? -1 S 0 0:00 \_ [kworker/u256: 2 6 0 0 ? -1 S 0 0:00 \_ [ksoftirqd/0] 2 7 0 0 ? -1 S 0 0:00 \_ [migration/0]
-l : 列出和當前用戶有關的進程 -u 用戶 : 查看某一用戶的進程狀態
ps -aux 參數解釋
注:在 STAT 欄目中:
查看實時的進程狀態,實現動態監控進程,top 命令能夠實時顯示系統當前活躍進程的整體信息及其佔用的資源。
top - 16:21:00 up 6:52, 1 user, load average: 0.00, 0.01, 0.05 Tasks: 95 total, 1 running, 94 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 479664 total, 268788 free, 98624 used, 112252 buff/cache KiB Swap: 2097148 total, 2097148 free, 0 used. 362524 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 407 root 20 0 0 0 0 S 0.3 0.0 0:01.19 xfsaild/dm+ 1 root 20 0 190900 3796 2584 S 0.0 0.8 0:02.00 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd 4 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:+ 5 root 20 0 0 0 0 S 0.0 0.0 0:00.57 kworker/u2+ 6 root 20 0 0 0 0 S 0.0 0.0 0:00.74 ksoftirqd/0 7 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
top 命令的 -d
選項能夠指定信息刷新的時間間隔。同時還有一些經常使用的交互命令
top - 10:45:08 up 1:19, 2 users, load average: 0.00, 0.01, 0.05
注意 load average數據是每隔5秒鐘檢查一次活躍的進程數,而後按特定算法計算出的數值。若是這個數除以邏輯CPU的數量,結果高於5的時候就代表系統在超負荷運轉了
Tasks: 97 total, 1 running, 96 sleeping, 0 stopped, 0 zombie
Task-任務,分別顯示任務進程的總數量以及正在運行、睡眠、中止、僵死的進程數
%Cpu(s): 1.0 us, 1.0 sy, 0.0 ni, 98.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
注:在這裏CPU的使用比率和windows概念不一樣,若是你不理解用戶空間和內核空間——>傳送門:http://www.javashuo.com/article/p-vasigkxa-gq.html
KiB Mem : 479664 total, 278252 free, 89548 used, 111864 buff/cache KiB Swap: 2097148 total, 2097148 free, 0 used. 371568 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1 root 20 0 43400 3736 2568 S 0.0 0.8 0:01.71 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd 4 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker+
PID:進程ID,進程的惟一標識符
USER:進程全部者的實際用戶名。
PR:進程的調度優先級。這個字段的一些值是'rt'。這意味這這些進程運行在實時態。
NI:進程的nice值(優先級)。越小的值意味着越高的優先級。負值表示高優先級,正值表示低優先級
VIRT:進程使用的虛擬內存。進程使用的虛擬內存總量,單位kb。VIRT=SWAP+RES
RES:駐留內存大小。駐留內存是任務使用的非交換物理內存大小。進程使用的、未被換出的物理內存大小,單位kb。RES=CODE+DATA
SHR:SHR是進程使用的共享內存。共享內存大小,單位kb
S:這個是進程的狀態。它有如下不一樣的值:
%CPU:自從上一次更新時到如今任務所使用的CPU時間百分比。
%MEM:進程使用的可用物理內存百分比。
TIME+:任務啓動後到如今所使用的所有CPU時間,精確到百分之一秒。
COMMAND:運行進程所使用的命令。進程名稱(命令名/命令行)
還有許多在默認狀況下不會顯示的輸出,它們能夠顯示進程的頁錯誤、有效組和組ID和其餘更多的信息。