1. 程式人生 > 其它 >python-爬取網頁

python-爬取網頁

程序和計劃任務管理

文章目錄
程序和計劃任務管理
一、程式和程序的關係
二、檢視程序資訊
三、檢視靜態的程序統計資訊
1.ps -elf :
2.pgrep命令檢視程序資訊
3.檢視程序資訊
四、檢視程序資訊top
四、程序啟動方式
五、程序的前後臺排程
六、終止程序的執行
1.Ctrl+C組合鍵:中斷正在執行的命令
2.kil、killalll命令
3.pkill命令:根據特定條件終止相應的程序
七、計劃任務管理
1.at命令 一次性計劃任務
2.crontab命令
總結

引言:Linux一切皆檔案,而程式和程序也不例外,這裡主要講得就是程式與程序之間的關係,作為使用者熟悉瞭解並掌握程序的資訊,如何檢視、執行、排程、終止程序的方式。以及生產中經常有一些事情需要我們在某個時間段完成的事情,就需要用計劃任務來定時定點的完成任務

一、程式和程序的關係
程式:儲存在硬碟、光碟等介質中的可執行程式碼和資料

​ 靜態儲存的程式碼

程序:在CPU即記憶體中執行的程式程式碼

​ 動態執行的程式碼

​ 父、子程序(每個程式可以建立一個或多個程序

作業系統管理的單位中,程序是動態執行的程式碼,程式是靜態的程式就是一個二進位制檔案

程序是程式執行的過程,有生命週期及執行的狀態;程式、程序、執行緒;如圖

二、檢視程序資訊
ps命令:檢視靜態的程序統計資訊

常用的引數:-a:顯示當前終端下的所有程序資訊,包括其它使用者的程序,與“x”選項結合時將顯示系統中所有的程序資訊

​ -u:使用以使用者為主的格式輸出程序資訊

​ -x:顯示當前使用者在所有終端下的程序資訊

常用引數的選項組合:

ps -aux 以簡單列表的形式顯示出程序資訊

USER:啟動該程序的使用者賬號的名稱

PIN :該程序在系統中的數字ID號,在當前系統中是唯一的

%CPU:CPU 佔用的百分比

%MEM :記憶體佔用的百分比

VSZ:該程序使用的虛擬記憶體量(KB)

RSS:該程序佔用的實體記憶體量(KB)

TTY:表明該程序在哪個終端上執行,不是從終端啟動的程序則顯示為?

​ pts是遠端登入終端 ctrl+ALT F1-F6 tty1影象介面 2和6 字元介面 ?是系統本身自主執行的程序

STAT:該程序的狀態(D:不可中斷的休眠狀態;R:正在執行狀態;S:處於休眠狀態,可唄喚醒T:停止狀態,可能是在後臺暫時或程序處於跟蹤除錯狀態;z:殭屍程序,程序已經終止,但部分程式還在記憶體當中)

D:系統守護程序

T:除錯、程式執行一般停止

R:該程式目前正在運作,或是可以被運作

S:該程式目前正在睡眠當中(可說是idle狀態),但可被某些訊號(signak)喚醒

Z:該程式應該已經終止,但是其父程式無法正常的終止該程序,造成zombie(殭屍)程式的狀態不可中斷的狀態

它們的含義:

​ <:表示程序執行在高優先順序上

​ N:表示程序執行在低優先順序上

​ L:表示程序有頁面鎖定在記憶體中

​ S:表示程序是控制程序

​ l:表示程序是多執行緒的

​ +:表示當前程序執行在前臺

​ D:系統守護程序

​ T:除錯、程式執行一般停止

START:啟動該程序的時間

TIME:該程序佔用的CPU時間

COMMMAND:啟動該程序的命令的名稱

例:

vim a.txt 在另一個終端執行

ps -aux | grep a.txt 檢視狀態S表示睡眠狀態 + 表示前臺

 

在 vim a.txt 這個終端上按下:ctrl +z [1]+ 已停止 vim.atxt 在另一個終端執行;

ps -aux |grep a.txt 檢視狀態 T表示停止狀態

ctrl-c 傳送SIGING訊號,終止一個程序

ctrl -z 傳送SINGTOP,掛起一個程序,將作業放置道後臺(暫停)

ctrl -d 不是傳送訊號,而是表示一個特殊的二進位制值,表示EOF,代表輸入完成或登出

案例2: D 不可中斷狀態

tar -zcvf usr-tar.gz /usr/

然後再另一個終端不斷檢視狀態,由S+,R+變為D+

三、檢視靜態的程序統計資訊

1.ps -elf :

​ -e 顯示系統內的所有程序資訊

​ -l:使用長格式顯示程序資訊

​ -f:使用完整的格式顯示程序資訊

各列的解釋

F:表示核心,核心分配給程序的系統標記

s:表示程序的狀態

UID:啟動這些程序的使用者

PID:程序的程序ID

PPID:父程序的程序號(如果該程序是由另一個程序啟動的)

C:代表程序生命週期,程序生命週期中的CPU利用率

PRI:程序的優先順序(數字越大優先順序越低)

NI:謙讓讀值用來參與決定優先順序

ADDR :程序的記憶體地址

SZ:加入程序被換出,所需交換空間的大致大小

WCHAN:若該程序被換出,所需交換空間的大致大小

STIME:程序啟動時的系統時間

TTY:程序啟動時的終端裝置, pts/0255代表虛擬終端,一般時遠端連線的終端;ttyltty7 代表本地控制檯終端

TIME:執行程序需要的累計CPU時間

CMD:程序的啟動命令

殭屍程序:一個程序如結束了,如果該程序的父程序已經先結束了,那麼該程序就不會變成殭屍程序,因為每個程序結束的時候,系統都會掃描當前系統中所執行的所有程序,看有沒有哪個程序是剛剛結束的這個程序的子程序,如果是,就由init來接管它,成為它的父程序,子程序退出後init會揮手其佔用的相關資源,但是當子程序比父程序結束,而父程序又沒有揮手子程序,釋放子程序佔用的資源,此時子程序將成為一個殭屍程序

程序狀態:

-D:不可被喚醒的睡眠狀態,通常用於I/O情況

-R:該程序正在執行

-S:該程序處於睡眠狀態,可被喚醒

-T:停止狀態,可能是後臺暫停或程序處於除錯狀態

-W:記憶體互動狀態(從2.6核心開始無效)

-X:死掉的程序(應該不會出現)

-Z:殭屍程序(程序已經中止,但是部分程式還在記憶體當中

-<:高優先順序(以下狀態在BSD格式中出現)

N:低優先順序

-L:被鎖入記憶體

-s:包含子程序

-l:多執行緒(小寫L)

-+:位於後臺

-C:程序佔用CPU的百分比

2.pgrep命令檢視程序資訊
根據特定條件查詢程序PID資訊

-l:選項可同時輸出對應的程序名以及PID

U:選項查詢特定使用者的程序

-t:選項查詢在特定終端執行的程序

pgrep -l "log"根據特定條件查詢PID資訊

排錯先檢視磁碟空間df -h—>

pgrep - log

pgrep -U root | wc -l 檢視使用者root程序,統計數量

pgrep -U root | wc-l >tmp/pgrep.txt

3.檢視程序資訊
pstree命令 以樹形結構列出程序資訊

-a:顯示完整資訊,選項使用時可以同時列出對應的PID號

-u:列出對應使用者名稱,選項可以列出對應的使用者名稱

-p:列出對應PID號,選項可以列出完整的命令資訊

例:pstree -aup hmj

四、檢視程序資訊top

檢視動態的程序排名資訊

上述輸出資訊中,開頭的部分顯示了系統任務(Tasks)、CPU佔用、記憶體佔用(Mem)、交換空間(Swap)等彙總資訊,彙總資訊下方依次顯示當前程序的排名情況,相關資訊的含義表述如下

01:11:56up 當前時間

up 8:53 系統執行時間

3users 當前登入使用者數

load average:0.06, 0.60 , 0.48 系統負載,即任務佇列的平均長度,三個數值分別為1分鐘、5分鐘、15分鐘前到現在的平均值。

系統任務(Tsaks)資訊:total,總程序數;running,正在執行的程序數 ;sleeping,休眠的程序數;

stopped ,中止的程序數;zombie,僵死無響應的程序數

CPU佔用資訊:us,使用者佔用;sy,核心佔用;ni,優先順序排程佔用;id,空閒CPU;wa,I/O等待佔用;hi,硬體中斷的佔用;si 軟體中斷佔用;st,虛擬化佔用。要了解空閒的CPU百分比,主要看%id部分

記憶體佔用(Mem)資訊:total,總記憶體空間;free,空閒記憶體;used,已用記憶體;buff/cache,實體記憶體和交換記憶體的緩衝區總和

交換空間(Swap)佔用:total,總交換空間; free,空閒交換空間; used,已用交換空間:avail Mem,可用物理空間

USER:程序所有使用者使用者名稱;PR:優先順序;NI:程序優先順序;VIRT:虛擬記憶體;RES:程序所使用的實體記憶體;SHR:共享記憶體大小(以KB開頭);COMMAND:命令

詳細說明

Tasks:481 total 程序總數

1 running 正在執行的程序數

480 sleeping 睡眠的程序數

0 stopped 停止的程序數

0 zombie 殭屍程序數

CPU(s):0.0% us 系統使用者程序使用CPU百分比

0.0% sy核心中的程序佔用CPU百分比 優先順序排程佔用

0.0% ni使用者程序空間內該百年過優先順序的程序佔用CPU百分比

98.7% id 空閒CPU百分比

0.0.% wa

CPU等待I/O完成的時間總量 測試:

終端 1:執行:top

終端 2:dd if=dev/zero of=/a.txt count=10 bs=100M

終端 3:dd if=/dev/zero of=/a.txt count=10 bs=100M

0.0%hi (瞭解)硬中斷消耗時間 硬體中斷佔用

硬中斷,站的CPU百分比,硬中斷是由硬體產生的,比如像磁碟、網絡卡、鍵盤、時鐘等,每個裝置或裝置集都有它自己的IRQ(中斷請求),基於IRQ,CPU可以將相應的請求分發到對應的硬體驅動上(注:硬體驅動通常是核心中的一個子程式,而不是一個獨立的程序)

Hardware IRQ:The amount of time the CPU has been servicing hardware interrupts

0.0%si(瞭解)軟中斷消耗時間 軟體中斷佔用

軟中斷,佔的CPU百分比,1.通常軟中斷是一些對I/O的請求,這些請求會呼叫核心中可以排程I/O發生的程式,對於某些設別,I/O請求需要被立即處理,而磁碟I/O請求通產可以排隊並且可以稍後處理,根據I/O模型的不同,程序或許會被掛起知道I/O完成,此時核心排程器就會選擇另一個程序去執行,I/O可以在程序之間產生並且排程過程通常和磁碟I/O的方式是相同的。

si ->Software Interrupts:The amount of time the CPU has been servicingsoftware interrups

0.0 st (steal 偷)虛擬化佔用,要了解空閒的CPU百分比,主要看%id部分

st:虛擬化偷取物理的時間,比如:物理機已經運行了KVM,XEN虛擬機器。KVM虛擬機器佔用物理機的CPU時間

MEM:1863252 total 實體記憶體總量

470936 used 使用的實體記憶體總量

69260 free 空閒記憶體總量

1323056 buff/cache 用作核心快取的記憶體量,和free -k 一個意思

Swap:2017948k 空閒交換區總量

1103376 avail Mem 總的可利用記憶體是多少

4095996 free 空閒交換區總量

1518148 avail Mem 總的可利用記憶體是多少

7行程序資訊

PID 程序id

USER 程序所有者的使用者名稱

PR 優先順序(由核心動態調整),使用者不能

NI 程序優先順序,nice值。負值表示高優先順序,正值表示低優先順序,使用者可以自己調整

VIRT (virtual memoty usage) 虛擬記憶體,是程序正在使用的所有記憶體(ps中標為VSZ)

1.程序“需要的“虛擬記憶體大小,包括程序使用的庫、程式碼、資料等

2.加入程序申請100M的記憶體,但實際只使用了10m,那麼它會增長100M,而不是實際的使用量

RES 是程序所使用的實體記憶體,實際使用記憶體(ps中標為RSS)

RES:resident memory usage 常駐記憶體

1.程序當前使用的記憶體大小,但不包括swap out

2.包含其它程序的共享

3.如果申請100M的記憶體,實際使用10m,它只增長10m,與VIRT相反

4.關於庫佔用記憶體的情況,它只統計載入的庫檔案所佔記憶體大小

SHR共享記憶體大小,單位kb SHR:shared memory 共享記憶體

1.除了自身程序的共享記憶體,也包括其它程序的共享記憶體

2.雖然程序只使用了幾個共享庫的函式,但它包含了整個共享庫的大小

3.計算某個程序所佔的實體記憶體大小公式:RES -SHR

4.swap out後,它將會降下來

S 程序狀態:

D=不可中斷的睡眠狀態

R=執行中或可執行s=睡眠中

T=已跟蹤/已停止z=僵停

%CPU 上次更新到現在的CPU時間佔用百分比

%MEM 程序使用的實體記憶體百分比

TIME+ 程序使用的CPU時間總計,單位1/100秒

COMMABD 命令名/命令列

top命令全屏操作介面快捷鍵:

預設3s重新整理一次,按s修改重新整理時間,按空格鍵立即重新整理

P:按CPU排序

M:按記憶體排序

T:按時間排序

p:程序IP,檢視某個程序狀態

N鍵根據啟動時間進行排序

數字鍵1:顯示每個核心的CPU使用率u/U;指定顯示的使用者

h:可以獲得top程式的線上幫助資訊

q:可以正常的退出top程式

注:若通過top排名工具發現某個程序CPU佔用率非常高,需要終止該程序的執行,可以在top操作介面中按k鍵,然後再列表上方將會出現”PID to signal/kill [default pid =3180]"的提示資訊,根據提示輸入指定程序的PID號回車,出現“Send pid 5597 signal [15/sigterm]"的二次確認的提示資訊,然後回車確認即可終止對應的程序

四、程序啟動方式

手工啟動:

​ 前臺啟動:使用者輸入命令,直接執行程式

​ 後臺啟動:在命令列尾加入“&“符號

排程啟動:使用at命令,設定一次性計劃任務

​ 使用crontab命令,設定週期性計劃任務

控制程序(1)手工啟動程序:由使用者手工輸入命令或者可執行程式的路徑,可以至少啟動一個程序,根據該程序是否需要佔用當前的命令終端,手工啟動又可以分為前臺啟動和後臺啟動

程序在前臺執行(如執行”ls -l"命令)時,使用者必須等到該程序執行結束並退出以後才能繼續輸入其它命令,大多數命令操作在前臺啟動執行,程序在後臺執行時,使用者可以繼續在當前終端輸入其它命令,而無需等待該程序結束,適用於執行耗時較長的操作

啟動後臺程序需要使用“&”操作符,將“&”操作符放在要執行命令的最後面,程序啟動後會直接放入後臺執行,而不佔用前臺的命令操作介面,方便使用者進行其它操作,例如,當使用cp命令從光碟中製作映象檔案時,由於需要複製的資料較多,耗時較長,因此可結合”&“符號將複製操作放到後臺執行,以便使用者可以繼續執行其它命令操作

cp /dev/cdrom /home/cetos7.iso &

五、程序的前後臺排程
Ctrl+Z組合鍵:將當前程序掛起,即調入後臺並停止執行

掛起當前的程序

當Linux作業系統中的命令正在前臺執行時(執行尚未結束),按Ctrl+z組合鍵可以將當前程序掛起(調入後臺並停止執行),這種操作在需要暫停當前程序並進行其它操作時特別有用,例如,打包usr並且二調入後臺,可以按Ctrl+z組合鍵將該下載任務調入後臺並暫停執行

tar zcvf usr.tar.gz /usr

jobs命令:檢視處於後臺的任務列表

fg命令:將後臺程序恢復到前臺執行,可指定任務序號

先用jobs檢視,在用fg命令指定序號呼叫後臺

jobs命令檢視處於後臺的任務列表

-l :選項可以同時顯示該程序對應的PID號

將後臺的程序恢復執行;使用bg命令,可以將後臺中暫停執行(如按Ctrl+z組合鍵掛起)的任務恢復執行,繼續在後臺執行操作;

使用fg命令(ForGround,前臺,可以將後臺任務重新恢復到前臺執行

除非後臺中的任務只有一個,否則bg和fg命令都需要指定後臺程序的任務編號作為引數,例如,執行如下的”fg 1“命令可以將之前掛起至後臺的wget程序重新調入前臺執行,除非後臺只有一個,否則bg和fg命令都需要指定後臺程序的編號作為引數

六、終止程序的執行
1.Ctrl+C組合鍵:中斷正在執行的命令
終止程序執行,當用戶在前臺執行某個程序時,可以按Ctrl+c組合鍵強制進行中斷(當一個命令長時間沒有響應的情況下),中斷前臺程序的執行後,系統將返回命令列提示符狀態等待使用者輸入新的命令,當按Ctrl+c組合鍵無法終止程式或者需要結束在其它終端或後臺執行的程序時,可以使用kill、killall和pkill

2.kil、killalll命令
kill、killall命令殺死

kill用於終止指定PID號的程序

killall用於終止指定名稱的所有程序

-9選項用於強制終止

使用kill命令終止程序

通過kill命令終止程序時,需要使用程序的PID號作為引數,無特定選項時,kill命令將給該程序傳送終止訊號並正常退出執行,若該程序已經無法響應終止訊號,則可以結合”-9“選項強行終止程序,強制終止程序時可能會導致程式執行的部分資料丟失,

面試問題:kill不用-9預設值是多少?

​ -3 退出程序,正常把程式退出, 友好的方式

​ -9 指定強制殺掉,不正規的

​ -19 停止,暫停的意思

​ -15 終止的意思(正常停止一個程序)

3.pkill命令:根據特定條件終止相應的程序
​ 常用命令選項:-U:根據程序所屬的使用者名稱終止相應程序

​ -t:根據程序所在的終端終止相應程序

七、計劃任務管理
1.at命令 一次性計劃任務
一次性計劃任務做什麼:1、定期備份web資料庫;2、定期採集檢測資料;3、find 5天以外的資料資料刪除

例:

atq:檢視一次計劃

atrm3:刪除

例:在當天晚上的23:30時自動關閉當前系統

 例2:

2.crontab命令
按照預先設定的時間週期(分鐘、小時、天、月、周)重複執行使用者指定的命令操作

屬於週期性計劃任務

主要設定檔案:全域性配置檔案,位於檔案:/etc/crontab

​ 系統預設的設定,位於檔案:/etc/crontab

​ 使用者定義的設定,位於檔案:/var/spool/cron 使用者名稱

crontab是守護程序,會自動檢查/etc/crontab檔案、/etc/cron.d目錄、及/var/spool/cron目錄中的改變,如果發現配置有更改,它們會被載入記憶體。所以當某個crontab檔案改變後並不需要重新啟動crond守護程序就可以設定生效。

管理crontab計劃任務

編輯計劃任務:crontab -e [-u 使用者名稱]

檢視計劃任務

crontab -l [-u 使用者名稱]

刪除計劃任務

crontab -r [-u 使用者名稱]

指定編輯計劃任務:-e

指定使用者管理計劃任務:-u 預設當前使用者

crontab時間數值的特殊表示方法:

  • *表示該範圍內的任意時間
  • ,表示間隔的多個不連續時間點
  • -表示一個連續的時間範圍
  • /指定間隔的時間頻率

例:0 17 * * 1-5 週一到週五每天17:00

​ 20 10 * * 1,3,5,7 每週一、三、五、七的10點20分

​ 0 6-12/2 * * * 6點到12點之間每2小時

​ 0 * */3 * * 每3天

crontab時間數值的特殊表示方法:

*表示該範圍內的任意時間
,表示間隔的多個不連續時間點
-表示一個連續的時間範圍
/指定間隔的時間頻率
例:0 17 * * 1-5 週一到週五每天17:00

​ 20 10 * * 1,3,5,7 每週一、三、五、七的10點20分

​ 0 6-12/2 * * * 6點到12點之間每2小時

​ 0 * */3 * * 每3天

總結

根據上述內容描述,我們瞭解到程式與程序的關係;檢視一個程序的多種操作命令,檢視一個程序的資訊一般用pa -aux;檢視程序靜態統計資訊ps -elf,根據特定條件查詢程序PID資訊等用pgrep;pstree以樹形結構列出程序資訊;top命令動態檢視程序資訊,可以解決高併發問題第一視角;調動程序前後臺操作,程序的前後臺排程,Ctrl+z調入後臺執行;fg命令恢復執行並調入前臺執行,jobs檢視程序在哪裡工作;kill強制終止程序執行,at命令執行一次性計劃任務操作,crontab週期性計劃任務,方便生產環境中對服務要求定時操作,節省大量時間。