
而在windows等其他作業系統中,程序擁有一個程序描述符,描述一些位址空間和打開的檔案等共享資源,程序中包含指向不同線程的指針,
這些線程沒有程序描述符,隻描述一些少量的獨有的資源,是以很輕量。同時這些線程共享程序的資源。如圖2所示。
1、程序的狀态
Linux核心:搶占式多任務 程序類型: 守護程序: daemon,在系統引導過程中啟動的程序,和終端無關程序 前台程序:跟終端相關,通過終端啟動的程序 注意:兩者可互相轉化 程序狀态: 運作态:running 就緒态:ready 睡眠态: 可中斷:interruptable 不可中斷:uninterruptable 停止态:stopped,暫停于記憶體,但不會被排程,除非手動啟動 僵死态:zombie,結束程序,父程序結束前,子程序不關閉
2、程序的優先級
程序優先級: 系統優先級:數字越小,優先級越高 0-139(CentOS4,5) 各有140個運作隊列和過期隊列 0-98,99(CentOS6) 實時優先級: 99-0 值最大優先級最高 nice值:-20到19,對應系統優先級100-139或99 Big O:時間複雜度,用時和規模的關系 O(1), O(logn), O(n)線性, O(n^2)抛物線, O(2^n)
ps指令用于報告目前系統的程序狀态。可以搭配kill指令随時中斷、删除不必要的程式。ps指令是最基本同時也是非常強大的程序檢視指令,使用該指令可以确定有哪些程序正在運作和運作的狀态、程序是否結束、程序有沒有僵死、哪些程序占用了過多的資源等等,總之大部分資訊都是可以通過執行該指令得到的。
每個圈中各個含義如下:
USER: 程序的目前使用者; PID : 毫無疑問, process ID的縮寫,也就程序号; %CPU 程序的cpu占用率;%MEM 程序的記憶體占用率; VSZ 程序所使用的虛存的大小;RSS 程序使用的駐留集大小或者是實際記憶體的大小; TTY 與程序關聯的終端(tty); STAT 檢查的狀态:程序狀态使用字元表示的,如R(running正在運作或準備運作)、S(sleeping睡眠)、I(idle空閑)、Z (僵死)、D(不可中斷的睡眠,通常是I/O)、P(等待交換頁)、W(換出,表示目前頁面不在記憶體)、N(低優先級任務)T(terminate終 止)、W has no resident pages START (程序啟動時間和日期);TIME ;(程序使用的總cpu時間);COMMAND (正在執行的指令行指令)
當伺服器被攻擊多了一些莫名其它程序時,這是就需要殺死程序在逐一排錯,用kill或killall指令】
用法:kill
-0 無作為,可以用來單純判斷程序是否運作.
-1 -HUP:強制程序重讀配置檔案
-2 -INT: 中止正在運作的程序;相當于Ctrl+c
-3 -QUIT: 相當于ctrl+\
-9 -KILL: 強制殺死正在運作的程序 (謹慎使用)
-15 -TERM: 終止正在運作的程序 (預設)\
killall 程序命
差別:使用kill指令的時候需要PID,而且PID是會變的,但是我們一般隻知道啟動程序的程式或指令名字,是以要先用ps結合grep查找對應的PID。killall可以簡化這個過程,直接在killall後面跟相應 的指令即可,它會殺死所有使用這個指令名或程式名的程序。
我用ping指令舉個例子
檢視程序,看到ping的程序了
用kill殺死
此時ping過程已經中斷
top指令可以實時動态地檢視系統的整體運作情況,是一個綜合了多方資訊監測系統性能和運作資訊的實用工具。通過top指令所提供的互動式界面,用熱鍵可以管理。 -b:以批處理模式操作; -c:顯示完整的治指令; -d:螢幕重新整理間隔時間; -I:忽略失效過程; -s:保密模式; -S:累積模式; -i<時間>:設定間隔時間; -u<使用者名>:指定使用者名; -p<程序号>:指定程序; -n<次數>:循環顯示的次數。
在top指令執行過程中可以使用的一些互動指令。這些指令都是單字母的,如果在指令行中使用了-s選項, 其中一些指令可能會被屏蔽。
h:顯示幫助畫面,給出一些簡短的指令總結說明;
k:終止一個程序;
i:忽略閑置和僵死程序,這是一個開關式指令;
q:退出程式;
r:重新安排一個程序的優先級别;
S:切換到累計模式;
s:改變兩次重新整理之間的延遲時間(機關為s),如果有小數,就換算成ms。輸入0值則系統将不斷重新整理,預設值是5s;
f或者F:從目前顯示中添加或者删除項目;
o或者O:改變顯示項目的順序;
l:切換顯示平均負載和啟動時間資訊;
m:切換顯示記憶體資訊;
t:切換顯示程序和CPU狀态資訊;
c:切換顯示指令名稱和完整指令行;
M:根據駐留記憶體大小進行排序;
P:根據CPU使用百分比大小進行排序;
T:根據時間/累計時間進行排序;
w:将目前設定寫入~/.toprc檔案中。
1、計劃任務概說;
計劃任務,是任務在約定的時間執行已經計劃好的工作,這是表面的意思。在Linux中,我們經常用到 crond 伺服器來完成這項工作。cron伺服器可以根據配置檔案約定的時間來執行特定的作務。比如我們可以在配置檔案中約定每天早上4點,對httpd 伺服器重新啟動,這就是一個計劃任務;
2、周期性任務計劃cron
3、crond的啟動與安裝
在一般情況下,cron都是系統預設安裝的,我們要檢視軟體包是否已經安裝: [root@6 ~]#rpm -qa |grep cron CentOS 7: systemctl status crond CentOS 6: service crond status
計劃周期性執行的任務送出給crond,到指定時間會自動運作 系統cron任務:系統維護作業 /etc/crontab 使用者cron任務: crontab指令 日志:/var/log/cron
*代表所有 cron 配置計劃任務的書寫格式 分鐘 小時 日 月 周 [使用者名] 指令
4、讓任務計劃開機自啟動
對于cron任務來講,%有特殊用途;如果在指令中要使用%, 則需要轉義,将%放置于單引号中,則可不用轉義
下面舉例說說,如何把一個shell腳本添加為系統服務,并跟随系統啟動: 可以看到“/etc/rc.d/init.d”下有很多的檔案,每個檔案都是可以看到内容的,其實都是一些shell腳本。 系統服務的啟動就是通過“/etc/rc.d/init.d”中的腳本檔案實作的。我們也可以寫一個自己的腳本放在這裡。 腳本檔案的内容也很簡單,類似于這個樣子(例如起個名字叫做“hahad”): . /etc/init.d/functions start() { echo "Starting my process " cd /opt ./haha.sh } stop() { killall haha.sh echo "Stoped" 寫了腳本檔案之後事情還沒有完,繼續完成以下幾個步驟: chmod +x hahad #增加執行權限 chkconfig --add hahad #把hahad添加到系統服務清單 chkconfig hahad on #設定hahad的開關(on/off) chkconfig --list hahad #就可以看到已經注冊了hahad的服務* 這時候才完成了全部工作。