關(guān)于Linux下ps命令的10個(gè)基本例子是什么
關(guān)于Linux下ps命令的10個(gè)基本例子是什么
在Linux下ps命令是用于查看系統(tǒng)上運(yùn)行的進(jìn)程的最基本的命令之一。它提供了當(dāng)前進(jìn)程的同時(shí),如用戶ID,CPU使用率,內(nèi)存使用率,命令名稱等,它不顯示實(shí)時(shí)數(shù)據(jù),如top或htop命令的詳細(xì)信息。但是,即使是功能和輸出簡單,但它仍然是一個(gè)必用的過程管理/監(jiān)控工具,每一個(gè)Linux新手應(yīng)該知道這一點(diǎn),好好學(xué)習(xí)。在學(xué)習(xí)啦小編的這篇文章中,我們將使用ps命令以不同的方式來查看進(jìn)程、篩選和排序它們,以加強(qiáng)基礎(chǔ)部分。
語法注意:
ps命令帶有2種不一樣的風(fēng)格,分別是BSD和UNIX。新用戶經(jīng)常會混淆和錯(cuò)誤地解釋這兩種風(fēng)格。所以要弄清楚他們,繼續(xù)操作之前這里是一些基本的信息。
注意:"ps aux"和"ps -aux"不相同。例如"-u"用來顯示該用戶的進(jìn)程。但是"u"則是顯示詳細(xì)的信息。
BSD風(fēng)格:在BSD風(fēng)格的語法選項(xiàng)前不帶連字符。
ps aux
UNIX/LINUX的風(fēng)格:在linux風(fēng)格的語法選項(xiàng)前面有一個(gè)破折號如常。…
ps -ef 混合使用兩種Linux系統(tǒng)上的語法風(fēng)格是好事兒。例如“ps ax -f”。但在這篇文章中,我們將主要集中在UNIX風(fēng)格的語法。
如何使用ps命令呢?
1、顯示所有進(jìn)程:
下面的命令將列出所有的進(jìn)程:
代碼如下:
$ ps ax
$ ps -ef
加上管道輸出給less,來滾動顯示
"u"或者"-f"參數(shù)來顯示所有進(jìn)程的詳細(xì)信息
代碼如下:
___FCKpd___0nbsp;ps aux
___FCKpd___0nbsp;ps -ef -f
注意:為什么用戶列不顯示我的用戶名,但顯示其他用戶,如root、www等,對于所有的用戶名(包括你)如果長度大于8個(gè)字符,然后ps將只顯示UID,而不是用戶名。
2、根據(jù)用戶顯示進(jìn)程:
由進(jìn)程的所屬用戶使用“-u”選項(xiàng)后跟用戶名來顯示。多個(gè)用戶名可以提供以逗號分隔。
代碼如下:
___FCKpd___1nbsp;ps -f -u www-data
UID PID PPID C STIME TTY TIME CMD
www-data 1329 1328 0 09:32 ? 00:00:00 nginx: worker process
www-data 1330 1328 0 09:32 ? 00:00:00 nginx: worker process
www-data 1332 1328 0 09:32 ? 00:00:00 nginx: worker process
www-data 1377 1372 0 09:32 ? 00:00:00 php-fpm: pool a.localhost
www-data 1378 1372 0 09:32 ? 00:00:00 php-fpm: pool a.localhost
www-data 4524 2359 0 10:03 ? 00:00:00 /usr/sbin/apache2 -k start
www-data 4527 2359 0 10:03 ? 00:00:00 /usr/sbin/apache2 -k start
www-data 4528 2359 0 10:03 ? 00:00:00 /usr/sbin/apache2 -k start
3、通過名字和進(jìn)程ID顯示進(jìn)程:
通過名字或命令搜索進(jìn)程,使用“-C”選項(xiàng)后面加搜索詞。
代碼如下:
___FCKpd___2nbsp;ps -C apache2
PID TTY TIME CMD
2359 ? 00:00:00 apache2
4524 ? 00:00:00 apache2
4525 ? 00:00:00 apache2
...
4、根據(jù)CPU或者內(nèi)存進(jìn)行排序:
系管理員經(jīng)常希望找出那些消耗大量內(nèi)存或CPU的進(jìn)程。排序選項(xiàng)將基于特定的字段或參數(shù)讓進(jìn)程列表進(jìn)行排序。
“–sort”選項(xiàng)由逗號分隔的多個(gè)字段可以用指定。此外,該字段可以帶有前綴“-”或“”符號,表示降序或升序分別排序。通過進(jìn)程列表進(jìn)行排序有很多參數(shù),你可以檢查手冊頁的完整列表。
___FCKpd___3nbsp;ps aux --sort=-pcpu,+pmem
顯示前5個(gè)消耗了大部分的CPU進(jìn)程。
代碼如下:
___FCKpd___4nbsp;ps aux --sort=-pcpu | head -5
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 2.6 0.7 51396 7644 ? Ss 02:02 0:03 /usr/lib/systemd/systemd --switched-root --system --deserialize 23
root 1249 2.6 3.0 355800 30896 tty1 Rsl+ 02:02 0:02 /usr/bin/X -background none :0 vt01 -nolisten tcp
root 508 2.4 1.6 248488 16776 ? Ss 02:02 0:03 /usr/bin/python /usr/sbin/firewalld --nofork
silver 1525 2.1 2.3 448568 24392 ? S 02:03 0:01 /usr/bin/python /usr/share/system-config-printer/applet.py
5、用樹的風(fēng)格顯示進(jìn)程的層次關(guān)系:
許多進(jìn)程實(shí)際上是一些父進(jìn)程分的分支,知道這父子進(jìn)程關(guān)系往往是有用的。在'–forest'選項(xiàng)將建立ASCII藝術(shù)風(fēng)格層次的樹視圖。
下面的命令將搜索進(jìn)程名字為Apache2,形成一個(gè)樹結(jié)構(gòu)來顯示詳細(xì)的信息。
代碼如下:
___FCKpd___5nbsp;ps -f --forest -C apache2
UID PID PPID C STIME TTY TIME CMD
root 2359 1 0 09:32 ? 00:00:00 /usr/sbin/apache2 -k start
www-data 4524 2359 0 10:03 ? 00:00:00 \_ /usr/sbin/apache2 -k start
www-data 4525 2359 0 10:03 ? 00:00:00 \_ /usr/sbin/apache2 -k start
www-data 4526 2359 0 10:03 ? 00:00:00 \_ /usr/sbin/apache2 -k start
www-data 4527 2359 0 10:03 ? 00:00:00 \_ /usr/sbin/apache2 -k start
www-data 4528 2359 0 10:03 ? 00:00:00 \_ /usr/sbin/apache2 -k start
盡量不要使用任何的排序和樹風(fēng)格一起展示,因?yàn)樗麄兪褂昧瞬煌捻樞颉?/p>
6、顯示一個(gè)父進(jìn)程的子進(jìn)程:
這里有一個(gè)例子顯示所有apache進(jìn)程的分支
代碼如下:
___FCKpd___6nbsp;ps -o pid,uname,comm -C apache2
PID USER COMMAND
2359 root apache2
4524 www-data apache2
4525 www-data apache2
4526 www-data apache2
4527 www-data apache2
4528 www-data apache2
[term]
The first process that is owned by root is the main apache2 process and all other apache2 processes have been forked out of this main process. The next command lists all child apache2 processes using the pid of the main apache2 process
[term]
___FCKpd___6nbsp;ps --ppid 2359
PID TTY TIME CMD
4524 ? 00:00:00 apache2
4525 ? 00:00:00 apache2
4526 ? 00:00:00 apache2
4527 ? 00:00:00 apache2
4528 ? 00:00:00 apache2
7、顯示一個(gè)進(jìn)程的線程:
“-L”選項(xiàng)將顯示進(jìn)程的線程。它可以用來顯示特定進(jìn)程的所有線程或者所有進(jìn)程。
下面的命令將顯示所有id為3150的進(jìn)程所擁有的線程。
代碼如下:
___FCKpd___7nbsp;ps -p 3150 -L
8、改變要顯示的列:
ps命令可以配置為只顯示選中的列表。為了顯示完整列表可以查看手冊。
下面的命令只顯示PID,用戶名,CPU,內(nèi)存和命令的列。
代碼如下:
___FCKpd___8nbsp;ps -e -o pid,uname,pcpu,pmem,comm
可以重命名列標(biāo)簽,相當(dāng)?shù)撵`活。
代碼如下:
___FCKpd___9nbsp;ps -e -o pid,uname=USERNAME,pcpu=CPU_USAGE,pmem,comm
PID USERNAME CPU_USAGE %MEM COMMAND
1 root 0.0 0.0 init
2 root 0.0 0.0 kthreadd
3 root 0.0 0.0 ksoftirqd/0
4 root 0.0 0.0 kworker/0:0
5 root 0.0 0.0 kworker/0:0H
7 root 0.0 0.0 migration/0
8 root 0.0 0.0 rcu_bh
9 root 0.0 0.0 rcuob/0
10 root 0.0 0.0 rcuob/1
9、顯示進(jìn)程運(yùn)行的時(shí)間:
表示進(jìn)程的運(yùn)行時(shí)間。對于運(yùn)行的時(shí)間,列默認(rèn)情況下是不顯示的,可以使用“-O”選項(xiàng)查看。
代碼如下:
___FCKpd___10nbsp;ps -e -o pid,comm,etime
10、把ps命令變成一個(gè)實(shí)時(shí)查看器:
像往常一樣,watch命令可以用來實(shí)時(shí)捕捉ps顯示進(jìn)程。簡單的例子如下:
代碼如下:
___FCKpd___11nbsp;watch -n 1 'ps -e -o pid,uname,cmd,pmem,pcpu --sort=-pmem,-pcpu | head -15'
輸出在桌面上像這樣:
代碼如下:
Every 1.0s: ps -e -o pid,uname,cmd,pmem,pcpu --... Sun Dec 1 18:16:08 2013
PID USER CMD %MEM %CPU
3800 1000 /opt/google/chrome/chrome - 4.6 1.4
7492 1000 /opt/google/chrome/chrome - 2.7 1.4
3150 1000 /opt/google/chrome/chrome 2.7 2.5
3824 1000 /opt/google/chrome/chrome - 2.6 0.6
3936 1000 /opt/google/chrome/chrome - 2.4 1.6
2936 1000 /usr/bin/plasma-desktop 2.3 0.2
9666 1000 /opt/google/chrome/chrome - 2.1 0.8
3842 1000 /opt/google/chrome/chrome - 2.1 0.8
4739 1000 /opt/google/chrome/chrome - 1.8 1.0
3930 1000 /opt/google/chrome/chrome - 1.7 1.0
3911 1000 /opt/google/chrome/chrome - 1.6 0.6
3645 1000 /opt/google/chrome/chrome - 1.5 0.4
3677 1000 /opt/google/chrome/chrome - 1.5 0.4
3639 1000 /opt/google/chrome/chrome - 1.4 0.4
輸出將被刷新,每1秒刷新統(tǒng)計(jì)數(shù)據(jù)。不過不要以為這是類似上面。
你會注意到在相比情況下top/htop命令的輸出變化會更加頻繁。
這是因?yàn)樯厦孑敵龈鞣N各樣的值,CPU使用率和內(nèi)存使用情況的組合。但上述ps命令排序顯示的更簡單,采取的是一個(gè)時(shí)間1列(如學(xué)校數(shù)學(xué)).所以它不會像top那樣快速更新。如果覺得本文不錯(cuò)的話,就給文章下方點(diǎn)個(gè)贊吧。