在Unix系統中殺死相關終端的程序

2021-03-31 22:44:53 字數 1773 閱讀 3757

本程式名為kill_tty,設計思路是把需要殺死的終端名作為kill_tty命令的引數,充分運用unix系統的管道技術與awk語句的靈活性,找出相應終端的程序號,然後將其殺死。

命令格式:kill_tty 終端裝置名。

實現步驟

1. 檢驗kill_tty命令引數$1的合法性。

用grep 命令檢查在 /etc/ttytype檔案當中是否存在引數$1, 因為所有正在使用的終端都在/etc/ttytype檔案中有相應的裝置型別,如果在/etc/ttytype檔案裡找不到引數$1所表示的終端號,說明$1是不合法的,終止程式執行。

grep $1 /etc/ttytype>/dev/null 2>&1

if [ $? = 1 ] ; then

echo 「/a終端裝置型別不對!」

exit 1

fi2. 把終端名$1作為變數,由echo命令通過管道方式交給awk語句去處理,整個處理過程實際上就是用「ps -f -t 」命令檢查出所要殺死終端的相應程序號,處理的結果通過管道方式由/bin/sh完成。

echo $1 | awk 』』| /bin/sh

以終端為/dev/tty01為例,執行的結果為:

uid pid ppid c stime tty time cmd

root 323 1 0 20:07:31 tty01 00:00:00 /bin/login boot

root 360 323 2 20:07:37 tty01 00:00:00 -sh

root 404 360 14 20:09:57 tty01 00:00:00 -sh

root 410 404 3 20:09:57 tty01 00:00:00 /bin/sh

root 411 410 0 20:09:57 tty01 00:00:00 ps -f -t tty01

這裡第2列(pid)為程序標識號,終止任務需要的就是這個標識號,第8列(cmd)表示任務的程式名。

3. 有時候有些終端執行的任務可能比較多,因而與終端有關的程序比較多,我們沒有必要將與這個終端有關的正在執行的所有程序全部殺死。只需要將這個終端的sh程序殺死,就終止了這個終端的所有任務。因為在unix系統中,sh是使用者層和核心層的介面,unix系統就是通過它對終端上所有任務進行排程和管理的,沒有它任何一台終端上的任務都無法完成。因此,要想重新啟用某個終端,只要先找出與這個終端相關的sh程序號,然後將其殺死即可達到目的。

awk 』$8~/sh/ 』|/

/bin/sh〉/dev/null 2>&1

完整程式如下:

grep $1 /etc/ttytype>/dev/null 2>&1

if [ $? = 1 ] ; then

echo 「/a 終端裝置型別不對!」

exit 1

fiecho $1 | awk 』』|/bin/sh|/

awk 』 $8~/sh/ 』 |/

/bin/sh〉/dev/null 2>&1

小 結

所有命令通過管道技術串聯起來,把上乙個命令的輸出結果作為下乙個命令的輸入,最後一條命令將最終的結果輸出。和c語言所編寫的程式比較起來,一方面unix系統中shell程式設計比較簡單明瞭,程式本身比較短小,不像c語言那樣複雜;另一方面shell是互動式程式,不需要編譯便可直接使用,因而比c語言更便於維護。

需要說明的是,由於在多數情況下,一般使用者沒有許可權執行unix系統的kill命令殺死不同組的一般使用者的程序,而超級使用者可以終止正在系統中執行的所有使用者的程序,因此要盡可能地在超級使用者root狀態下執行kill_tty程式。

unix系統之與檔案系統相關的系統呼叫

自unix誕生之初,檔案系統便成為了unix系統的一部分。儘管那時的檔案系統只能支援512k位元組的磁碟且每個檔案限定長度為64k位元組。但是檔案系統的基礎結構已經基本確定。構建在檔案系統之上的相關的系統呼叫也已基本成型。後來發展的與檔案系統相關的系統呼叫也是在其基礎之上不斷完善而來的。unix中與...

Linux系統中殺死殭屍程序的方法

在linux系統管理中,當用ps命令觀察程序的執行狀態時,經常看到某些程序的狀態列為defunct,這就是所謂的 殭屍 程序。殭屍 程序是乙個早已 死亡的程序,但在程序表 processs table 中仍佔了乙個位置 slot 由於程序表的容量是有限的,所以,defunct程序不僅占用系統的記憶體...

殺死系統中的程序kill和killall命令

自csdn部落格 為什麼要殺死系統的程序?在windows下,開發時常遇到的問題是我們的整合開發工具卡死了,或者瀏覽器卡死了,常用的方式就是ctrl alt del進入任務管器結束任務,也就是把執行的程序殺掉。或者eclipse啟動tomcat沒有正常關閉,再次啟動時告訴你這個程序已經存在,阻止了新...