鍍金池/ 教程/ Linux/ 工作管理與進(jìn)程管理
Linux 學(xué)習(xí)記錄--開(kāi)機(jī)掛載錯(cuò)誤
日志系統(tǒng)
數(shù)據(jù)流重定向
內(nèi)存交換空間的構(gòu)建
文件系統(tǒng)簡(jiǎn)介
Linux 學(xué)習(xí)記錄--軟件安裝 RPM|SRPM|YUM
文件特殊權(quán)限
目錄配置 FHS
文件內(nèi)容查閱
Boot Loader
文件壓縮
Linux 學(xué)習(xí)記錄--文件權(quán)限
Linux 命令縮寫(xiě)
命令與文件的查詢(xún)
文件|目錄的默認(rèn)權(quán)限與隱藏權(quán)限
shell script
服務(wù)
Linux 學(xué)習(xí)記錄--程序編譯與函數(shù)庫(kù)
正則表達(dá)式與其應(yīng)用
關(guān)機(jī)相關(guān)指令
shell
vim 與 vi 常用命令
系統(tǒng)調(diào)用:進(jìn)程控制
文件系統(tǒng)簡(jiǎn)單操作
磁盤(pán)掛載與卸載
有名管道通訊
磁盤(pán)分區(qū),格式化與檢驗(yàn)
工作管理與進(jìn)程管理
匿名管道通訊
Linux 學(xué)習(xí)記錄--啟動(dòng)流程
文件與目錄管理
管道命令
命名別名與歷史命令
文件備份|還原
shell變量
Linux 學(xué)習(xí)記錄--ACL 權(quán)限控制
內(nèi)核|內(nèi)核模塊編譯
文件管理相關(guān)系統(tǒng)編程

工作管理與進(jìn)程管理

始終不能明白進(jìn)程的正確理解和定義。就說(shuō)我自己的理解吧
進(jìn)程是 CPU 調(diào)度的基本單位,對(duì)于 unix like 來(lái)說(shuō),當(dāng)我們登錄取得 bash 時(shí),系統(tǒng)會(huì)根據(jù)用戶(hù)的uid 和 gid 分配給我們一個(gè)進(jìn)程,在當(dāng)前 bash 下,這個(gè)進(jìn)程就是所有進(jìn)程的父進(jìn)程,當(dāng)我們執(zhí)行一些命令時(shí),每個(gè)命令都由一個(gè)新的子進(jìn)程來(lái)完成。

工作管理

在單一終端下,可以同時(shí)進(jìn)行多項(xiàng)工作,如:一邊復(fù)制數(shù)據(jù),一邊查詢(xún)文件。每一項(xiàng)工作都由獨(dú)立的子進(jìn)程來(lái)完成,他們的父進(jìn)程就是當(dāng)前終端對(duì)應(yīng) bash 的那個(gè)進(jìn)程。

對(duì)于終端來(lái)說(shuō)分為前臺(tái)和后臺(tái)
前臺(tái):你可以控制于執(zhí)行命令的那個(gè)環(huán)境(串行工作)
后臺(tái):可以自行運(yùn)行的工作,無(wú)法使用 ctrl+c 終端它(并行工作)

如果所有的工作都由前臺(tái)來(lái)做,那么必須等一個(gè)工作處理完成才能進(jìn)行下一個(gè)工作,這樣做效率很低,因此我們可以把一些不需要人工交互的工作放到后臺(tái),使多個(gè)工作可以共同執(zhí)行

說(shuō)明:前臺(tái)和后臺(tái)是針對(duì)同一個(gè)終端來(lái)說(shuō),tty1環(huán)境是無(wú)法管理 tty2的

查看目前的后臺(tái)工作狀態(tài)(jobs)

語(yǔ)法:jobs[-lrs]
選項(xiàng)與參數(shù)
-l:列出工作與命令串之外,同時(shí)列出 PID
-r:僅列出后臺(tái) run 的工作
-s: 僅列出后臺(tái) stop 的工作

舉例

[root@localhost tmp]# jobs -l
[1]-  9154 停止                  vim newfile.txt
[2]+  9368 停止                  find / -print
[3]   9374 Running                 tar -jcpP -f /tmp/etc1.tar.bz2 /etc &

以上輸出的格式為:工作序號(hào)|順序 PID 狀態(tài) 命令
順序:分為(+,-,空白),+號(hào)代表最后一個(gè)被放到后臺(tái)的工作;-號(hào)代表倒數(shù)第二個(gè)被放到后臺(tái)的工作,倒數(shù)第三個(gè)及以后用空白

直接將命令放到后臺(tái)執(zhí)行 ( &)

[root@localhost tmp]# tar -jcpP -f/tmp/etc.tar.bz2 /etc &
[2] 8985 其中【2】表示工作號(hào),8985表示處理這個(gè)工作的子進(jìn)程號(hào)
如果我們將壓縮信息顯示出來(lái)
[root@localhost tmp]# tar –jcpP -v -f/tmp/etc.tar.bz2 /etc &
雖然這個(gè)工作在后臺(tái)進(jìn)行,但是輸出信息還是會(huì)在前臺(tái)輸出的,因此可以應(yīng)用數(shù)據(jù)流重定向?qū)⑤敵鲂畔?xiě)到文件

將目前工作放到后臺(tái)并暫停(ctrl+z)

[root@localhost tmp]# vim newfile.txt
=>按下 ctrl+z
[1]+ Stopped vimnewfile.txt

將后臺(tái)工作拿到前臺(tái)來(lái)處理(fg)

語(yǔ)法:fg %工作序號(hào)
fg –
fg +

將后臺(tái)工作由停止變?yōu)檫\(yùn)行(bg)

語(yǔ)法:fg %工作序號(hào)

舉例

[root@localhost tmp]# jobs -l;bg %2;jobs -l
[1]-  9154 停止                  vim newfile.txt
[2]+  9729 停止                  tar -jcpP -f /tmp/etc1.tar.bz2 /etc
[2]+ tar -jcpP -f /tmp/etc1.tar.bz2 /etc &
[1]+  9154 停止                  vim newfile.txt
[2]-  9729 Running                 tar -jcpP -f /tmp/etc1.tar.bz2 /etc &

后臺(tái)任務(wù)管理(kill)

語(yǔ)法:kill –signal %工作序號(hào)
Sighal:
1:重新讀取一次參數(shù)的配置文件
2:代表有 ctrl+c 同樣的操作
9:立刻強(qiáng)制刪除一個(gè)工作
15.以正常方式終止工作

說(shuō)明:unix like 中的信號(hào)64個(gè),比較復(fù)雜以后在整體學(xué)習(xí)

舉例

[root@localhost tmp]# jobs -l;kill -9 %1; jobs -l
[1]+  已殺死               tar -jcpP -f /tmp/etc1.tar.bz2 /etc

進(jìn)程管理

進(jìn)程的查看

靜態(tài)進(jìn)程查看(ps)

語(yǔ)法
ps aux|ps -lA 查看系統(tǒng)所有進(jìn)程數(shù)據(jù)
ps –l 查看自己相關(guān)進(jìn)程
ps –axjf 查看進(jìn)程樹(shù)

舉例

[root@localhost ~]# su -l tkf
[tkf@localhost tmp]$ tar -cjPp -f ./home.bz2 /home 

[1]+  Stopped                 tar -cjPp -f ./home.bz2 /home

查看 ps -l
[tkf@localhost tmp]$ ps -l
F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S   500 10894 10893  0  75   0 -  1224 wait   pts/1    00:00:00 bash
0 T   500 10951 10894  0  78   0 -  1224 finish pts/1    00:00:00 tar
0 T   500 10952 10951  0  78   0 -  2289 finish pts/1    00:00:01 bzip2

查看 ps -lA
[tkf@localhost tmp]$ ps –lA
F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S     0    1     0  0  75   0 -   544 stext  ?        00:00:00 init
0 R     0 10691    1  0  75   0 - 20262 stext  ?        00:00:01 gnome-terminal
4 S     0 10694 10691  0  77   0 -   649 stext  ?        00:00:00 gnome-pty-help
0 S     0 10695 10691  0  76   0 -  1253 wait   pts/1    00:00:00 bash
4 S     0 10893 10695  0  78   0 -  1319 wait   pts/1    00:00:00 su
4 S   500 10894 10893  0  75   0 -  1224 wait   pts/1    00:00:00 bash
0 T   500 10951 10894  0  78   0 -  1224 finish pts/1    00:00:00 tar
0 T   500 10952 10951  0  78   0 -  2289 finish pts/1    00:00:01 bzip2

處理 Init 程序的進(jìn)程為所有進(jìn)程的父進(jìn)程 tar 命令內(nèi)部會(huì)調(diào)用 bzip2命令因此產(chǎn)生10952進(jìn)程,且bzip2進(jìn)程的父進(jìn)程就是 tar 進(jìn)程

l F:代表這個(gè)程序旗標(biāo) (process flags),說(shuō)明這個(gè)程序的總結(jié)權(quán)限,常見(jiàn)號(hào)碼有:
若為 4 表示此程序的權(quán)限為 root ;
若為 1 則表示此子程序僅進(jìn)行復(fù)制(fork)而沒(méi)有實(shí)際運(yùn)行(exec)。
l S:代表這個(gè)程序的狀態(tài) (STAT),主要的狀態(tài)有:
R (Running):該程序正在運(yùn)行中;
S (Sleep):該程序目前正在睡眠狀態(tài)(idle),但可以被喚醒(signal)。
D :不可被喚醒的睡眠狀態(tài),通常這支程序可能在等待 I/O 的情況(ex>列印)
T :停止?fàn)顟B(tài)(stop),可能是在工作控制(背景暫停)或除錯(cuò) (traced) 狀態(tài);
Z (Zombie):僵尸狀態(tài),程序已經(jīng)終止但卻無(wú)法被移除至內(nèi)存外。
l UID/PID/PPID:代表[此程序被該 UID 所擁有/程序的 PID 號(hào)碼/此程序的父程序 PID 號(hào)碼]
l C:代表 CPU 使用率,單位為百分比;
l PRI/NI:Priority/Nice 的縮寫(xiě),代表此程序被 CPU 所運(yùn)行的優(yōu)先順序,數(shù)值越小代表該程序越快被 CPU 運(yùn)行。
l ADDR/SZ/WCHAN:都與內(nèi)存有關(guān),ADDR 是 kernel function,指出該程序在內(nèi)存的哪個(gè)部分,如果是個(gè) running 的程序,一般就會(huì)顯示[- ] / SZ 代表此程序用掉多少內(nèi)存 / WCHAN 表示目前程序是否運(yùn)行中,同樣的,若為 - 表示正在運(yùn)行中。
l TTY:登陸者的終端機(jī)位置,若為遠(yuǎn)程登陸則使用動(dòng)態(tài)終端介面 (pts/n);
l TIME:使用掉的 CPU 時(shí)間,注意,是此程序?qū)嶋H花費(fèi) CPU 運(yùn)行的時(shí)間,而不是系統(tǒng)時(shí)間;
l CMD:簡(jiǎn)單描述命令

查看 ps aux
[tkf@localhost tmp]$ ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0   2176   640 ?        Ss   08:50   0:00 init [5]  
root     10691  0.1  0.8  81336 17104 ?        Sl   15:03   0:04 gnome-terminal
root     10694  0.0  0.0   2596   676 ?        S    15:03   0:00 gnome-pty-helper
root     10695  0.0  0.0   5012  1476 pts/1    Ss   15:03   0:00 bash
root     10893  0.0  0.0   5276  1312 pts/1    S    15:16   0:00 su -l tkf
tkf      10894  0.0  0.0   4896  1444 pts/1    S    15:16   0:00 -bash
tkf      10951  0.0  0.0   4896   992 pts/1    T    15:18   0:00 tar -cjPp -f ./home.bz2 /home
tkf      10952  0.0  0.3   9156  7792 pts/1    T    15:18   0:01 bzip2

USER:該 process 屬於那個(gè)使用者帳號(hào)的?
PID :該 process 的程序識(shí)別碼。
%CPU:該 process 使用掉的 CPU 資源百分比;
%MEM:該 process 所占用的實(shí)體內(nèi)存百分比;
VSZ :該 process 使用掉的虛擬內(nèi)存量 (Kbytes)
RSS :該 process 占用的固定的內(nèi)存量 (Kbytes)
TTY :該 process 是在那個(gè)終端機(jī)上面運(yùn)行,若與終端機(jī)無(wú)關(guān)則顯示 ?,另外, tty1-tty6 是本機(jī)上面的登陸者程序,若為 pts/0 等等的,則表示為由網(wǎng)絡(luò)連接進(jìn)主機(jī)的程序。
STAT:該程序目前的狀態(tài),狀態(tài)顯示與 ps -l 的 S 旗標(biāo)相同 (R/S/T/Z)
START:該 process 被觸發(fā)啟動(dòng)的時(shí)間;
TIME :該 process 實(shí)際使用 CPU 運(yùn)行的時(shí)間。
COMMAND:詳細(xì)描述命令

查看 ps axjf
[tkf@localhost tmp]$ ps axjf
PPID   PID  PGID   SID TTY      TPGID STAT   UID   TIME COMMAND
    1 10691  4628  4628 ?           -1 Sl       0   0:06 gnome-terminal
10691 10694  4628  4628 ?           -1 S        0   0:00  \_ gnome-pty-helper
10691 10695 10695 10695 pts/1    11743 Ss       0   0:00  \_ bash
10695 10893 10893 10695 pts/1    11743 S        0   0:00      \_ su -l tkf
10893 10894 10894 10695 pts/1    11743 S      500   0:00          \_ -bash
10894 10951 10951 10695 pts/1    11743 T      500   0:00              \_ tar -cjPp -f ./home.bz2 /home
10951 10952 10951 10695 pts/1    11743 T      500   0:01              |   \_ bzip2

動(dòng)態(tài)進(jìn)程查看(top)

語(yǔ)法:top[-d 數(shù)字] [-bn 數(shù)字] [-p pid]
選項(xiàng)與參數(shù)
-d:動(dòng)態(tài)刷新時(shí)間間隔
-b:以批次方式執(zhí)行,與-n 連用
-n:執(zhí)行次數(shù)
-p:查看單個(gè)進(jìn)程信息

在top 執(zhí)行過(guò)程中可以使用的命令
?:顯示幫助文檔
P:以 CPU 使用資源排序
M: 以 mem 使用資源排序
N: 以 PID 排序
T: 以 TIME+排序
k:給某個(gè) PID 一個(gè)信號(hào)
r:給某個(gè) PID 設(shè)置新的 Ni 值
q:離開(kāi)
Z|z:設(shè)置|取消顏色
B|b:設(shè)置|取消關(guān)鍵字加粗
W:將設(shè)置信息寫(xiě)入配置文件
n:顯示進(jìn)程數(shù)量
c:顯示完整的 command
u:設(shè)置查看某個(gè) USER 的進(jìn)程

舉例

[tkf@localhost ~]$ top

top - 10:08:12 up 55 min,  2 users,  load average: 0.01, 0.01, 0.00
Tasks: 162 total,   1 running, 160 sleeping,   0 stopped,   1 zombie
Cpu(s):  1.5%us,  0.7%sy,  0.0%ni, 97.7%id,  0.0%wa,  0.2%hi,  0.0%si,  0.0
Mem:   2074908k total,   640268k used,  1434640k free,    41856k buffers
Swap:  1020088k total,        0k used,  1020088k free,   387260k cached

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND  
4784 root      15   0 64580  17m  10m S  5.4  0.9   0:06.63 gnome-terminal                                                                    
4502 root      16   0  148m  11m 5964 S  0.6  0.6   0:12.18 Xorg 

特殊字段說(shuō)明
us 用戶(hù)空間占用 CPU 百分比
sy 內(nèi)核空間占用 CPU 百分比
ni 用戶(hù)進(jìn)程空間內(nèi)改變過(guò)優(yōu)先級(jí)的進(jìn)程占用 CPU 百分比
id 空閑 CPU 百分比
wa 等待輸入輸出的 CPU 時(shí)間百分比
hi 硬件中斷
si 軟件中斷
st: 實(shí)時(shí)

USER:該 process 所屬的使用者;
PR :Priority 的簡(jiǎn)寫(xiě),程序的優(yōu)先運(yùn)行順序,越小越早被運(yùn)行;
NI :Nice 的簡(jiǎn)寫(xiě),與 Priority 有關(guān),也是越小越早被運(yùn)行;
%CPU:CPU 的使用率;
%MEM:內(nèi)存的使用率;
TIME+:CPU 使用時(shí)間的累加;

進(jìn)程樹(shù)查看(pstree)

語(yǔ)法:pstree[-A|-U] [-up]
選項(xiàng)與參數(shù)
-A :各程序樹(shù)之間的連接以 ASCII 字節(jié)來(lái)連接;
-U :各程序樹(shù)之間的連接以 unicode 的字節(jié)來(lái)連接。在某些終端介面下可能會(huì)有錯(cuò)誤;
-p :并同時(shí)列出每個(gè) process 的 PID;
-u :并同時(shí)列出每個(gè) process 的所屬帳號(hào)名稱(chēng)。

舉例

[tkf@localhost ~]$ pstree -Apu
init(1)-+-/usr/bin/sealer(4774)
        |-acpid(3891)
        |-atd(4227)
        |-auditd(3599)-+-audispd(3601)---{audispd}(3602)
        |              `-{auditd}(3600)
        |-automount(3994)-+-{automount}(3995)
        |                 |-{automount}(3996)
        |                 |-{automount}(3999)
        |                 `-{automount}(4002)

進(jìn)程的管理

進(jìn)程的管理就是給進(jìn)程發(fā)送一個(gè)信號(hào),告訴進(jìn)程做什么事情
語(yǔ)法:kill –signal PID
killall [-iIe] –signal 服務(wù)名稱(chēng)

說(shuō)明 使用 kill 需要知道 PID,killall 根據(jù)服務(wù)發(fā)送信號(hào)

舉例1:給 bash 進(jìn)程發(fā)送信號(hào)1
[root@localhost ~]# kill -1 $(ps aux |awk '{print $11 "" $2}'|grep '^bash'|awk '{print $2}')

舉例2:給 bash 這個(gè)服務(wù)對(duì)應(yīng)的進(jìn)程發(fā)送信號(hào)1
[root@localhost ~]# killall -i -1 bash Kill bash(10202) ? (y/N)

設(shè)置進(jìn)程優(yōu)先級(jí)(nice)

進(jìn)程的優(yōu)先級(jí)相關(guān)的只要是 PRI 與 NI 這兩個(gè)值, 數(shù)值越小優(yōu)先級(jí)越高,PRI 是系統(tǒng)內(nèi)核設(shè)置的,用戶(hù)無(wú)法設(shè)置,用戶(hù)只能是指 NI 值來(lái)改變進(jìn)程的優(yōu)先級(jí)
進(jìn)程的優(yōu)先級(jí)=PRI+NI

在執(zhí)行命令時(shí)給予新的 NI 值
語(yǔ)法:nice –n 數(shù)值 命令
數(shù)值的范圍從-20~19

設(shè)置以及啟動(dòng)的進(jìn)程
語(yǔ)法:renice 數(shù)值 PID

舉例

[root@localhost ~]# nice -n 4 vim &
[1] 11467
[root@localhost ~]# ps -l|grep 'vim'
F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
0 T     0 11467 10202  0  81   4 -  2525 finish pts/1    00:00:00 vim

[root@localhost ~]# renice -6 $(ps -l|grep 'vim'|awk '{print $4}')
11467: old priority 4, new priority -6
[root@localhost ~]# ps -l|grep 'vim'
0 T     0 11467 10202  0  71  -6 -  2525 finish pts/1    00:00:00 vim

查詢(xún)文件|目錄與進(jìn)程使用關(guān)系

我們經(jīng)常會(huì)遇到這種情況,要?jiǎng)h除某個(gè)文件或卸載某個(gè)文件系統(tǒng),提示我們正在使用,無(wú)法被刪除,此時(shí)我們就需要找到哪些進(jìn)程正在使用它們,“殺死“這些進(jìn)程后我們才能刪除這些文件
查詢(xún)文件被哪個(gè)進(jìn)程使用(fuser)

語(yǔ)法:fuser[-umv] [-ki -signal] file/dir
選項(xiàng)與參數(shù)
-u:列出 user
-m:會(huì)查詢(xún)后面文件所在的文件系統(tǒng)
-v:列出詳細(xì)命令
-k:找出使用該文件 PID 并試圖發(fā)送 SIGKILL 這個(gè)信號(hào)給這個(gè)進(jìn)程
-i:與-k 連用,發(fā)送信號(hào)之前詢(xún)問(wèn)用戶(hù)

舉例

[root@localhost tmp]# tar -jtv -f ./etc.tar.bz2 > ./newfile.txt 
= >按下 ctrl+z 工作在后臺(tái)暫停
[1]+  Stopped                 tar -jtv -f ./etc.tar.bz2 > ./newfile.txt
[root@localhost tmp]# fuser -uv ./etc.tar.bz2 
                     USER        PID ACCESS COMMAND
./etc.tar.bz2:       root      11822 f.... (root)bzip2
= >這個(gè)文件正在被11822這個(gè)進(jìn)程所使用

查詢(xún)進(jìn)程正在使用的文件(lsof)

語(yǔ)法:lsof [-aUu][+d]
選項(xiàng)與參數(shù)
-a :多項(xiàng)數(shù)據(jù)需要同時(shí)成立才顯示出結(jié)果時(shí)
-U :僅列出 Unixlike 系統(tǒng)的 socket 文件類(lèi)型;
-u :后面接 username,列出該使用者相關(guān)程序所開(kāi)啟的文件;
+d :后面接目錄,找出某個(gè)目錄底下已經(jīng)被開(kāi)啟的文件

舉例:查看 tar 對(duì)應(yīng)經(jīng)常所打開(kāi)的文件

[root@localhost tmp]# lsof |grep '^tar'
COMMAND     PID      USER   FD      TYPE     DEVICE SIZE/OFF       NODE NAME
tar       11821      root  cwd       DIR        8,2     4096     745569 /tmp
tar       11821      root  rtd       DIR        8,2     4096          2 /
tar       11821      root  txt       REG        8,2   229652    1199406 /bin/tar
……..
tar       11821      root    2u      CHR      136,1      0t0          3 /dev/pts/1
tar       11821      root    3r     FIFO        0,6      0t0      38124 pipe

查詢(xún)正在執(zhí)行進(jìn)程的 PID

語(yǔ)法:pidof [-sx] 程序名
選項(xiàng)與參數(shù)
-s:僅列出一個(gè) PID
-x:列出程序所對(duì)應(yīng)進(jìn)程的父進(jìn)程的 PID

舉例
[root@localhost tmp]# ps aux |grep $(pidoftar)|grep -v 'grep' root 11821 0.0 0.0 4880 944 pts/1 T< 13:09 0:00 tar -jtv -f./etc.tar.bz2