這篇文章寫的不錯:
http://www.cnblogs.com/CheeseZH/p/5169498.html
關注Linux的系統狀態,主要從兩個角度出發:
一個角度是系統正在運行什麼服務(ps命令);
另外一個就是有什麼連接或服務可用(netstat命令)。
netstat還可以顯示ps無法顯示的、從inetd或xinetd中運行的服務,比如telnet等。
一、ps -ef 命令和ps -aux命令
1.1、ps -ef | grep詳解
ps命令將某個進程顯示出來
grep命令是查找
中間的|是管道命令 是指ps命令與grep同時執行
PS是LINUX下最常用的也是非常強大的進程查看命令
ps -e 此參數的效果和指定"A"參數相同。
ps f 用ASCII字符顯示樹狀結構,表達程序間的相互關係。
grep命令是查找,是一種強大的文本搜索工具,它能使用正則表達式搜索文本,並把匹配的行打印出來。
grep全稱是Global Regular Expression Print,表示全局正則表達式版本,它的使用權限是所有用戶。
以下這條命令是檢查java 進程是否存在:ps -ef |grep java
字段含義如下:
UID PID PPID C STIME TTY TIME CMD
zzw 14124 13991 0 00:38 pts/0 00:00:00 grep --color=auto dae
UID :程序被該 UID 所擁有
PID :就是這個程序的 ID
PPID :則是其上級父程序的ID
C :CPU使用的資源百分比
STIME :系統啓動時間
TTY :登入者的終端機位置
TIME :使用掉的CPU時間。
CMD :所下達的是什麼指令
1.2 ps -aux | grep命令
ps是顯示當前狀態處於running的進程,grep表示在這些裏搜索,而ps aux是顯示所有進程和其狀態。
$ ps aux | grep amoeba 查到amoeba的進程
ps aux輸出格式:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
格式說明:
USER: 行程擁有者
PID: pid
%CPU: 佔用的 CPU 使用率
%MEM: 佔用的記憶體使用率
VSZ: 佔用的虛擬記憶體大小
RSS: 佔用的記憶體大小
TTY: 終端的次要裝置號碼 (minor device number of tty)
STAT: 該行程的狀態,linux的進程有5種狀態:
D 不可中斷 uninterruptible sleep (usually IO)
R 運行 runnable (on run queue)
S 中斷 sleeping
T 停止 traced or stopped
Z 僵死 a defunct (”zombie”) process
注: 其它狀態還包括W(無駐留頁), <(高優先級進程), N(低優先級進程), L(內存鎖頁).
START: 行程開始時間
TIME: 執行的時間
COMMAND:所執行的指令
1) ps a 顯示現行終端機下的所有程序,包括其他用戶的程序。
2)ps -A 顯示所有程序。
3)ps c 列出程序時,顯示每個程序真正的指令名稱,而不包含路徑,參數或常駐服務的標示。
4)ps -e 此參數的效果和指定"A"參數相同。
5)ps e 列出程序時,顯示每個程序所使用的環境變量。
6)ps f 用ASCII字符顯示樹狀結構,表達程序間的相互關係。
7)ps -H 顯示樹狀結構,表示程序間的相互關係。
8)ps -N 顯示所有的程序,除了執行ps指令終端機下的程序之外。
9)ps s 採用程序信號的格式顯示程序狀況。
10)ps S 列出程序時,包括已中斷的子程序資料。
11)ps -t 指定終端機編號,並列出屬於該終端機的程序的狀況。
12)ps u 以用戶爲主的格式來顯示程序狀況。
13)ps x 顯示所有程序,不以終端機來區分。
二、netstat -apn命令
netstat -anp查看端口占用情況
-a,顯示所有
-n,不用別名顯示,只用數字顯示
-p,顯示進程號和進程名
三、問題解決
今天發現服務器上Tomcat 8080端口起不來,老提示端口已經被佔用。
使用命令:
ps -aux | grep tomcat
發現並沒有8080端口的Tomcat進程。
使用命令:netstat –apn
查看所有的進程和端口使用情況。發現下面的進程列表,其中最後一欄是PID/Program name
clip_image002
發現8080端口被PID爲9658的Java進程佔用。
進一步使用命令:ps -aux | grep java,或者直接:ps -aux | grep pid 查看
clip_image004
就可以明確知道8080端口是被哪個程序佔用了!然後判斷是否使用KILL命令幹掉!
方法二:直接使用 netstat -anp | grep portno
即:netstat –apn | grep 8080
ps是顯示當前狀態處於running的進程,grep表示在這些裏搜索,而ps aux是顯示所有進程和其狀態。
$ ps aux | grep amoeba
查到amoeba的進程
參考資料: