linux ksh怎么查找僵尸进程,Unix 进程管理
進程管理
如果用戶在 UNIX 操作系統上執行了一個程序,那么操作系統會為這個程序創建一個運行它的特定環境。這個環境包含系統運行該程序所需的一切資源,使得好像系統中沒有運行其他程序一樣。
用戶如果在 UNIX 操作系統中輸入一個指令,操作系統就會創建(啟動)一個相應的進程。比如,如果用戶希望使用 ls 指令來列出目錄內的文件列表時,系統就啟動了一個進程來完成這個任務。簡單的說,進程就是一個可執行程序的實例。
操作系統通過一個 5 位的 ID 號碼來追蹤進程,這個 ID 號碼 通常被稱為pid 或進程 ID。操作系統中的每一個進程都有唯一 pid。
由于所有的進程 ID 是循環使用的,所以 pid 是會重復的。不過,在操作系統中,不存在兩個進程擁有統一進程 ID 的情況。
創建進程
如果用戶創建一個進程(執行一個指令),那么可以兩種方式來運行它。前臺進程
后臺進程
前臺進程
默認情況下,任何一個用戶創建的進程都會在前端執行。該進程可以從鍵盤獲取輸入信息并且可以將執行結果反饋到顯示器上。
我們可以使用 ls 指令來觀察這個過程。如果用戶希望列出當前目錄下的所有文件,用戶需要在終端命令行鍵入如下指令:$ls ch*.doc
這個指令將會顯示所有文件名稱以 ch 開頭,以 .doc 結尾的文件。ch01-1.doc ch010.doc ch02.docch03-2.doc
ch04-1.doc ch040.doc ch05.docch06-2.doc
ch01-2.doc ch02-1.doc
該指令對應的進程在前臺進行,輸出結果直接顯示在顯示屏上,如果 ls 執行需要獲取輸入,那么該進程會等待來自鍵盤的輸入信息。
當程序在前臺執行的時候,用戶無法執行其他的指令(創建其他的進程),這是因為系統會提示其他進程無法創建直到當前進程執行完畢。
后臺進程
后臺進程不需要鍵盤輸入的信息就可以執行。如果后臺進程需要鍵盤等外設的輸入信息的話,那么它會等待。
后臺進程的優點是用戶可以執行其他的指令。用戶此時不需要等待進程結束就可以執行其他的進程。
開啟一個后臺進程的最簡單的方法就是在指令的末尾添加 & 標識符。$ls ch*.doc &
這個指令也會示所有文件名稱以 ch 開頭,以 .doc 結尾的文件。ch01-1.doc ch010.doc ch02.docch03-2.doc
ch04-1.doc ch040.doc ch05.docch06-2.doc
ch01-2.doc ch02-1.doc
如果這里的 ls 指令希望得到輸入信息,它會轉換為停止狀態直到用戶將他轉到前臺并獲取到從鍵盤來的輸入信息。
第一行顯示了后臺進程的信息——作業號和進程 ID,用戶需要使用作業號來完成前景和后臺之間的切換。
如果用戶按下回車鍵,可以看到如下信息:[1] + Done ls ch*.doc &
$
第一行表示 ls 指令的后臺進程已經成功執行。第二行提示可以執行其他的指令。
列出處于執行狀態的進程
可以使用 ps 指令來顯示當前操作系統處于執行狀態的進程,結果如下:$ps
PID TTY TIMECMD
18358 ttyp3 00:00:00sh
18361 ttyp3 00:01:31abiword
18789 ttyp3 00:00:00ps
使用 ps 指令時,通常會選擇 -f 選項。該選項可以顯示更為詳細的內容。$ps -f
UID PID PPID C STIME TTY TIME CMD
amrood 6738 3662 0 10:23:03 pts/6 0:00 first_one
amrood 6739 3662 0 10:22:54 pts/6 0:00 second_one
amrood 3662 3657 0 08:10:53 pts/6 0:00 -ksh
amrood 6892 3662 4 10:51:50 pts/6 0:00 ps -f
下面是 -f 選項列出內容的的相關解釋。列名稱意義UID執行該進程的用戶ID
PID進程編號
PPID該進程的父進程編號
C該進程所在的CPU利用率
STIME進程執行時間
TTY進程相關的終端類型
TIME進程所占用的CPU時間
CMD創建該進程的指令
如下是其他配合 ps 指令的選項:選項意義-a顯示所有用戶的信息
-x顯示關于沒有終端的進程的信息
-u顯示類似 -f 的其他附加信息
-e顯示擴展信息
停止進程執行
用戶可以使用多種方式來停止一個進程。通常情況下,可以通過終端指令來完成,比如,同時按下 CTRL+C 鍵就可以停止當前執行的指令。這種方式僅在程序以前臺的方式執行的情況下起作用。
如果一個進程以后臺的方式在執行,那么首先用戶需要通過 ps 指令來獲取它的作業編號,然后用戶可以使用 kill 指令來殺掉該進程。如下:$ps -f
UID PID PPID C STIMETTY TIME CMD
amrood 6738 3662 0 10:23:03 pts/6 0:00 first_one
amrood 6739 3662 0 10:22:54 pts/6 0:00 second_one
amrood 3662 3657 0 08:10:53 pts/6 0:00 -ksh
amrood 6892 3662 4 10:51:50 pts/6 0:00 ps -f
$kill 6738
Terminated
這里的 kill 指令收終止指令為 first_one 對應的進程。如果某個進程無視常規的 kill 指令。用戶可以使用 kill -9 后跟進程編號的方式來終止指令,如下:$kill -9 6738
Terminated
父進程和子進程
UNIX 系統中的每一個進程都有兩個 ID 號碼:進程 ID(pid)和父進程 ID(ppid).系統中的每一個用戶進程均有父進程。
大部分使用 shell 執行的指令均有他們各自的父進程。使用 ps -f 指令可以顯示出每個進程相對應的進程 ID和其父進程 ID.
僵尸進程和孤兒進程
通常情況下,當某個子進程被殺掉后,其父進程會被 SIGCHILD 信號通知。然后,該父進程會做一些必要的操作或者啟動一個新的子進程。然而,有時候是父進程先于子進程被殺掉。這種情況下,被稱為“所有進程的父進程”的 init 進程就稱為該子進程的父進程。這些子進程也稱為孤兒進程。
當某個進程被殺掉后,ps 指令列出的列表里顯示該進程標志位 Z 狀態。它就是一個僵尸進程。該進程處于死亡狀態并且不會被再次使用。這些進程不同于孤兒進程。他們是已經完成任務的進程,但是仍在進程表中留有一個入口。
守護進程
守護進程是操作系統相關的后臺進程,他們通常以 root 權限執行,并且會相應其他進程的請求。
守護進程沒有控制終端。它也不能打開 /dev/tty。如果用戶使用”ps -ef” 指令來查看 tty 域,所有的守護進程在該域都會顯示?。
更詳細的來講,守護進程就是執行在后臺的進程,且它會等待某個事件的發生,從而相應該事件。比如打印機守護進程一直在等待打印的指令。
如果用戶的某個程序需要長時間的執行,那么可以將它設計為守護進程的啟動方式。
top 指令
top 指令是用于顯示以不同條件排序進程的指令。
它是一個頻繁更新的交互式診斷工具,會動態的顯示如下和相關進程的如下信息:物理內存、虛擬內存、CPU 利用率、負載率。
下面是一個簡單的例子來執行 top 指令,且查看不同繼承的CPU使用率。$top
作業編號與進程號
后臺的且阻塞狀態的進程通常使用作業編號來維護。該作業編號不同于進程編號。
此外,作業可以包含多個進程,這些進程可以串行執行,也可以并行執行,所以使用作業編號比跟蹤單個的進程會更加簡單。
總結
以上是生活随笔為你收集整理的linux ksh怎么查找僵尸进程,Unix 进程管理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php中finally不能用,php-什
- 下一篇: win7 linux 共享文件夹权限设置