2021-05-12 14:32:11
RHEL7進程管理
進程概念
名稱 | 說明 |
---|---|
程式 | 一組指令的集合 |
進程 | 程式的執行就是進程也可以把進程看成一個獨立的程式 在記憶體中有其對應的程式碼空間和資料空間,一個進程所擁有的資料和程式碼只屬於自己 進程是資源分配的基本單位,也是排程執行的基本單位 |
執行緒 | 執行緒被人們認為是輕量級的進程,它是進程中單獨執行的程式 |
一個進程可以包含多個執行緒且至少有一個主執行緒,同一進程的執行緒共用該進程的程式碼和資料
程式和進程的區別
- 程式是靜態的,它只是一組指令的集合,不具有任何的執行意義。而進程是程式執行的動態過程
- 進程和程式並不是一一對應的關係,相同的程式執行在不同的資料集上就是不同的進程
- 進程還具有並行性和交往性,而程式卻是封閉的
進程和執行緒的區別
- 一個進程可以擁有多個執行緒,而一個執行緒同時只能被一個進程所擁有
- 執行緒不能單獨執行,但是每一個執行緒都有程式的入口、執行序列以及程式出口,它必須組成進程才能被執行
進程屬性
進程管理工具
對於Linux進程的管理,是通過進程管理工具實現的,比如ps、kill
靜態檢視進程
命令:ps
作用:檢視系統進程( 靜態檢視 )
語法:ps [選項]
選項 | 說明 |
---|---|
-a | 顯示所有使用者的進程 |
-u | 顯示使用者名稱和啟動時間 |
-x | 顯示沒有控制終端的進程 |
-e | 顯示所有進程,包括沒有控制終端的進程 |
-l | 長格式顯示 |
-w | 寬行顯示,可以使用多個w進行加寬顯示 |
我們常用的選項是組合是aux
檢視隸屬於自己的進程
[root@VM_200_13_CentOS ~]# ps -u
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1275 0.0 0.0 6452 804 ttyS0 Ss+ Aug15 0:00 /sbin/agetty --keep-baud 115200 3
root 1276 0.0 0.0 110032 856 tty1 Ss+ Aug15 0:00 /sbin/agetty --noclear tty1 linux
root 2828 0.0 0.2 12684 2888 pts/0 Ss 14:33 0:00 -bash
root 2979 0.0 0.1 35888 1476 pts/0 R+ 14:34 0:00 ps -u
檢視所有使用者的進程和沒有控制終端的進程
[root@VM_200_13_centos ~]# ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.7 44800 7272 ? Ss Aug15 0:22 /usr/lib/systemd/systemd --switch
root 2 0.0 0.0 0 0 ? S Aug15 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S Aug15 0:00 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S< Aug15 0:00 [kworker/0:0H]
root 7 0.0 0.0 0 0 ? S Aug15 0:00 [migration/0]
root 8 0.0 0.0 0 0 ? S Aug15 0:00 [rcu_bh]
root 9 0.0 0.0 0 0 ? S Aug15 0:00 [rcuob/0]
root 10 0.0 0.0 0 0 ? R Aug15 0:03 [rcu_sched]
root 11 0.0 0.0 0 0 ? S Aug15 0:06 [rcuos/0]
root 12 0.0 0.0 0 0 ? S Aug15 0:00 [watchdog/0]
root 13 0.0 0.0 0 0 ? S< Aug15 0:00 [khelper]
...
ps -aux輸出解釋:
名稱 | 說明 |
---|---|
USER | 進程所有者 |
PID | 進程ID |
%CPU | 占用的CPU使用率 |
%MEM | 占用的記憶體使用率 |
VSZ | 占用的虛擬記憶體大小 |
RSS | 占用的記憶體大小 |
TTY | 終端的次要裝置號碼 (minor device number of tty) |
STAT | 進程狀態 |
START | 啟動進程的時間 |
TIME | 進程消耗CPU的時間 |
COMMAND | 命令的名稱和引數 |
進程狀態:
狀態 | 說明 |
---|---|
D | 無法中斷的休眠狀態(通常為IO進程) |
R | 正在執行,在可中斷佇列中 |
S | 處於休眠狀態,靜止狀態 |
T | 停止或被追蹤,暫停執行 |
W | 進入記憶體交換(從核心2.6開始無效) |
X | 死掉的進程 |
Z | 殭屍進程不存在但暫時無法消除 |
< | 高優先順序進程 |
N | 低優先順序進程 |
L | 有記憶體分頁分配並鎖在記憶體內 |
s | 進程的領導者(在它之下有子進程) |
l | 多進程的 |
+ | 位於後台的行程群組 |
檢視nginx進程
[root@VM_200_13_centos ~]# ps -aux | grep nginx
root 5092 0.0 0.0 9036 672 pts/0 R+ 15:07 0:00 grep --color=auto nginx
root 17698 0.0 0.0 20468 604 ? Ss Aug15 0:00 nginx: master process nginx
nginx 17699 0.0 0.1 22980 1612 ? S Aug15 0:00 nginx: worker process
動態檢視進程
命令:top
作用:動態 顯示當前系統正在執行的進程的相關資訊,包括進程ID、記憶體占用率、CPU占用率等
語法:top [選項]
說明:預設3s重新整理一次,按空格立即重新整理,按q退出,按大寫M則根據記憶體排序,按P則根據CPU排序
選項 | 說明 |
---|---|
-b | 批次處理 |
-c | 顯示完整的治命令 |
-I | 忽略失效過程 |
-s | 保密模式 |
-S | 累積模式 |
-i<時間> | 設定間隔時間 |
-u<使用者名稱> | 指定使用者名稱 |
-p<進程號> | 指定進程 |
-n<次數> | 迴圈顯示的次數 |
top - 15:58:43 up 2 days, 14:09, 1 user, load average: 0.00, 0.01, 0.05
Tasks: 77 total, 3 running, 74 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.2 us, 0.2 sy, 0.0 ni, 99.5 id, 0.1 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 1016916 total, 533700 free, 90484 used, 392732 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 768064 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 44900 7360 2364 S 0.0 0.7 0:23.01 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:00.56 ksoftirqd/0
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
7 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
9 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/0
10 root 20 0 0 0 0 S 0.0 0.0 0:03.61 rcu_sched
11 root 20 0 0 0 0 R 0.0 0.0 0:06.97 rcuos/0
12 root rt 0 0 0 0 S 0.0 0.0 0:00.14 watchdog/0
13 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 khelper
14 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kdevtmpfs
15 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 netns
16 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 perf
17 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 writeback
18 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kintegrityd
19 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 bioset
20 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kblockd
21 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 md
26 root 20 0 0 0 0 S 0.0 0.0 0:00.03 khungtaskd
27 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kswapd0
28 root 25 5 0 0 0 S 0.0 0.0 0:00.00 ksmd
29 root 39 19 0 0 0 S 0.0 0.0 0:00.56 khugepaged
30 root 20 0 0 0 0 S 0.0 0.0 0:00.00 fsnotify_mark
31 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 crypto
39 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kthrotld
41 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kmpath_rdacd
42 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kpsmoused
43 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 ipv6_addrconf
63 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 deferwq
101 root 20 0 0 0 0 S 0.0 0.0 0:00.18 kauditd
213 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 ata_sff
前五行是當前系統情況整體的統計資訊區,下面我們看每一行資訊的具體意義
第一行:任務佇列資訊
欄位 | 說明 |
---|---|
15:58:43 | Item Two |
up 2 days, 14:09 | 系統已經執行了2天14小時9分鐘 |
1 users | 當前登入使用者數 |
load average: 0.00, 0.01, 0.05 | 系統負載,即任務佇列的平均長度 三個數值分別為:1分鐘、5分鐘、15分鐘前到現在的平均值 |
第二行:進程資訊
欄位 | 說明 |
---|---|
77 total | 進程總數 |
3 running | 正在執行的進程數 |
74 sleeping | 睡眠的進程數 |
0 stopped | 停止的進程數 |
0 zombie | 殭屍進程數 |
第三行:CPU資訊(如果有多個CPU的話資訊會超過兩行)
欄位 | 說明 |
---|---|
0.2 us | 系統使用者進程使用CPU百分比 |
0.2 sy | 核心中的進程佔用CPU百分比 |
0.0 ni | 使用者進程空間內改變過優先順序的進程佔用CPU百分比 |
99.5 id | 空閒CPU百分比 |
0.1 wa | IO等待佔用CPU的百分比 |
0.0 hi | 硬中斷(Hardware IRQ)佔用CPU的百分比 |
0.0 si | 軟中斷(Software Interrupts)佔用CPU的百分比 |
0.0 st | 虛擬機器偷取時間 |
第四行:記憶體資訊
欄位 | 說明 |
---|---|
1016916 total | 實體記憶體總量 |
533700 free | 空閒記憶體總量 |
90484 used | 使用的實體記憶體總量 |
392732 buff/cache | 用作核心快取的記憶體量 和命令free –k一個意思 |
第五行:交換區資訊
欄位 | 說明 |
---|---|
0 total | 交換區總量 |
0 free | 空閒交換區總量 |
0 used | 使用的交換區總量 |
768064 avail Mem | 總的可利用記憶體是多少 |
剩下的則是進程資訊:
欄位 | 說明 |
---|---|
PID | 進程ID |
USER | 進程所有者 |
PR | 進程優先順序 |
NI | nice值,負值表示高優先順序,正值表示低優先順序 |
VIRT | 進程使用的虛擬記憶體總量,單位kb,VIRT=SWAP+RES |
RES | 進程使用的、未被換出的實體記憶體大小,單位kb,RES=CODE+DATA |
SHR | 共用記憶體大小,單位kb |
S | 進程狀態 |
%CPU | 上次更新到現在的CPU時間佔用百分比 |
%MEM | 進程使用的實體記憶體百分比 |
TIME+ | 進程使用的CPU時間總計,單位1/100秒 |
COMMAND | 進程名稱(命令名/命令列) |
查詢某個服務的進程號
[root@VM_200_13_centos ~]# pgrep ssh
697
8435
以樹狀圖顯示進程間的關係
命令:pstree
作用:以樹狀圖顯示進程,只顯示進程的名字,且相同進程合併顯示
語法:pstree [選項]
選項 | 說明 |
---|---|
-a | 顯示命令列引數 |
-A | 使用ASCII字元線 |
-c | 不適用緊湊連線方式顯示 |
-h | 高亮所有的進程和其父進程的PID |
-H | 高亮指定的進程和其父進程的PID |
-g | 顯示進程所屬的使用者組ID |
-G | 使用VT100字元線 |
-n | 根據PID排序 |
-p | 顯示PID |
-s | 顯示父進程 |
[root@VM_200_13_centos ~]# pstree -p
systemd(1)-+-acpid(474)
|-agetty(1275)
|-agetty(1276)
|-atd(472)
|-auditd(430)---{auditd}(448)
|-barad_agent(1938)-+-barad_agent(1939)
| `-barad_agent(1940)-+-{barad_agent}(1941)
| `-{barad_agent}(2009)
|-chronyd(477)
|-crond(473)
|-dbus-daemon(454)
|-lsmd(452)
|-lvmetad(357)
|-nginx(17698)---nginx(17699)
|-rsyslogd(469)-+-{rsyslogd}(485)
| `-{rsyslogd}(486)
|-sap1002(1853)
|-sap1007(1861)
|-secu-tcs-agent(1153)---sap1004(1859)
|-sgagent(1922)---{sgagent}(1923)
|-sshd(697)---sshd(8435)---bash(8437)---pstree(11096)
|-systemd-journal(329)
|-systemd-logind(458)
|-systemd-udevd(359)
`-tuned(695)-+-{tuned}(1329)
|-{tuned}(1330)
|-{tuned}(1332)
`-{tuned}(1335)
查詢網路相關的進程
介紹netstat工具
命令:netstat
作用:顯示各種網路相關資訊,如網路連線,路由表,介面狀態
語法:netstat [選項]
選項 | 說明 |
---|---|
-a或–all | 顯示所有連線中的介面 |
-c或–continuous | 持續列出網路狀態 |
-C或–cache | 顯示路由器設定的快取資訊 |
-e或–extend | 顯示網路其他相關資訊 |
-F或–fib | 顯示FIB |
-g或–groups | 顯示多重廣播功能群組組員名單 |
-i或–interfaces | 顯示網路介面資訊表單 |
-l或–listening | 顯示監控中的伺服器的介面 |
-M或–masquerade | 顯示偽裝的網路連線 |
-n或–numeric | 直接使用IP地址,而不通過域名伺服器 |
-N或–netlink或–symbolic | 顯示網路硬體外圍裝置的符號連線名稱 |
-o或–timers | 顯示計時器 |
-p或–programs | 顯示正在使用介面的程式識別碼和程式名稱 |
-r或–route | 顯示路由表 |
-s或–statistice | 顯示網路工作資訊統計表 |
-t或–tcp | 顯示TCP傳輸協定的連線狀況 |
-u或–udp | 顯示UDP傳輸協定的連線狀況 |
-v或–verbose | 顯示指令執行過程 |
-w或–raw | 顯示RAW傳輸協定的連線狀況 |
-x或–unix | 此引數的效果和指定-A unix引數相同 |
–ip或–inet | 此引數的效果和指定-A inet引數相同 |
檢視所有的TCP埠
[root@VM_200_13_centos ~]# netstat -anlpt
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 17698/nginx: mast
er
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 697/sshd
tcp 0 0 10.104.200.13:80 115.221.11.116:2137 ESTABLISHED 17699/nginx: work
er
tcp 0 0 10.104.200.13:80 115.221.14.249:4282 ESTABLISHED 17699/nginx: work
er
tcp 0 0 10.104.200.13:80 115.221.11.116:3583 ESTABLISHED 17699/nginx: work
er
tcp 0 52 10.104.200.13:22 182.150.21.5:6390 ESTABLISHED 8435/sshd: root@p
ts
tcp 0 0 10.104.200.13:80 115.221.14.139:4747 FIN_WAIT2 -
tcp 0 0 10.104.200.13:80 115.221.11.116:3797 ESTABLISHED 17699/nginx: work
er
tcp 0 0 10.104.200.13:80 115.221.11.116:3276 FIN_WAIT2 -
tcp 0 0 10.104.200.13:59586 10.249.80.72:9988 ESTABLISHED 1153/secu-tcs-age
nt
tcp 0 0 10.104.200.13:80 115.221.12.48:1670 FIN_WAIT2 -
tcp6 0 0 :::22 :::* LISTEN 697/sshd
檢視某個服務的埠
[root@VM_200_13_centos ~]# netstat -anlp | grep ssh
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 697/sshd
tcp 0 52 10.104.200.13:22 182.150.21.5:6390 ESTABLISHED 8435/sshd: root@pts
tcp6 0 0 :::22 :::* LISTEN 697/sshd
unix 3 [ ] STREAM CONNECTED 12545 697/sshd
unix 2 [ ] DGRAM 1401521 8435/sshd: root@pts
檢視所有的UDP埠
[root@VM_200_13_centos ~]# netstat -anlpu
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
udp 0 0 127.0.0.1:323 0.0.0.0:* 477/chronyd
udp6 0 0 ::1:323 :::* 477/chronyd
檢視nginx
[root@VM_200_13_centos ~]# netstat -anlp | grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 17698/nginx: master
tcp 0 0 10.104.200.13:80 115.221.11.116:4493 ESTABLISHED 17699/nginx: worker
tcp 0 0 10.104.200.13:80 115.221.12.48:2473 ESTABLISHED 17699/nginx: worker
unix 3 [ ] STREAM CONNECTED 488644 17698/nginx: master
unix 3 [ ] STREAM CONNECTED 488643 17698/nginx: master
控制進程
命令:kill
作用:通過信號的方式來控制進程
語法:kill [選項] [進程號]
選項 | 說明 |
---|---|
-l | 若果不加指定的信號編號引數,則使用“-l”引數會列出全部的信號名稱 |
-a | 當處理當前進程時,不限制命令名和進程號的對應關係 |
-p | 指定kill命令只列印相關進程的進程號,而不傳送任何信號 |
-u | 指定使用者 |
-s | 指定傳送信號 |
- kill命令可以帶信號號碼選項,也可以不帶。如果沒有信號號碼,kill命令就會發出終止信號(15),這個信號可以被進程捕獲,使得進程在退出之前可以清理並釋放資源
也可以用kill向進程傳送特定的信號,例如:kill -2 123
它的效果等同於在前台執行PID為123的進程時按下Ctrl+C鍵。但是,普通使用者只能使用不帶signal引數的kill命令或最多使用-9信號 - kill可以帶有進程ID號作為引數。當用kill向這些進程傳送信號時,必須是這些進程的主人。如果試圖復原一個沒有許可權復原的進程或復原一個不存在的進程,就會得到一個錯誤資訊
- 可以向多個進程發信號或終止它們
- 當kill成功地傳送了信號後,shell會在螢幕上顯示出進程的終止資訊。有時這個資訊不會馬上顯示,只有當按下Enter鍵使shell的命令提示字元再次出??時,才會顯示出來
- 應注意,信號使進程強行終止,這常會帶來一些副作用,如資料丟失或者終端無法恢復到正常狀態
傳送信號時必須小心,只有在萬不得已時,才用kill信號(9),因為進程不能首先捕獲它
要復原所有的後台作業,可以輸入kill 0,因為有些在後台執行的命令會啟動多個進程,跟蹤並找到所有要殺掉的進程的PID是件很麻煩的事
這時,使用kill 0來終止所有由當前shell啟動的進程,是個有效的方法
檢視所有的進程信號
[root@VM_200_13_centos ~]# 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
關閉進程
[root@VM_200_13_centos ~]# vim test.txt
[1]+ Stopped vim test.txt
[root@VM_200_13_centos ~]# ps -aux | grep vim
root 14797 0.0 0.4 49768 4848 pts/0 T 17:38 0:00 vim test.txt
root 14859 0.0 0.0 9036 668 pts/0 R+ 17:39 0:00 grep --color=auto vim
[root@VM_200_13_centos ~]# kill -9 14797
[root@VM_200_13_centos ~]# ps -aux | grep vim
root 14870 0.0 0.0 9036 672 pts/0 R+ 17:39 0:00 grep --color=auto vim
[1]+ Killed vim test.txt
重新啟動進程
[root@VM_200_13_centos ~]# ps -aux | grep nginx
root 8582 0.0 0.0 9036 672 pts/0 R+ 00:40 0:00 grep --color=auto nginx
root 17698 0.0 0.0 20468 604 ? Ss Aug15 0:00 nginx: master process nginx
nginx 17699 0.0 0.1 22980 1612 ? S Aug15 0:01 nginx: worker process
[root@VM_200_13_centos ~]# kill -1 17698
終止所有進程
linux系統中的killall命令用於殺死指定名字的進程(kill processes by name)
我們可以使用kill命令殺死指定進程PID的進程,如果要找到我們需要殺死的進程,我們還需要在之前使用ps等命令再配合grep來查詢進程
而killall把這兩個過程合二為一,是一個很好用的命令
命令:killall
作用:用來結束同名的的所有進程
語法:killall [選項] 進程名稱
選項 | 說明 |
---|---|
-Z | 只殺死擁有context的進程 |
-e | 要求匹配進程名稱 |
-I | 不區分大小寫匹配進程名稱 |
-g | 殺死行程群組而不是進程 |
-i | 互動模式,殺死進程前先詢問使用者 |
-l | 列出所有的已知信號名稱 |
-q | 不輸出警告資訊 |
-s | 傳送指定的信號 |
-w | 等待進程死亡 |
-v | 報告信號是否成功傳送 |
-r | 使用正規表示式匹配進程名 |
-u | 只殺死使用者執行的進程 |
關閉所有httpd進程[root@VM_200_13_centos ~]# yum -y install httpd [root@VM_200_13_centos ~]# systemctl start httpd [root@VM_200_13_centos3 ~]# ps -aux | grep httpd root 39962 0.0 0.1 226128 5052 ? Ss 08:38 0:00 /usr/sbin/httpd -DFOREGROUND apache 39974 0.0 0.0 228212 3128 ? S 08:39 0:00 /usr/sbin/httpd -DFOREGROUND apache 39975 0.0 0.0 228212 3128 ? S 08:39 0:00 /usr/sbin/httpd -DFOREGROUND apache 39976 0.0 0.0 228212 3128 ? S 08:39 0:00 /usr/sbin/httpd -DFOREGROUND apache 39977 0.0 0.0 228212 3128 ? S 08:39 0:00 /usr/sbin/httpd -DFOREGROUND apache 39978 0.0 0.0 228212 3128 ? S 08:39 0:00 /usr/sbin/httpd -DFOREGROUND root 39985 0.0 0.0 112644 956 pts/1 S+ 08:39 0:00 grep --color=auto httpd [root@VM_200_13_centos3 ~]# killall httpd
虛擬檔案系統
Linux一切皆檔案,裝置(檔案)可以通過讀寫來操作
/proc是記憶體中有關 系統進程 的資訊
/sys是有關 系統核心以及驅動 的資訊
檢視當前CPU資訊
[root@VM_200_13_centos ~]# cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 63
model name : Intel(R) Xeon(R) CPU E5-26xx v3
stepping : 2
microcode : 0x1
cpu MHz : 2294.686
cache size : 4096 KB
physical id : 0
siblings : 1
core id : 0
cpu cores : 1
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 13
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall
nx lm constant_tsc rep_good nopl eagerfpu pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer
aes xsave avx f16c rdrand hypervisor lahf_lm abm xsaveopt
bogomips : 4589.37
clflush size : 64
cache_alignment : 64
address sizes : 40 bits physical, 48 bits virtual
power management:
開啟核心轉發功能
[root@VM_200_13_centos ~]# echo "1" > /proc/sys/net/ipv4/ip_forward
[root@VM_200_13_centos ~]# cat /proc/sys/net/ipv4/ip_forward
1
後台進程與前台進程
後台進程:
也叫守護行程(Daemon),是執行在後台的一種特殊進程,守護的意思就是不受終端控制。Linux的大多數伺服器就是用守護行程實現的比如,Web伺服器httpd等
前台進程:
使用者使用的有控制終端的進程
跟系統任務相關的幾個命令:fg、bg、jobs、&、ctrl+z
| Header One | Header Two |
| :------------- | :------------- |
| & | 用在一個命令的最後,可以把這個命令放到後台執行 |
| ctrl+z | 將一個正在前台執行的命令放到後台,並且暫停 |
| jobs | 檢視當前有多少在後台執行的進程 |
| fg | 將後台中的命令調至前台繼續執行
如果後台中有多個命令,可以用 fg %jobnumber將選中的命令調出
%jobnumber是通過jobs命令查到的後台正在執行的命令的序號(不是pid) |
| bg | 將一個在後台暫停的命令,變成繼續執行
如果後台中有多個命令,可以用bg %jobnumber將選中的命令調出
%jobnumber是通過jobs命令查到的後台正在執行的命令的序號(不是pid) |
恢復被掛起的進程
[root@VM_200_13_centos ~]# vim test.txt
[1]+ Stopped vim test.txt
[root@VM_200_13_centos ~]# ps -aux |grep vim
root 13516 0.1 0.4 49756 4804 pts/0 T 17:18 0:00 vim test.txt
root 13518 0.0 0.0 9036 672 pts/0 R+ 17:18 0:00 grep --color=auto vim
[root@VM_200_13_centos ~]# jobs
[1]+ Stopped vim test.txt
[root@VM_200_13_centos ~]# fg %1
vim test.txt
進程的優先順序管理
優先順序取值範圍為[-20,19],越小優先順序越高, 預設優先順序是0
設定進程的優先順序
命令:nice
作用:設定進程的優先順序
語法:nice [選項] 命令
說明:nice的選項只有一個-n,引數後面跟上[-20,19]範圍內的值,不使用該引數則以10為值設定nice值
[root@VM_200_13_centos ~]# nice vim v.txt
[1]+ Stopped nice vim v.txt
[root@VM_200_13_centos ~]# ps -aux | grep vim
root 10029 0.0 0.4 49748 4800 pts/0 TN 01:01 0:00 vim v.txt
root 10038 0.0 0.0 9036 672 pts/0 R+ 01:01 0:00 grep --color=auto vim
使用top命令檢視上面操作的nice值
[root@VM_200_13_centos ~]# top -n 1 -p 10029
top - 01:03:25 up 2 days, 23:13, 1 user, load average: 0.00, 0.01, 0.05
Tasks: 1 total, 0 running, 0 sleeping, 1 stopped, 0 zombie
%Cpu(s): 0.2 us, 0.2 sy, 0.0 ni, 99.5 id, 0.1 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 1016916 total, 511816 free, 93860 used, 411240 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 763804 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
10029 root 30 10 49748 4800 2484 T 0.0 0.5 0:00.02 vim
調整進程優先順序
命令:renice
作用:改變一個正在執行的進程的優先順序
語法:renice [-n] 優先順序值 [-gpu] identifier..
選項 | 說明 |
---|---|
-n | 修改執行中進程的優先順序,後面跟上[-20,19]範圍內的值 |
-g | 強制將後續的引數解釋為進程所屬使用者的屬組GID |
-p | 強制將後續的引數解釋為進程PID,這個引數是預設使用的 |
-u | 強制將後續的引數解釋為進程所屬使用者的UID |
[root@VM_200_13_centos ~]# ps -aux | grep vim
root 10029 0.0 0.4 49748 4800 pts/0 TN 01:01 0:00 vim v.txt
root 10909 0.0 0.0 9036 668 pts/0 R+ 01:15 0:00 grep --color=auto vim
[root@VM_200_13_centos ~]# renice -n -20 10029
10029 (process ID) old priority 10, new priority -20
遠端對談管理工具
Screen是Linux下的一款遠端對談管理工具,可以在多個進程之間多路複用一個物理終端的全螢幕視窗管理器
它可以建立多個對談(Session),每個對談中可以建立多個視窗(Window)
每個視窗中可以執行單獨的任務,並且互相之間不受影響,還可以方便快速的在不同的視窗和對談之間切換
Screen可以看作是視窗管理器的命令列介面版本。它提供了統一的管理多個對談的介面和相應的功能
- 對談恢復
只要Screen本身沒有終止,在其內部執行的對談都可以恢復
這一點對於遠端登入的使用者特別有用——即使網路連線中斷,使用者也不會失去對已經開啟的命令列對談的控制
只要再次登入到主機上執行screen -r就可以恢復對談的執行
同樣在暫時離開的時候,也可以執行分離命令detach,在保證裡面的程式正常執行的情況下讓Screen掛起(切換到後台) - 多視窗
在Screen環境下,所有的對談都獨立的執行,並擁有各自的編號、輸入、輸出和視窗快取
使用者可以通過快捷鍵在不同的視窗下切換,並可以自由的重定向各個視窗的輸入和輸出
Screen實現了基本的文字操作,如複製貼上等;還提供了類似捲軸的功能,可以檢視視窗狀況的歷史記錄
視窗還可以被分割區和命名,還可以監視後台視窗的活動 -
對談共用
Screen可以讓一個或多個使用者從不同終端多次登入一個對談,並共用對談的所有特性(比如可以看到完全相同的輸出)
它同時提供了視窗存取許可權的機制,可以對視窗進行密碼保護使用場景
在VPS中執行一些非常耗時的任務時(如下載,壓縮,解壓縮,編譯,安裝等)
我們通常是單獨開一個遠端終端視窗來執行這個任務,且在任務執行過程中不能關閉這個視窗或者中斷連線,否則正在執行的任務會被終止掉
而有了screen,我們可以在一個視窗中安裝程式,然後在另一個視窗中下載檔案,再在第三個視窗中編譯程式
只需要一個SSH連線就可以同時執行這三個任務,還可以方便的在不同對談或視窗中切換
即使因為意外導致視窗關閉或者連線中斷,也不會影響這三個任務的執行使用說明
命令:screen
作用:可以在多個進程之間多路複用一個物理終端的全螢幕視窗管理器
語法:screen [選項] [命令]
選項 | 說明 |
---|---|
-ls | 檢視所有screen對談 |
-r | 重新連線指定id的對談(使用-ls可以檢視到對談id) |
-L | 開啟輸出紀錄檔 |
-s | 指定新建的screen對談執行的shell |
-S | 新建一個對談,後面跟上對談名稱 |
-d | 遠端斷開一個screen對談 |
實際使用
使用Xshell連線伺服器,進入screen
[root@VM_200_13_centos ~]# screen
在screen視窗執行updatedb模擬執行一個耗時很長的操作
在screen視窗鍵入Ctrl+a+d模擬中斷,Screen會給出detached提示
[detached from 13137.pts-0.VM_200_13_centos]
退出Xshell或重連,再檢視所有的screen對談
[root@VM_200_13_centos ~]# screen -ls
There is a screen on:
13137.pts-0.VM_200_13_centos (Detached)
1 Socket in /var/run/screen/S-root.
重連之前的screen
[root@VM_200_13_centos ~]# screen -r 1
本文永久更新連結地址:http://www.linuxidc.com/Linux/2016-08/134708.htm
相關文章