RHEL7進程管理

来源:http://www.cnblogs.com/sakuraph/archive/2016/08/27/5814101.html
-Advertisement-
Play Games

進程概念 | 名稱 | 說明 | | : | : | | 程式 | 一組指令的集合 | | 進程 |程式的執行就是進程也可以把進程看成一個獨立的程式在記憶體中有其對應的代碼空間和數據空間,一個進程所擁有的數據和代碼只屬於自己進程是資源分配的基本單位,也是調度運行的基本單位 | | 線程 | 線程被人們 ...


進程概念

名稱 說明
程式 一組指令的集合
進程 程式的執行就是進程也可以把進程看成一個獨立的程式
在記憶體中有其對應的代碼空間和數據空間,一個進程所擁有的數據和代碼只屬於自己
進程是資源分配的基本單位,也是調度運行的基本單位
線程 線程被人們認為是輕量級的進程,它是進程中單獨運行的程式

一個進程可以包含多個線程且至少有一個主線程,同一進程的線程共用該進程的代碼和數據

程式進程線程

程式和進程的區別

  • 程式是靜態的,它只是一組指令的集合,不具有任何的運行意義。而進程是程式運行的動態過程
  • 進程和程式並不是一一對應的關係,相同的程式運行在不同的數據集上就是不同的進程
  • 進程還具有併發性和交往性,而程式卻是封閉的

進程和線程的區別

  • 一個進程可以擁有多個線程,而一個線程同時只能被一個進程所擁有
  • 線程不能單獨執行,但是每一個線程都有程式的入口、執行序列以及程式出口,它必須組成進程才能被執行

進程屬性

進程屬性

進程管理工具

對於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

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.ifconfig查看和配置網路介面信息(1)設ip地址ifconfig eth0 192.168.0.1(2)暫時關閉或啟用網卡ifconfig eth0 downifconfig eth0 up(3)設子網掩碼ifconfig eth0 netmask 255.255.255.0(4)查看第一 ...
  • 1.什麼是shell?Shell是用戶和Linux操作系統之間的介面。Linux中有多種shell,其中預設使用的是Bash。 2.shell的分類(1)bash bash shell 是 Bourne shell 的一個免費版本,它是最早的 Unix shell,包括許多附加的特點。Bash 有可 ...
  • ...
  • 標題:sed命令的使用 作用:sed是以行為單位處理文本數據,可以對數據按行進行選取(顯示)、替換、刪除和新增等功能。 一、用法 sed [-nefr] [動作] 參數: -n:使用安靜模式,取消自動列印模式空間。在一般來自STDIN的數據一般都會被列出到屏幕上,但如果加上-n參數後,則只有經過se ...
  • 1、在mac上安裝好了mysql-5.7.14 ,會自動生成一個初始密碼,這個初始密碼一定要記住: 在終端中輸入:mysql -u root -p,提示:mysql: command not found。這是因為沒有配置環境變數; 2、配置環境變數,即配置.bash_profile文件,~/.zsh ...
  • 今日頭條創立於2012年3月,到目前僅4年時間。從十幾個工程師開始研發,到上百人,再到200餘人。產品線由內涵段子,到今日頭條,今日特賣,今日電影等產品線。 一、產品背景 今日頭條是為用戶提供個性化資訊客戶端。下麵就和大家分享一下當前今日頭條的數據(據內部與公開數據綜合): 5億註冊用戶 2014年 ...
  • 本文介紹RHEL7下which、whereis、locate、find命令的使用,重點介紹find命令的使用 which 命令:which 作用:查找命令的執行文件路徑 語法:which [選項] [ ] 名稱... 說明:which命令比較簡單,他的選項都是不常用的 whereis 命令:wher ...
  • 本文介紹RHEL7.2文件的歸檔和壓縮 文件歸檔 歸檔的好處:方便使用、查詢、閱讀,易於管理 (批量刪除文件) 常用操作 命令:tar 作用:將許多文件一起保存至一個單獨的磁帶或磁碟歸檔,並能從歸檔中單獨還原所需文件 用法: tar [選項...] [FILE]... | 選項 | 說明 | | : ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...