Linux系統的程序管理
- 一、系統程序介紹
-
- 1.程序概念
- 2.程序特點
- 3.程序類型
- 二、檢視系統程序
-
- 1.PS指令
- 2.檢視系統程序
- 3.ps aux結果說明
- 4.top指令
-
- ①top指令使用方法
- ② top指令選項
- 5.pgerp指令
- 6.pidof
- 三、signal信号的管理
-
- 1.signal信号的介紹
- 2.給程序發送信号
- 3.man 7 signal
- 4.常用信号
- 四、程序的優先級
-
- 1.程序優先級介紹
- 2.檢視程序優先級
- 3.優先級修改
-
- ①當啟動程序時
- ②當啟動程序後
- 五、作業控制
-
- 1.背景運作一個程式
- 2.顯示背景程式
- 3.停止運作程式
- 4.背景和前台恢複程式
一、系統程序介紹
1.程序概念
程序process是指正在執行的程式;是程式正在運作的一個執行個體。它由程式指令,和從檔案、其它程式中讀取的資料或系統使用者的輸入組成。
2.程序特點
①程序是加載到記憶體中的一段指令
②程序ID(PID)是唯一辨別程序
③子程序內建父程序的屬性資訊
3.程序類型
①前台程序(也稱為互動式程序):這些程序由終端會話初始化和控制。換句話說,需要有一個連接配接到系統中的使用者來啟動這樣的程序;它們不是作為系統功能/服務的一部分自動啟動。
②背景程序(也稱為非互動式/自動程序: 這些程序沒有連接配接到終端;它們不需要任何使用者輸入。
③守護程序:這是背景程序的特殊類型,它們在系統啟動時啟動,并作為服務一直運作;它們不會死亡。它們自發地作為系統任務啟動(作為服務運作)。但是,它們能被使用者通過 init 程序控制。
二、檢視系統程序
1.PS指令
#PS 檢視程序資訊
-a 檢視所有終端的程序
-u 列印程序的所有者資訊
-x 檢視不屬于任何終端的程序
-e 檢視系統的所有程序
-f 檢視額外的資訊
-o 指定格式輸出
--sort 指定排序的參數,例如: --sort=-%mem 按照記憶體大小降序
常用組合為: ps aux 或者 ps -ef
2.檢視系統程序
[[email protected] ~]# ps aux |head
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.5 176372 10932 ? Ss 15:22 0:01 /usr/lib/systemd/systemd --switched-root --system --deserialize 17
root 2 0.0 0.0 0 0 ? S 15:22 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? I< 15:22 0:00 [rcu_gp]
root 4 0.0 0.0 0 0 ? I< 15:22 0:00 [rcu_par_gp]
root 6 0.0 0.0 0 0 ? I< 15:22 0:00 [kworker/0:0H-kblockd]
root 8 0.0 0.0 0 0 ? I< 15:22 0:00 [mm_percpu_wq]
root 9 0.0 0.0 0 0 ? S 15:22 0:00 [ksoftirqd/0]
root 10 0.0 0.0 0 0 ? R 15:22 0:00 [rcu_sched]
root 11 0.0 0.0 0 0 ? S 15:22 0:00 [migration/0]
[[email protected] ~]# ps -ef |head
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 15:22 ? 00:00:01 /usr/lib/systemd/systemd --switched-root --system --deserialize 17
root 2 0 0 15:22 ? 00:00:00 [kthreadd]
root 3 2 0 15:22 ? 00:00:00 [rcu_gp]
root 4 2 0 15:22 ? 00:00:00 [rcu_par_gp]
root 6 2 0 15:22 ? 00:00:00 [kworker/0:0H-kblockd]
root 8 2 0 15:22 ? 00:00:00 [mm_percpu_wq]
root 9 2 0 15:22 ? 00:00:00 [ksoftirqd/0]
root 10 2 0 15:22 ? 00:00:00 [rcu_sched]
root 11 2 0 15:22 ? 00:00:00 [migration/0]
3.ps aux結果說明
USER 使用者
PID 程序ID
%CPU CPU占用
%MEM 記憶體占用
VSZ 項記憶體申請位址空間
RSS 實際使用記憶體
TTY 使用終端
STAT 程序狀态
START 程序開始時間
TIME 程序持續時間
程序指令 COMMAND
S 休眠
D 不可中斷
R 正在運作
Z 僵屍程序
T 停止
s 子程序
< 高優先級
n 低優先級
+ 背景程序
I 鎖定程序
4.top指令
①top指令使用方法
[[email protected] ~]# top
top - 18:47:52 up 3:25, 2 users, load average: 0.61, 0.66, 0.71
Tasks: 237 total, 2 running, 235 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.3 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 1966.1 total, 854.9 free, 537.0 used, 574.2 buff/cache
MiB Swap: 2048.0 total, 2048.0 free, 0.0 used. 1275.0 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
835 root 20 0 1277568 52788 23924 S 0.7 2.6 0:18.12 containerd
821 zabbix 20 0 710536 30140 15880 S 0.3 1.5 0:55.17 zabbix_agent2
4887 root 20 0 0 0 0 I 0.3 0.0 0:00.01 kworker/0:1-events
1 root 20 0 176372 10932 8104 S 0.0 0.5 0:01.11 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
3 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_gp
4 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_par_gp
② top指令選項
按鍵盤數字1,可監控每個邏輯CPU狀況
C 切換顯示指令名稱和完整指令行
M 可按記憶體占用情況程序排序
P 根據CPU使用百分比大小程序排序
T 根據時間/累計時間程序排序
f 可以選擇顯示的内容
5.pgerp指令
# pgrep
-U 查找摸個使用者的程序ID
-G 查找某個組的程序ID
-P 根據父程序ID,查找所有子程序ID
-l 不僅列印pid,也列印程序名
-o 表示該程式有多個程式正在運作,則隻查招老的,即最先啟動,(多個程序時即父程序PID)
-n 表示該程式有多個程式正在運作,則查找最新的
-d 定義多個程序之間的分隔符,如果不定義則使用換行符
[[email protected] ~]# pgrep -l sshd
819 sshd
2882 sshd
2884 sshd
2887 sshd
2905 sshd
3669 sshd
3671 sshd
3673 sshd
3689 sshd
6.pidof
[[email protected] ~]# ps -p $(pidof sshd)
PID TTY STAT TIME COMMAND
819 ? Ss 0:00 /usr/sbin/sshd -D -oCiphers=[email protected],[email protected],aes256-ctr,aes256-cbc,[email protected],aes128-ctr,
2882 ? Ss 0:00 sshd: root [priv]
2884 ? S 0:00 sshd: [email protected]/1
2887 ? Ss 0:00 sshd: root [priv]
2905 ? S 0:00 sshd: [email protected]
3669 ? Ss 0:00 sshd: root [priv]
3671 ? S 0:00 sshd: [email protected]/2
3673 ? Ss 0:00 sshd: root [priv]
3689 ? S 0:00 sshd: [email protected]
[[email protected] ~]#
三、signal信号的管理
1.signal信号的介紹
對程序的操作可以通過發送不同的信号來實作。
2.給程序發送信号
kill 信号 pid
killall 信号 comm
pikill [-signal] pattern
3.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
SIGQUIT 3 Core Quit from keyboard
SIGILL 4 Core Illegal Instruction
SIGABRT 6 Core Abort signal from abort(3)
SIGFPE 8 Core Floating-point exception
SIGKILL 9 Term Kill signal
SIGSEGV 11 Core Invalid memory reference
SIGPIPE 13 Term Broken pipe: write to pipe with no
readers; see pipe(7)
SIGALRM 14 Term Timer signal from alarm(2)
SIGTERM 15 Term Termination signal
SIGUSR1 30,10,16 Term User-defined signal 1
SIGUSR2 31,12,17 Term User-defined signal 2
SIGCHLD 20,17,18 Ign Child stopped or terminated
SIGCONT 19,18,25 Cont Continue if stopped
SIGSTOP 17,19,23 Stop Stop process
SIGTSTP 18,20,24 Stop Stop typed at terminal
SIGTTIN 21,21,26 Stop Terminal input for background process
SIGTTOU 22,22,27 Stop Terminal output for background process
4.常用信号
signal 15 終止
signal 9 立即終止
signal 1 重讀配置檔案
[[email protected] ~]# 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
四、程序的優先級
1.程序優先級介紹
排程優先級決定對CPU的通路,程序的nice值影響優先級。
nice值為-20到19 ,預設為0,低nice值意味着高CPU優先級
2.檢視程序優先級
[[email protected] ~]# ps -eo pid,comm,nice --sort=-nice |head
PID COMMAND NI
23 khugepaged 19
766 alsactl 19
22 ksmd 5
1 systemd 0
2 kthreadd 0
9 ksoftirqd/0 0
10 rcu_sched 0
11 migration/0 -
12 watchdog/0 -
3.優先級修改
①當啟動程序時
②當啟動程序後
[[email protected] ~]# pidof vim
5330
[[email protected] ~]# ps -eo pid,comm,nice |grep vim
5330 vim 0
[[email protected] ~]# renice 5 5330
5330 (process ID) old priority 0, new priority 5
[[email protected] ~]# ps -eo pid,comm,nice |grep vim
5330 vim 5
五、作業控制
1.背景運作一個程式
[[email protected] ~]# firefox &
[1] 5397
[[email protected] ~]# Running without a11y support!
2.顯示背景程式
[[email protected] ~]# jobs
[1]+ Running firefox &
3.停止運作程式
[[email protected] ~]# kill 15 5397
[[email protected] ~]# jobs
[1]+ Terminated firefox
4.背景和前台恢複程式
[[email protected] ~]#
[[email protected] ~]# jobs
[1]- Running ping www.baidu.com > /dev/null &
[2]+ Stopped ping www.jd.com > /dev/null
[[email protected] ~]# bg 2
[2]+ ping www.jd.com > /dev/null &
[[email protected] ~]# jobs
[1]- Running ping www.baidu.com > /dev/null &
[2]+ Running ping www.jd.com > /dev/null &
[[email protected] ~]# fg 2
ping www.jd.com > /dev/null
^Z
[2]+ Stopped ping www.jd.com > /dev/null
[[email protected] ~]# jobs
[1]- Running ping www.baidu.com > /dev/null &
[2]+ Stopped ping www.jd.com > /dev/null