Linux程序顯示與刪除

2021-05-28 09:23:13 字數 4689 閱讀 2588

在linux系統中,每個執行的任務都稱為程序(process),例如使用ls命令瀏覽目錄內容,或查詢日期時間輸入的date命令。同時,在每個程序啟動時,系統都會給它指定乙個惟一的數值,這個數值就稱為「程序id」(process id,pid)。如果要針對某個程序進行管理,例如結束程序的執行,必須以程序id(而不是該程序的名稱)作為參考的物件。

每個程序都會存在乙個對應的父程序(parent process),而由這個父程序可以複製多個子程序,這是網路程式編寫時很常用的一種方式,這個動作就稱為fork最常見的乙個fork例子就是web伺服器,web伺服器通常都可以支援多個客戶端的連線,而伺服器方面利用乙個父程序來接受客戶端的請求,然後利用fork來產生乙個子程序以處理後續的任務,之後該父程序就可再度回到等待客戶端請求的狀態,如此即可不斷地為客戶端服務。

前台與後台程序

每個程序都可能以兩種方式存在:前台(foreground)與後台(background)。所謂前台程序,就是使用者目前在螢幕上進行操作的程序;而後台程序則是實際上在操作,但由螢幕上並無法看到的程序。

通常使用後台方式執行的情況是,當此程序較為複雜且必須執行較長的時間時,我們會將它置於後台中執行,以避免占用螢幕的時間過久,而無法執行其他的程序。

系統的服務一般都是以後臺程序的方式存在的,而且都會駐留在系統中,直到關機時才結束,這類服務我們也稱為daemon,在linux系統中就包含許多daemon。

判斷daemon最簡單的方法就是由名稱來判斷,多數daemon都是由服務名稱加上d來產生的,例如http服務的daemon為httpd。

顯示目前程序

ps命令是process status的縮寫,它的功能是檢視目前的系統中有哪些程序正在執行,以及它們的執**況。您可以直接輸入ps命令名稱而不加任何引數。

如果直接執行ps命令,則會出現類似以下的資訊:

[root@ns1 ~]# ps

pid tty         time cmd

1635 pts/0    00:00:00 su

1636 pts/0    00:00:00 bash

1679 pts/0    00:00:00 ps

上述ps命令顯示的資料共分為4個字段,它們的說明如下:

pid:程序標識(process id),系統即是憑著這個編號來識別及處理此程序的。

tty:teletypewriter,登入的終端機編號。

time:此程序所消耗的cpu時間。

cmd:正在執行的命令或程序名稱。

上述的資訊是ps命令顯示的最基本資料畫面,其實ps支援非常多的引數。因為ps是非常常用的命令,所以本書在此將說明其中較為重要的引數的使用方法。

顯示詳細資訊

如果需要更詳細的系統資料,可以使用-l(long)引數,它除了顯示ps命令的4個基本字段資料外,另外還有10個額外資料可供檢視,這些額外資料的內容及說明如下:

[root@ns1 ~]# ps -l

f s  uid   pid  ppid c pri ni addr  sz wchan tty time   cmd

4 s    0  9822  9521 0  81  0    -  1220 wait4  pts/2 00:00:00  su

4 s    0  9970  9822 0  75  0    -  1294 wait4  pts/2 00:00:00b ash

4 r    0 15354  9970 0  80  0    -   788  -     pts/2 00:00:00  ps

f:該程序狀態的標誌(flag),表12-1是較常用的標誌及說明。

表12-1   程序狀態標誌說明

標 志 名 稱 標 志 代 碼 說      明

alignwarn 001 列印警告資訊

starting 002 程序正在初始化

exiting 004 系統正在關機

ptraced 010 表示已呼叫ptrace(0)

tracesys 020 跟蹤system call

forknoexec 040 已執行fork但沒有執行exec

superpriv 100 以root身份執行

dumpcore 200 核心轉儲

signaled 400 以signal結束程序

?s:程序狀態**(process state codes),可用的**及說明如表12-2所示。

表12-2   程序狀態**說明

代      碼 說      明

d 不可中斷的閒置狀態(uninterruptible sleep)

r 可執行的

s 閒置狀態

(續)代      碼 說      明

t 跟蹤或停止

z 已死亡的程序(zombie)

w 沒有足夠的記憶體頁可分配

< 高優先順序的程序

n 低優先順序的程序

l 有記憶體頁分配並鎖在記憶體內

uid:程序執行者的id(user id)。

ppid:父程序標識(parent process id)。

pri:程序執行的優先順序(priority)。

ni:nice,是指程序執行優先順序的nice值,負值表示其優先順序較高。

sz:size,程序所占用的記憶體大小,以kb為單位。

而另一種顯示詳細內容資訊的引數為-u(user),它的主要功能是將程序資料以使用者的格式來顯示,以下是部分的示例內容以及新的字段說明:

[root@ns1 ~]# ps -u

user pid %cpu %mem vsz rss tty stat start time command

root  9822  0.0   0.0  4880 168 pts/2  s  16:20  0:00   [su]

root  9970  0.0   0.4  5176 872 pts/2  s  16:20  0:00   -bash

root 15448  0.0   0.3  2644 696 pts/2  r  18:30  0:00   ps -u

......

?%cpu:cpu使用率百分比。

?%mem:記憶體使用率百分比。

?vsz:占用的虛擬記憶體大小。

?rss:占用的物理記憶體大小。

?start:程序開始時間。

顯示後台程序

其實,系統中目前執行的程序絕不是只有輸入ps命令時的數目,事實上有為數更多的程序以後臺的方式來執行,它們一般都是系統的服務(daemon),或是使用者利用&來處理的程序。如果要檢視這些後台程序,可以使用-x引數,以下是部分的示例內容:

[root@ns1 ~]# ps -x

pid   tty stat time  command

1   ? s 0:04      init [5]

2   ? sw 0:00      [keventd]

3   ? sw 0:00      [kapmd]

4   ? swn 0:00      [ksoftirqd/0]

......

有經驗的管理員一般都習慣一次檢視所有使用者執行的程序以及後台程序,此時可以使用-aux引數。

雖然-aux引數可以提供最詳盡的資訊,但是有時並不是很容易找出所需的資訊,因此我們可配合使用grep命令,以縮小檢視的範圍。以下是找出與使用者jack有關的程序及其內容的示例:

[root@ns1 ~]# ps -aux | grep jack

jack 2728  0.4  0.7  5164 1380 pts/0 s 08:18  0:00 -bash

root 2806  0.0  0.3  4444  644 pts/0 s 08:18  0:00 grep jack

....

結束執行中的程序

如果某個程序執行到一半時中斷,或消耗太多的系統資源,例如記憶體數量及cpu時間,此時您可以考慮使用kill命令來將指定的訊號傳送到該程序。

雖然kill命令可以傳送的訊號有很多種,但以sigterm(15)或sigkill(9)居多,它們都是用來結束程序執行的。您可以使用-l引數來檢視所有可供傳送的訊號

因為kill命令在使用時必須通過程序id來指定訊號的接收程序,所以需先以ps命令來得知要傳送的pid,之後再使用kill命令加上指定的pid來送出終止訊號以結束程序。

以下示例假設要終止pid 16525程序的執行:

[root@ns1 ~]# kill 16525

因為有些程序會捕捉某些訊號,所以當直接指定pid無法終止其程序時,您可以使用-9引數,它代表送出sigkill訊號。

[root@ns1 ~]# kill -9 16525

如果使用-9引數仍無法結束該程序,還可以嘗試使用-15引數來送出sigterm訊號;如果連-15引數都無法成功地刪除此程序,則只有重新啟動這一方法了。

通常,極難刪除的程序大多與系統執行有關聯,如果刪除後可能會影響系統的效能或執行,因此最好不要養成直接使用-9和-15引數的習慣。

[root@ns1 ~]# kill -15 16525

kill命令另外乙個常用的時機是,當對某個daemon進行修改或設定後,您可以使用-hup(hang up)引數來重新啟動該程序,這可減少重新啟動計算機的時間。

[root@ns1 ~]# kill -hup 16525

linux刪除程序

1.tab 鍵會自動補全 ps ef grep grep v root awk xargs kill 9 grep v這個引數的作用是排除某個字元。所以這裡排除了root執行的命令。之後也利用awk找到pid這一列。最後的xargs是從標準輸出獲取引數並執行命令的程式,即從前面的命令獲取輸出作為引數...

Linux檢視程序並且刪除程序

ps f grep tomcat執行結果 dgztc 28908 28737 0 09 27 pts 1 00 00 00 grep tomcat f 是顯示全格式。此執行結果展示的是執行該命令的程序,執行完命令程序就結束了。因此 kill 9 28908會顯示沒有該程序。ps ef grep to...

Linux程序隱藏問題 顯示隱藏程序

阿里云云監控到有兩台redis伺服器cpu被某程序消耗400 cpu資源 系統檢視top 情況並未找到高消耗程序x7但cpu100 ni netstat 查詢到了一些異常請求,初步判斷出元件被提權入侵了 嘗試查詢異常程序x7關聯的檔案,排查還在 etc hosts發現增加了如下異常對映,檢視相關異常...