殭屍程式
微軟系列的東西現在已經非常受人們的喜愛,尤其是他獨特人性化操作才讓大家愛不釋
手,但是他也以漏洞之王為稱,所以政府、企業等大型伺服器是絕對沒人敢用windows系
列產品的。相比之下Linux在安全方面就閒得非常強壯。
nux將在各各領域佔有絕對的優勢,這個年代要是不懂Linux很難立足。所以今天我就帶
大家步入Linux最基本的安全領域—"程式"。
內,可以有多個程式同時執行。如果大家對硬體體系有一定了解的話,就會知道,我們
使用的個人計算機(PC)的CPU是在一個時間片斷內只能執行一條指令,那麼Linux是如何
實現多程式同時執行的呢?這裡Linux使用了一種稱為"程式排程(process
)"的武器,首先,為每個程式指派一定的執行時間,這個時間通常很短,短到以毫秒為
單位,然後依照某種規則,從眾多程式中挑選一個投入執行,其他的程式暫時等待,當
正在執行的那個程式時間耗盡,或執行完畢退出,或因某種原因暫停,Linux就會重新進
行排程,挑選下一個程式投入執行。因為每個程式佔用的時間片都很短,在我們使用者
的角度來看,就好像多個程式同時執行一樣了。我們瞭解了完了Linux多程式概念後,先
來看看什麼是程式?
一、程式概念:
個程式也叫做父程式),所以可以把任何在UNIX/Linux系統中執行的程式叫做程式;但
是程式並不是程式,程式是動態的,而程式是靜態的,並且多個程式(這多個程式裡除
了父程式,其他的就是子程式)可以併發的呼叫同一個程式。
組成一個程式向量陣列,系統預設的程式向量資料大小是512,表示系統中可同時容納5
12個程式。程式的task_struct資料結構包括了程式的狀態、排程資訊、程式識別符號等信
息。
許可權及任務,所以當某一程式失敗時並不會導致別的程式失敗。系統透過程式識別符號來
區分不同的程式,程式識別符號是一個非負正數,他在任何時刻都是唯一的,當某個程式
結束時,他的程式識別符號可以分配給另外一個新程式。系統將識別符號0分配給排程程式,
識別符號1分配給初始化程式。下面我來給大家演示一下程式由出生到死亡的一個流程圖。
程式一生流程圖:
出生:程式設計中的一句fork(),爸爸媽媽(父程式)讓小孩(子程式)出生了,並且繼
承裡父母所有的東西,我們也可以把他看成克隆人。
生活:然後隨著exec(),小孩長大(新程式)脫胎換骨,離家獨立,開始了為人民服
務的職業生涯。
死亡:
"}",從容地離我們而去;也可以是自殺,自殺有2種方式,一種是呼叫exit函式,
種是在main函式內使用return,無論哪一種方式,它都可以留下遺書,放在返回值裡保
留下來;它還甚至能可被謀殺,被其它程式透過另外一些方式結束他的生命(這裡跟人
有些不一樣,在程式裡,如果父程式死了,那麼他建立的所有子程式也一起跟著死去)
。
死後安葬方式:這一過程也是必有的,不能說人在哪死後就不管他,也不把屍體搬走吧
!:)程式死掉以後,會留下一具殭屍,wait()函式充當了殮屍工,把殭屍推去火化,使
其最終歸於無形。
這就是程式完整的一生。
資源時,別的程式必須等待正在執行的程式空閒CPU後才能執行,由於存在很多程式在等
待,所以核心透過排程演算法來決定將CPU分配給哪個程式。概念清晰後我們接下來看看L
inux中,程式有哪幾種狀態。
二、Linux中的程式基本狀態:
。
種狀態,這就是我們要講的"殭屍程式(Zombie)"。下面我們會仔細的講解,接下來再
介紹一下程式的管理。
三、Linux中的程式管理
nux系統中每個程式都具有一個程式號(PID),用於系統識別和排程程式。啟動一個進
程有兩個主要途徑∶手工啟動和排程啟動,後者是事先進行設定,根據使用者要求自行啟
動。由使用者輸入命令,直接啟動一個程式便是手工啟動程式。但手工啟動程式又可以分
為很多種,根據啟動的程式型別不同、性質不同,實際結果也不一樣。
,這就在前臺啟動了一個程式。這時候系統其實已經處於一個多程式狀態。有許多執行
在後臺的、系統啟動時就已經自動啟動的程式正在悄悄執行著。這時如果有使用者輸入"t
est"命令以後趕緊使用"ps
結束的太快,使用ps檢視時該程式已經執行結束了。所以如果大家想看到程式的話,得
輸入一個耗時的程式,我們下面會講到。
不急著需要結果的時候。假設使用者要啟動一個需要長時間執行的格式化文字檔案的程式
。為了不使整個shell在格式化過程中都處於"癱瘓"狀態,從後臺啟動這個程式是明智的
選擇。
就不是一個組合鍵所能解決的了,這時就必須使用kill命令.該命令可以終止後臺程式.至
於終止後臺程式的原因很多,或許是該程式佔用的CPU時間過多;或許是該程式已經掛死
.這種情況是經常發生的。Kill命令的工作原理是:向Linux系統的核心傳送一個系統操
作訊號和某個程式的程式標識號,然後系統核心就可以對程式標識號指定的程式進行操
作。
什麼情況下會產生殭屍程式,如何殺掉殭屍程式?不用著急,我們先來熟悉一下有關Li
nux程式方面的程式設計。
()>0[父程式]
程建立子程式的程式碼:
#i
#i
main()
{
}
後,一定要為他收屍,否則他就會變成殭屍程式。下面就讓我們來看看未能把死去的進
程收屍會變成什麼樣子?
#i
#i
main()
{
}
#gcc
編譯成功後我們開始執行這個程式因為程式碼裡的sleep(30)是讓父程式睡眠30秒,如果我
們在前臺執行我們這個程式,那麼就不能執行其他shell命令了,所以這裡我們在執行的
命令後面加一個&
#./zomber
好了,我們在30秒內執行檢視程式命令來看看我們這個zombie程式是什麼樣的?
#ps
這個命令是顯示有關zombie的所有資訊。
父程式執行完退出後,子程式不管是不是殭屍程式也直接就退出了,因為父程式死了嘛
。那麼這也不會造成多大危害啊?如果大家這麼認為那可就錯了,當我們剛才用ps命令
觀察程式的執行狀態時,看到某些程式的狀態列為defunct,這就是所謂的"殭屍"程式。
"殭屍"程式是一個早已死亡的程式,但在程式表(processs
(slot)。由於程式表的容量是有限的,所以,defunct程式不僅佔用系統的記憶體資源,
影響系統的效能,而且如果其數目太多,還會導致系統癱瘓,具體請看下面的程式碼:
#i
#i
main()
{
}
懂C語言的朋友會知道for(;;)是一個死迴圈。那麼這僅有2行程式碼的程式就可以把你的l
inux瞬間當機,因為他的作用是無限制的在記憶體裡增加新的子程式,一個系統根據記憶體
的容量會分配程式的最大限制,一旦同時執行的程式數超符合,那麼你的機器必然會死
機。
試結果是"任何使用者只要執行這個程式都會讓機器死掉"。原因就是預設的Linux系統沒有
對普通使用者的使用最大程式進行限制。所以這樣對系統造成很大一個威脅,那麼我們如
何避免普通使用者非法執行過多資源或程式導致系統拖死,所以我們的給除了Root的使用者
做一下限制。
對普通使用者進行限制:
第1步:首先進到Linux終端用vi編輯/etc/security
*
*
*
(*
程數為"nproc
第2步:用vi編輯/etc/pam.d/login檔案,然後加上下面這行儲存退出就可以。
session
可以用Root和普通使用者分別進行測試,結果當然是普通使用者執行完我們剛才做的程式不
會當機了。
的配置也是相當重要的。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26274656/viewspace-1054999/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 什麼是殭屍程式,如何找到並殺掉殭屍程式?
- fork和殭屍程式
- Linux 殭屍程式Linux
- 【系統】 殭屍程式
- 殺死殭屍程式
- 殭屍程式,孤兒程式
- 殭屍程式和孤兒程式
- Linux中殭屍程式是什麼意思?怎麼檢視殭屍程式?Linux
- 檢視 Linux 殭屍程式Linux
- Linux殭屍程式處置Linux
- Perl程式:殭屍程式和孤兒程式
- 子程式、孤兒程式,殭屍程式, init程式
- Linux 中殭屍程式詳解Linux
- Go Exec 殭屍與孤兒程式Go
- Linux 系統中殭屍程式Linux
- Linux如何殺掉殭屍程式Linux
- 檢視並殺死殭屍程式
- Linux系統殭屍程式詳解Linux
- 什麼是殭屍程式以及如何處理
- JaCoCo助您毀滅線上殭屍程式碼
- iOS殭屍物件之研究iOS物件
- Linux 效能優化之 CPU 篇 ----- 殭屍程式Linux優化
- Linux程式管理、程式建立、執行緒實現、殭屍程式Linux執行緒
- 什麼是殭屍網路
- Unity 植物大戰殭屍(一)Unity
- 孤兒程序和殭屍程序
- 關於LINUX殭屍程式的出現和原理Linux
- hp-unix 殭屍程式導致系統崩潰
- Mirai殭屍網路重出江湖AI
- 植物大戰殭屍 雜交版
- 植物大戰殭屍-雜交版
- PHP 多程式之孤兒和殭屍簡單講解PHP
- UNIXC002 程式資源的回收、孤兒程式和殭屍程式
- mysql連線池爆滿,釋放程式長連線殭屍程式MySql
- 物聯網教程Linux系統程式設計——特殊程式之殭屍程式Linux程式設計
- 揭秘Neutrino殭屍網路生成器
- 怎樣有效的治理殭屍網路?
- RDP服務之GoldBrute殭屍網路Go