UNIX進(jìn)程

2018-11-24 15:12 更新

進(jìn)程列表

PID是每個(gè)進(jìn)程唯一號碼。使用 ps 獲取所有正在運(yùn)行的進(jìn)程列表。

# ps -auxefw                         
# 所有正在運(yùn)行進(jìn)程的詳盡列表

然而,更典型的用法是使用管道或者 pgrep:

# ps axww | grep cron
  586  ??  Is     0:01.48 /usr/sbin/cron -s
# ps aux | grep 'ss[h]'              
# Find all ssh pids without the grep pid
# pgrep -l sshd                      
# 查找所有進(jìn)程名中有sshd的進(jìn)程ID
# echo $$                            
# The PID of your shell
# fuser -va 22/tcp                   
# 列出使用端口22的進(jìn)程
# fuser -va /home                    
# 列出訪問 /home 分區(qū)的進(jìn)程
# strace df                          
# 跟蹤系統(tǒng)調(diào)用和信號
# truss df                           
# 同上(FreeBSD/Solaris/類Unix)
# history | tail -50                 
# 顯示最后50個(gè)使用過的命令

優(yōu)先級

用 renice 更改正在運(yùn)行進(jìn)程的優(yōu)先級。負(fù)值是更高的優(yōu)先級,最小為-20,其正值與 "nice" 值的意義相同。 # renice -5 586                      

 更強(qiáng)的優(yōu)先級586: old priority 0, new priority -5

使用 nice 命令啟動(dòng)一個(gè)已定義優(yōu)先級的進(jìn)程。 正值為低優(yōu)先級,負(fù)值為高優(yōu)先級。確定你知道 /usr/bin/nice 或者使用 shell 內(nèi)置命令(# which nice)。

# nice -n -5 top                     
# 更高優(yōu)先級(/usr/bin/nice)
# nice -n 5 top                      
# 更低優(yōu)先級(/usr/bin/nice)
# nice +5 top                        
# tcsh 內(nèi)置 nice 命令(同上)

nice 可以影響 CPU 的調(diào)度,另一個(gè)實(shí)用命令 ionice 可以調(diào)度磁盤 IO。This is very useful for intensive IO application which can bring a machine to its knees while still in a lower priority. 此命令僅可在 Linux (AFAIK) 上使用。你可以選擇一個(gè)類型(idle - best effort - real time),它的 man 頁很短并有很好的解釋。

# ionice c3 -p123                    
# 給 pid 123 設(shè)置為 idle 類型
# ionice -c2 -n0 firefox             
# 用 best effort 類型運(yùn)行 firefox 并且設(shè)為高優(yōu)先級
# ionice -c3 -p$$                    
# 將當(dāng)前的進(jìn)程(shell)的磁盤 IO 調(diào)度設(shè)置為 idle 類型

例中最后一條命令對于編譯(或調(diào)試)一個(gè)大型項(xiàng)目會非常有用。每一個(gè)運(yùn)行于此 shell 的命令都會有一個(gè)較低的優(yōu)先級,但并不妨礙這個(gè)系統(tǒng)。$$ 是你 shell 的 pid (試試 echo $$)。

前臺/后臺

當(dāng)一個(gè)進(jìn)程在 shell 中已運(yùn)行,可以使用 [Ctrl]-[Z] (^Z)bg 和 fg 來 調(diào)入調(diào)出前后臺。舉個(gè)例子:啟動(dòng) 2 個(gè)進(jìn)程,調(diào)入后臺。使用 jobs 列出后臺列表,然后再調(diào)入一個(gè)進(jìn)程到前臺。 # ping cb.vu > ping.log
^Z                                   

 ping 使用 [Ctrl]-[Z] 來暫停(停止) 

# bg                                 
# 調(diào)入后臺繼續(xù)運(yùn)行# jobs -l                            
# 后臺進(jìn)程列表[1]  - 36232 Running                       ping cb.vu > ping.log
[2]  + 36233 Suspended (tty output)        top
# fg %2                              
# 讓進(jìn)程 2 返回到前臺運(yùn)行

使用 nohup 開啟一個(gè)持續(xù)運(yùn)行的進(jìn)程直到 shell 被關(guān)閉(避免掛斷)。 # nohup ping -i 60 > ping.log &

Top

top 程序用來實(shí)時(shí)顯示系統(tǒng)中各個(gè)進(jìn)程的運(yùn)行信息。 # top

當(dāng) top 在運(yùn)行的時(shí)候,按下 h 鍵會顯示幫助畫面。常用鍵如下:

  • u [用戶名] 只顯示屬于此用戶的進(jìn)程。使用 + 或者空白可以查看所有用戶

  • k [PID] 結(jié)束 PID 進(jìn)程

  • 1 顯示所有進(jìn)程狀態(tài)信息(只有Linux)

  • R 將當(dāng)前排序倒轉(zhuǎn)

Kill命令與信號

使用 kill 或 killall 終止或發(fā)送一個(gè)信號給進(jìn)程。

# ping -i 60 cb.vu > ping.log & [1] 4712
# kill -s TERM 4712                  
# 同 kill -15 4712
# killall -1 httpd                   
# 發(fā)送 HUP 信號終止進(jìn)程 httpd
# pkill -9 http                      
# 發(fā)送 TERM 信號終止包含 http 的進(jìn)程
# pkill -TERM -u www                 
# 發(fā)送 TERM 信號終止 www 所有者進(jìn)程# fuser -k -TERM -m /home            
# 終止所有訪問 /home 的進(jìn)程(卸載該分區(qū)前)

下面是一些重要的信號:

  • 1       HUP (掛起)
  • 2       INT (中斷)
  • 3       QUIT (退出)
  • 9       KILL (KILL 信號不能被捕捉,不能被忽略。)
  • 15     TERM (軟件終止信號)
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號