UNIX進程

2018-11-24 15:12 更新

進程列表

PID是每個進程唯一號碼。使用 ps 獲取所有正在運行的進程列表。

# ps -auxefw                         
# 所有正在運行進程的詳盡列表

然而,更典型的用法是使用管道或者 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                      
# 查找所有進程名中有sshd的進程ID
# echo $$                            
# The PID of your shell
# fuser -va 22/tcp                   
# 列出使用端口22的進程
# fuser -va /home                    
# 列出訪問 /home 分區(qū)的進程
# strace df                          
# 跟蹤系統(tǒng)調(diào)用和信號
# truss df                           
# 同上(FreeBSD/Solaris/類Unix)
# history | tail -50                 
# 顯示最后50個使用過的命令

優(yōu)先級

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

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

使用 nice 命令啟動一個已定義優(yōu)先級的進程。 正值為低優(yōu)先級,負值為高優(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)度,另一個實用命令 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) 上使用。你可以選擇一個類型(idle - best effort - real time),它的 man 頁很短并有很好的解釋。

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

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

前臺/后臺

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

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

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

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

Top

top 程序用來實時顯示系統(tǒng)中各個進程的運行信息。 # top

當 top 在運行的時候,按下 h 鍵會顯示幫助畫面。常用鍵如下:

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

  • k [PID] 結束 PID 進程

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

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

Kill命令與信號

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

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

下面是一些重要的信號:

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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號