| 標志 | 內核定義的狀態名稱和描述 |
|---|---|
| R | TASK_RUNNING:進程正在CPU上執行,或者正在等待運行。處于運行中(或可運行)狀態時,進程可能正在執行用戶例程或內核例程(系統調用),或者已排隊并就緒 |
| S | TASK_INTERRUPTIBLE:進程處于睡眠狀態且正在等待某一條件:硬件請求、系統資源訪問或信號。當事件或信號滿足該條件時,該進程將返回到運行中 |
| D | TASK_UNINTERRUPTIBLE:此進程也在睡眠,但與S狀態不同,不會響應傳遞的信號。僅在特定的條件下使用,其中進程中斷可能會導致意外的設備狀態 |
| K | TASK_KILLABLE:進程處于睡眠狀態,與不可中斷的D狀態相同,但有所修改,允許等待中的任務通過響應信號而被中斷(徹底退出)。實用程序通常將可中斷的進程顯示為D狀態 |
| T | TASK_STOPPED:進程已被停止(暫停),通常是通過用戶或其他進程發出的信號。進程可以通過另一信號返回到運行中狀態,繼續執行(恢復) |
| T | TASK_TRACED:正在被調試的進程也會臨時停止,并且共享同一個T狀態標志 |
| Z | EXIT_ZOMBIE:子進程在退出時向父進程發出信號。除進程身份(PID)之外的所有資源都已釋放 |
| X | EXIT_DEAD:當父進程清理(獲?。┦S嗟淖舆M程結構時,進程現在已徹底釋放。此狀態從不會在進程列出實用程序中看到 |
| < | 高優先級進程 |
| N | 低優先級進程 |
| + | 前臺進程組中的進程 |
| l | 多線程進程 |
| s | 會話進程首進程 |
ps命令用于列出當前的進程。可以顯示詳細的進程信息
[root@localhost ~]# ps -e
PID TTY TIME CMD
1 ? 00:00:02 systemd
2 ? 00:00:00 kthreadd
[root@localhost ~]# ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.6 179032 13504 ? Ss Nov03 0:02 /usr/lib/syst root 2 0.0 0.0 0 0 ? S Nov03 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? I< Nov03 0:00 [rcu_gp] root 4 0.0 0.0 0 0 ? I< Nov03 0:00 [rcu_par_gp] root 6 0.0 0.0 0 0 ? I< Nov03 0:00 [kworker/0:0H root 8 0.0 0.0 0 0 ? I< Nov03 0:00 [mm_percpu_wq root 9 0.0 0.0 0 0 ? S Nov03 0:00 [ksoftirqd/0] root 10 0.0 0.0 0 0 ? R Nov03 0:00 [rcu_sched] root 11 0.0 0.0 0 0 ? S Nov03 0:00 [migration/0] root 12 0.0 0.0 0 0 ? S Nov03 0:00 [watchdog/0] root 13 0.0 0.0 0 0 ? S Nov03 0:00 [cpuhp/0] root 15 0.0 0.0 0 0 ? S Nov03 0:00 [kdevtmpfs] root 16 0.0 0.0 0 0 ? I< Nov03 0:00 [netns] root 17 0.0 0.0 0 0 ? S Nov03 0:00 [kauditd] root 18 0.0 0.0 0 0 ? S Nov03 0:00 [khungtaskd] root 19 0.0 0.0 0 0 ? S Nov03 0:00 [oom_reaper] root 20 0.0 0.0 0 0 ? I< Nov03 0:00 [writeback] root 21 0.0 0.0 0 0 ? S Nov03 0:00 [kcompactd0] root 22 0.0 0.0 0 0 ? SN Nov03 0:00 [ksmd] root 23 0.0 0.0 0 0 ? SN Nov03 0:00 [khugepaged] root 24 0.0 0.0 0 0 ? I< Nov03 0:00 [crypto] root 25 0.0 0.0 0 0 ? I< Nov03 0:00 [kintegrityd] root 26 0.0 0.0 0 0 ? I< Nov03 0:00 [kblockd] root 27 0.0 0.0 0 0 ? I< Nov03 0:00 [tpm_dev_wq] root 28 0.0 0.0 0 0 ? I< Nov03 0:00 [md] root 29 0.0 0.0 0 0 ? I< Nov03 0:00 [edac-poller] root 30 0.0 0.0 0 0 ? S Nov03 0:00 [watchdogd] root 47 0.0 0.0 0 0 ? S Nov03 0:00 [kswapd0] root 140 0.0 0.0 0 0 ? I< Nov03 0:00 [kthrotld] root 141 0.0 0.0 0 0 ? S Nov03 0:00 [irq/24-pcieh root 142 0.0 0.0 0 0 ? S Nov03 0:00 [irq/25-pcieh root 143 0.0 0.0 0 0 ? S Nov03 0:00 [irq/26-pcieh root 144 0.0 0.0 0 0 ? S Nov03 0:00 [irq/27-pcieh root 145 0.0 0.0 0 0 ? S Nov03
[root@localhost ~]# ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 Nov03 ? 00:00:02 /usr/lib/systemd/systemd --s root 2 0 0 Nov03 ? 00:00:00 [kthreadd] root 3 2 0 Nov03 ? 00:00:00 [rcu_gp] root 4 2 0 Nov03 ? 00:00:00 [rcu_par_gp] root 6 2 0 Nov03 ? 00:00:00 [kworker/0:0H-k
虛擬內存狀態查看命令
vmstat 1000 //表示每1000秒刷新一次
vmstat 1000 5 //表示每1000秒刷新一次,刷新5次后退出
[root@localhost ~]# vmstat 1000
procs:
r(running) //表示等待運行的隊列長度,也即等待運行的進程的個數
b(block) //表示阻塞隊列長度,也即處于不可中斷睡眠態的進程個數
memory:
swpd //交換內存的使用總量
free //空閑物理內存總量
buffer //用于buffer的內存總量
cache //用于cache的內存總量
swap:
si(swap in) //表示從物理內存有多少頁面換進swap,也即數據進入swap的數據速率(kb/s)
so(swap out) //表示從swap有多少頁面換進物理內存,也即數據離開swap的數據速率(kb/s)
io:
bi(block in) //表示磁盤塊有多少個被調入內存中,也即從塊設備讀入數據到系統的速率(kb/s)
bo(block out) //表示有多少個磁盤塊從內存中被同步到硬盤上去了,也即保存數據至塊設備的速率(kb/s)
system:
in( interrupts) //表示中斷的個數,也即中斷速率(kb/s)
cs(context switch) //表示上下文切換的次數,也即進程切換速率(kb/s)
CPU:
us //表示用戶空間
sy //表示內核空間
id //表示空閑百分比
wa //表示等待IO完成所占據的時間百分比
st //表示steal,被虛擬化技術偷走的時間(比如運行虛擬機)
//在命令后跟上&符號可以生成一個后臺作業
[root@localhost ~]# sleep 1000 &
[1] 1400
//jobs命令用于顯示當前所有的后臺作業
[root@localhost ~]# jobs
[1]+ Running sleep 1000 &
//fg命令用于將后臺作業調至前臺運行
[root@localhost ~]# fg
//當只有一個后臺作業時,直接使用fg命令,不跟任何參數即可將后臺作業調至前臺運行,但是當有多個作業時則必須跟上%+作業號,也就是上面命令執行結果中以[]括起來的數字。
[root@localhost ~]# jobs
[1]- Running sleep 1000 &
[2]+ Running sleep 500 &
[root@localhost ~]# fg %1
//使用ctrl+z可將前臺進程發送到后臺,此時作業將處于停止狀態
[root@localhost ~]# fg %1
sleep 1000
^Z
[1]+ Stopped sleep 1000
//使用bg命令+作業號可使后臺已停止的作業重新運行
[root@localhost ~]# bg %1
[1]+ sleep 1000 &
[root@localhost ~]# jobs
[1]- Running sleep 1000 &
[2]+ Running sleep 500 &
//kill加上作業號可以手動殺死指定作業
[root@localhost ~]# jobs
[1]- Running sleep 1000 &
[2]+ Running sleep 500 &
[root@localhost ~]# kill %1
[1]- Terminated sleep 1000
[root@localhost ~]# jobs
[2]+ Running sleep 500 &
//jobs命令的結果中
+ //命令將默認操作的作業
- //命令將第二個默認操作的作業
以上就是Linux運維基礎進程管理及環境組成分析的詳細內容,更多關于Linux進程管理及環境組成的資料請關注腳本之家其它相關文章!