## 進程列表
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?分區的進程
#?strace?df??????????????????????????
#?跟蹤系統調用和信號
#?truss?df???????????????????????????
#?同上(FreeBSD/Solaris/類Unix)
#?history?|?tail?-50?????????????????
#?顯示最后50個使用過的命令
~~~
## 優先級
用?`renice`?更改正在運行進程的優先級。負值是更高的優先級,最小為-20,其正值與 "nice" 值的意義相同。 #?renice?-5?586??????????????????????
#?更強的優先級586:?old?priority?0,?new?priority?-5
使用?`nice`?命令啟動一個已定義優先級的進程。 正值為低優先級,負值為高優先級。確定你知道?`/usr/bin/nice`?或者使用 shell 內置命令(`# which nice`)。
~~~
#?nice?-n?-5?top?????????????????????
#?更高優先級(/usr/bin/nice)
#?nice?-n?5?top??????????????????????
#?更低優先級(/usr/bin/nice)
#?nice?+5?top????????????????????????
#?tcsh?內置?nice?命令(同上)
~~~
nice 可以影響 CPU 的調度,另一個實用命令?`ionice`?可以調度磁盤 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?并且設為高優先級
#?ionice?-c3?-p$$????????????????????
#?將當前的進程(shell)的磁盤?IO?調度設置為?idle?類型
~~~
例中最后一條命令對于編譯(或調試)一個大型項目會非常有用。每一個運行于此 shell 的命令都會有一個較低的優先級,但并不妨礙這個系統。$$ 是你 shell 的 pid (試試 echo $$)。
## 前臺/后臺
當一個進程在 shell 中已運行,可以使用?`[Ctrl]-[Z] (^Z)`,?`bg`?和?`fg`?來 調入調出前后臺。舉個例子:啟動 2 個進程,調入后臺。使用?`jobs`?列出后臺列表,然后再調入一個進程到前臺。 #?ping?cb.vu?>?ping.log
^Z???????????????????????????????????
#?ping?使用?[Ctrl]-[Z]?來暫停(停止)?
#?bg?????????????????????????????????
#?調入后臺繼續運行#?jobs?-l????????????????????????????
#?后臺進程列表[1]??-?36232?Running???????????????????????ping?cb.vu?>?ping.log
[2]??+?36233?Suspended?(tty?output)????????top
#?fg?%2??????????????????????????????
#?讓進程?2?返回到前臺運行
使用?`nohup`?開啟一個持續運行的進程直到 shell 被關閉(避免掛斷)。 #?nohup?ping?-i?60?>?ping.log?&
## Top
`top`?程序用來實時顯示系統中各個進程的運行信息。 #?top
當?`top`?在運行的時候,按下?`h`?鍵會顯示幫助畫面。常用鍵如下:
-
**u [用戶名]**?只顯示屬于此用戶的進程。使用 + 或者空白可以查看所有用戶
-
**k [PID]**?結束 PID 進程
-
**1**?顯示所有進程狀態信息(只有Linux)
-
**R**?將當前排序倒轉
## Kill命令與信號
使用?`kill`?或?`killall`?終止或發送一個信號給進程。
~~~
#?ping?-i?60?cb.vu?>?ping.log?& [1]?4712
#?kill?-s?TERM?4712??????????????????
#?同?kill?-15?4712
#?killall?-1?httpd???????????????????
#?發送?HUP?信號終止進程?httpd
#?pkill?-9?http??????????????????????
#?發送?TERM?信號終止包含?http?的進程
#?pkill?-TERM?-u?www?????????????????
#?發送?TERM?信號終止?www?所有者進程#?fuser?-k?-TERM?-m?/home????????????
#?終止所有訪問?/home?的進程(卸載該分區前)
~~~
下面是一些重要的信號:
- 1 ? ? ??`HUP`?(掛起)
- 2 ? ? ??`INT`?(中斷)
- 3 ? ? ??`QUIT`?(退出)
- 9 ? ? ??`KILL`?(KILL 信號不能被捕捉,不能被忽略。)
- 15 ? ??`TERM`?(軟件終止信號)