linux是個(gè)多用戶系統(tǒng),有時(shí)候也要了解其他用戶現(xiàn)在在干什么,所以在本節(jié)中還將接觸多用戶方面的 內(nèi)容。同時(shí)Linux是一個(gè)多進(jìn)程系統(tǒng),經(jīng)常需要對(duì)這些進(jìn)程進(jìn)行一些調(diào)配和管理;而要進(jìn)行管理,首先就要知 道現(xiàn)在的進(jìn)程情況:究竟有哪些進(jìn)程?進(jìn)程情況如何?等等。所以需要進(jìn)程查看方面的工作。
   who命令
   該命令主要用于查看當(dāng)前在線上的用戶情況。這個(gè)命令非常有用。如果用戶想和其他用戶建立即時(shí)通訊,比如使用talk命令,那么首先要確定的就是該用戶確實(shí) 在線上,不然talk進(jìn)程就無法建立起來。又如,系統(tǒng)管理員希望監(jiān)視每個(gè)登錄的用戶此時(shí)此刻的所作所為,也要使用who命令。
   who命令的常用語法格式如下:
   who [imqsuwHT] [--count] [--idle] [--heading] [--help] [--message] [--mesg] [--version] [--writable] [file] [am i]
   所有的選項(xiàng)都是可選的,也就是說可以單獨(dú)使用who命令。不使用任何選項(xiàng)時(shí),who命令將顯示以下三項(xiàng)內(nèi)容:
   login name:登錄用戶名;
   terminal line:使用終端設(shè)備;
   login time:登錄到系統(tǒng)的時(shí)間。
   如果給出的是兩個(gè)非選項(xiàng)參數(shù),那么who命令將只顯示運(yùn)行who程序的用戶名、登錄終端和登錄時(shí)間。 通常這兩個(gè)參數(shù)是“am i”,即該命令格式為:“who am i”。
   下面對(duì)who命令的常用參數(shù)進(jìn)行說明。
   -m 和“who am i”的作用一樣,顯示運(yùn)行該程序的用戶名。
   -q,--count 只顯示用戶的登錄帳號(hào)和登錄用戶的數(shù)量,該選項(xiàng)優(yōu)先級(jí)高于其他任何選項(xiàng)。
   -s 忽略。主要是用于和其他版本的who命令兼容。
   -i,-u,--idle 在登錄時(shí)間后面顯示該用戶最后一次對(duì)系統(tǒng)進(jìn)行操作至今的時(shí)間,也就是常說的 “發(fā)呆”時(shí)間。其中“.”符號(hào)代表該用戶在前1秒仍然處于活動(dòng)狀態(tài);“old”則表示該用戶空閑已經(jīng)超過了24小時(shí)。
   -H,--heading 顯示一行列標(biāo)題。常用的標(biāo)題如表4-2所示。
   表4-2 who命令輸出常用標(biāo)題
   標(biāo) 題
   說 明
   USER
   用戶登錄帳號(hào)
   LINE
   用戶登錄使用終端
   LOGIN-TIME
   用戶登錄時(shí)間
   IDLE
   用戶空閑 洌次唇脅僮韉氖奔?
   PID
   用戶登錄shell的進(jìn)程ID
   FROM
   用戶網(wǎng)絡(luò)地址
   -w,-T--mesg,--message,--writable 和-s選項(xiàng)一樣,在登錄帳號(hào)后面顯示一個(gè)字符來表示用戶的信息狀態(tài):
   +:允許寫信息;
   -:不允許寫信息;
   ?:不能找到終端設(shè)備。
   --help 在標(biāo)準(zhǔn)輸出上顯示幫助信息。
   --version 在標(biāo)準(zhǔn)輸出上顯示版本信息。
   下面介紹who命令的一些基本用法。
   如果需要查看在系統(tǒng)上究竟有哪些用戶,可以直接使用who命令。
   [例17] 查看登錄到系統(tǒng)的用戶情況
   $ who
   root tty1 Mar 17 13:49
   foxy tty2 Mar 17 13:49
   root tty3 Mar 17 13:49
   bbs ttyp0 Mar 17 13:49 (river.net)
   可以看到,現(xiàn)在系統(tǒng)一共有四個(gè)用戶.
   一般來說,這樣就可以了解登錄用戶的大致情況了。但有時(shí)上面的顯示不是那么直觀,因?yàn)闆]有標(biāo)題 說明,不容易看懂,這時(shí)就需要使用-H選項(xiàng)了。
   [例18] 查看登錄用戶的詳細(xì)情況,鍵入:
   $ who -uH
   顯示如下:
   USER LINE LOGIN-TIME IDLE FROM
   root tty1 Mar 17 13:49 .
   foxy tty2 Mar 17 13:49 00:01
   root tty3 Mar 17 13:49 00:01
   bbs ttyp0 Mar 17 13:49 00:01 (river.net)
   這樣一目了然。其中-u選項(xiàng)指定顯示用戶空閑時(shí)間,所以可以看到多了一項(xiàng)IDLE。第一個(gè)root用戶的IDLE項(xiàng) 是一個(gè)“.”,這就說明該用戶在前1秒仍然是活動(dòng)的,而其他用戶后面都有一個(gè)時(shí)間,稱為空閑時(shí)間。
   最后來看看使用“who am i”格式命令的結(jié)果:
   233.river.net!root tty1 Mar 17 13:49
   可見只顯示出了運(yùn)行該who命令的用戶情況,當(dāng)然這時(shí)候不存在空閑時(shí)間。
   who命令應(yīng)用起來非常簡(jiǎn)單,可以比較準(zhǔn)確地掌握用戶的情況,所以使用非常廣泛。
   w命令
   該命令也用于顯示登錄到系統(tǒng)的用戶情況,但是與who不同的是,w命令功能更加強(qiáng)大,它不但可以顯示有誰登錄到系統(tǒng),還可以顯示出這些用戶當(dāng)前正在進(jìn)行的工作,并且臣剖菹嘍詗ho命令來說更加詳細(xì)和科學(xué),可以認(rèn)為w命令就是who命令的一個(gè)增強(qiáng)版。
   w命令的顯示項(xiàng)目按以下順序排列:當(dāng)前時(shí)間,系統(tǒng)啟動(dòng)到現(xiàn)在的時(shí)間,登錄用戶的數(shù)目,系統(tǒng)在最近1秒、5秒和15秒的平均負(fù)載。然后是每個(gè)用戶的各項(xiàng)數(shù) 據(jù),項(xiàng)目顯示順序如下:登錄帳號(hào)、終端名稱、遠(yuǎn)程主機(jī)名、登錄時(shí)間、空閑時(shí)間、JCPU、PCPU、當(dāng)前正在運(yùn)行進(jìn)程的命令行。
  其中JCPU時(shí)間指的是和該終端(tty)連接的所有進(jìn)程占用的時(shí)間。這個(gè)時(shí)間里并不包括過去的后臺(tái)作業(yè)時(shí)間,但卻包括當(dāng)前正在運(yùn)行的后臺(tái)作業(yè)所占用的時(shí)間。而PCPU時(shí)間則是指當(dāng)前進(jìn)程(即在WHAT項(xiàng)中顯示的進(jìn)程)所占用的時(shí)間。下面介紹該命令的具體用法和參數(shù)。
   語法格式如下:
   w -[husfV] [user]
   下面對(duì)參數(shù)進(jìn)行說明:
   -h 不顯示標(biāo)題。
   -u 當(dāng)列出當(dāng)前進(jìn)程和CPU時(shí)間時(shí)忽略用戶名。這主要是用于執(zhí)行su命令后的情況。
   -s 使用短模式。不顯示登錄時(shí)間、JCPU和PCPU時(shí)間。
   -f 切換顯示FROM項(xiàng),也就是遠(yuǎn)程主機(jī)名項(xiàng)。默認(rèn)值是不顯示遠(yuǎn)程主機(jī)名,當(dāng)然系統(tǒng)管理員可以對(duì)源文件 作一些修改使得顯示該項(xiàng)成為默認(rèn)值。
   -V 顯示版本信息。
   User 只顯示指定用戶的相關(guān)情況。
   [例19] 顯示當(dāng)前登錄到系統(tǒng)的用戶的詳細(xì)情況
   $ w
   2:50pm up 2 min, 4 users, load average:0.22,0.16,0.06
   USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
   root tty1 2:49pm 0:00s 0.56s 0.10s w
   foxy tty2 2:49pm 1:09 0.42s 0.42s bash
   root tty3 2:49pm 46.00s 0.67s 0.25s telnet bbs3
  bbs ttyp0 river.net 2:49pm 45.00s 0.49s 0.49s bbs h river.net
   ps命令
   1. ps簡(jiǎn)介
   前面介紹的兩個(gè)命令都是用于查看當(dāng)前系統(tǒng)用戶的情況,下面就來看看進(jìn)程的情況,這也是本章的主題。要對(duì)進(jìn)程進(jìn)行監(jiān)測(cè)和控制,首先必須要了解當(dāng)前進(jìn)程的情 況,也就是需要查看當(dāng)前進(jìn)程,而ps命令就是最基本同時(shí)也是非常強(qiáng)大的進(jìn)程查看命令。使用該命令可以確定有哪些進(jìn)程正在運(yùn)行和運(yùn)行的狀態(tài)、進(jìn)程是否結(jié)束、 進(jìn)程有沒有僵死、哪些進(jìn)程占用了過多的資源等等。總之大部分信息都是可以通過執(zhí)行該命令得到的。
   2. ps命令及其參數(shù)
   ps命令最常用的還是用于監(jiān)控后臺(tái)進(jìn)程的工作情況,因?yàn)楹笈_(tái)進(jìn)程是不和屏幕鍵盤這些標(biāo)準(zhǔn)輸入/輸出設(shè) 備進(jìn)行通信的,所以如果需要檢測(cè)其情況,便可以使用ps命令了。
   該命令語法格式如下:
   ps [選項(xiàng)]
   下面對(duì)命令選項(xiàng)進(jìn)行說明:
   -e 顯示所有進(jìn)程。
   -f 全格式。
   -h 不顯示標(biāo)題。
   -l 長(zhǎng)格式。
   -w 寬輸出。
   a 顯示終端上的所有進(jìn)程,包括其他用戶的進(jìn)程。
   r 只顯示正在運(yùn)行的進(jìn)程。
   x 顯示沒有控制終端的進(jìn)程。
   O[+|-] k1 [,[+|-] k2 [,…]] 根據(jù)SHORT KEYS、k1、k2中快捷鍵指定的多級(jí)排序順序顯示進(jìn)程列表。對(duì)于ps的不同格式都存在著默認(rèn)的順序指定。這些默認(rèn)順序可以被用戶的指定所覆蓋。其中“+”字符是可選 的,“-”字符是倒轉(zhuǎn)指定鍵的方向。
   pids 只列出付ń痰那榭觥8鶻蘄D之間使用逗號(hào)分隔。該進(jìn)程列表必須在命令行參數(shù)的最后一個(gè)選項(xiàng) 后面緊接著給出,中間不能插入空格。比如:ps -f1,4,5。
   以下介紹長(zhǎng)命令行選項(xiàng),這些選項(xiàng)都使用“--”開頭:
   --sort X[+|-] key [,[+|-] key [,…]] 從SORT KEYS段中選一個(gè)多字母鍵。“+”字符是可選的,因?yàn)槟J(rèn)的方向就是按數(shù)字升序或者詞典順序。比如: ps -jax -sort=uid,-ppid,+pid。
   --help 顯示幫助信息。
   --version 顯示該命令的版本信息。
   在前面的選項(xiàng)說明中提到了排序鍵,接下來對(duì)排序鍵作進(jìn)一步說明。需要注意的是排序中使用的值是ps使 用的內(nèi)部值,并非僅用于某些輸出格式的偽值。排序鍵列表見表4-3。
   表4-3 排序鍵列表
   短格式
   長(zhǎng)格式
   說 明
   c
   cmd
   可執(zhí)行的簡(jiǎn)單名稱
   C
   cmdline
   完整命令行
   f
   flags
   長(zhǎng)模式標(biāo)志
   g
   pgrp
   進(jìn)程的組ID

   G
   tpgid
   控制tty進(jìn)程組ID

   j
   cutime
   累計(jì)用戶時(shí)間

   J
   cstime
   累計(jì)系統(tǒng)時(shí)間

   k
   utime
   用戶時(shí)間

   K
   stime
   系統(tǒng)時(shí)間

   m
   min_flt
   次要頁錯(cuò)誤的數(shù)量

   M
   maj_flt
   主要頁錯(cuò)誤的數(shù)量

   n
   cmin_flt
   累計(jì)次要頁錯(cuò)誤

   N
   cmaj_flt
   累計(jì)主要頁錯(cuò)誤

   o
   session
   對(duì)話ID

   p
   pid
   進(jìn)程ID

   P
   ppid
   父進(jìn)程ID

   r
   rss
   駐留大小

   R
   resident
   駐留頁

   s
   size
   內(nèi)存大小(千字節(jié))

   S
   share
   共享頁的數(shù)量

   t
   tty
   tty次要設(shè)備號(hào)

   T
   start_time
   進(jìn)程啟動(dòng)的時(shí)間

   U
   uid
   UID

   u
   user
   用戶名

   v
   vsize
   總的虛擬內(nèi)存數(shù)量(字節(jié))

   y
   priority
   內(nèi)核調(diào)度優(yōu)先級(jí)

   3. 常用ps命令參數(shù)
   前面兩節(jié)介紹的參數(shù)可能讓讀者覺得有些可怕,實(shí)際上這是一個(gè)非常容易使用的命令,一般的用戶只 需掌握一些最常用的命令參數(shù)就可以了。
   最常用的三個(gè)參數(shù)是u、a、x,下面將通過例子來說明其具體用法。
   [例20] 以root身份登錄系統(tǒng),查看當(dāng)前進(jìn)程狀況
   $ ps
   PID TTY TIME COMMAND
   5800 ttyp0 00:00:00 bash
   5835 ttyp0 00:00:00 ps
   可以看到,顯示的項(xiàng)目共分為四項(xiàng),依次為PID(進(jìn)程ID)、TTY(終端名稱)、TIME(進(jìn)程執(zhí)行時(shí)間) 、COMMAND(該進(jìn)程的命令行輸入)。
   可以使用u選項(xiàng)來查看進(jìn)程所有者及其他一些詳細(xì)信息,如下所示:
   $ ps u
   USER PID %CPU %MEM USZ RSS TTY STAT START TIME COMMAND
   test 5800 0.0 0.4 1892 1040 ttyp0 S Nov27 0:00 -bash
   test 5836 0.0 0.3 2528 856 ttyp0 R Nov27 0:00 ps u
   在bash進(jìn)程前面有條橫線,意味著該進(jìn)程便是用戶的登錄shell,所以對(duì)于一個(gè)登錄用戶來說帶短橫線的進(jìn) 程只有一個(gè)。還可以看到%CPU、%MEM兩個(gè)選項(xiàng),前者指該進(jìn)程占用的CPU時(shí)間和總時(shí)間的百分比;后者指該進(jìn)程 占用的內(nèi)存和總內(nèi)存的百分比。
   在這種情況下看到了所有控制終端的進(jìn)程;但是對(duì)于其他那些沒有控制終端的進(jìn)程還是沒有觀察到,所以這 時(shí)就需要使用x選項(xiàng)。使用x選項(xiàng)可以觀察到所有的進(jìn)程情況。