python程式碼編譯總結-用於程式碼加密
一.檢視程序
二.控制程序
三.at一次性任務設定
四.crontab週期性任務設定
一.程式和程序的關係
1.1程式
·儲存在硬碟.光碟等介質中的可執行程式碼和資料
·靜態儲存的程式碼
·二進位制的檔案、靜態
1.2程序
·在CPU及記憶體中執行的程式程式碼
·動態執行的程式碼
·程式執行的過程、動態,有生命週期及執行狀態
·父、子程序
·每個程式可以建立一個或多個程序
1.3執行緒
·包含在程序之中,是執行緒中實際運作單位,也是作業系統中能夠獨立執行的基本單位,也稱作輕量程序,一個程序中可以併發多個執行緒,每條執行緒可以併發執行不同任務,而我們在工作管理員中看到的一個個程序則由我們下載的應用程式所產生的,當然一個應用程式也可以包含多個程序。
1.4 協程
利用執行緒等待時間,執行其他任務輔助執行緒。
二.PS命令檢視靜態的程序統計資訊
1.常用的引數
-a:顯示當前終端下的所有程序資訊,包括其他使用者的程序。與“X”選項結合時將顯示系統中所有的程序資訊。
-u:使用以使用者為主的格式輸出程序資訊。
-x:顯示當前使用者在所有終端下的程序資訊。
2.常用的選項組合
Ps -aux 將以簡單列表的形式顯示出程序資訊
-a:顯示當前終端下的所有程序資訊,包括其他使用者的程序。與“x”選項結合時將顯示系統中所有的程序資訊。
-u:使用以使用者為主的格式輸出程序資訊。
-x:顯示當前使用者在所有終端下的程序資訊。
USER:啟動該程序的使用者賬號的名稱。
PID:該程序在系統中的數字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狀態啦!),但可被某些訊號(signal)喚醒。T:該程式目前正在偵測或者是停止了;
Z:該程式應該已經終止,但是其父程式卻無法正常的終止他,造成zombie(疆屍)程式的狀態D不可中斷狀態。
它們含意如下:
<:表示程序執行在高優先順序上
N:表示程序執行在低優先順序上
L:表示程序有頁面鎖定在記憶體中
s:表示程序是控制程序
l:表示程序是多執行緒的
+:表示當前程序執行在前臺
D:系統守護程序
T:調式、程式執行一般停止
START:啟動該程序的時間。
TIME:該程序佔用的 CPU 時間。
COMMAND:啟動該程序的命令的名稱
例1
檢視程序狀態[root@benet ~]# vim a.txt 在另一個終端執行:
[root@benet ~]# ps -aux|grep a.txt 檢視狀態S表示睡眠狀態,+表示前臺
root 4435 0.0 0.2 151752 5292 pts/1 S+ 20:52 0:00 vim a.txt
root 4661 0.0 0.0 112676 996 pts/0S+ 21:05 0:00
grep --color=auto a.txt
在vim a.txt 這個終端上 按下:ctrl+z[1]+ 已停止vim a.txt 在另一個終端執行:
[root@benet ~]# ps -aux|grep a.txt 檢視狀態 T 表示停止狀態
root 4435 0.0 0.2 151752 5292 pts/1 T 20:52 0:00 vim a.txt
root 4675 0.0 0.0 112676 996 pts/0 S+ 21:05 0:00
grep --color=auto a.txt
注:
ctrl-c 是傳送 SIGINT 訊號,終止一個程序
ctrl-z 是傳送 SIGSTOP 訊號,掛起一個程序。將作業放置到後臺(暫停)
ctrl-d 不是傳送訊號,而是表示一個特殊的二進位制值,表示 EOF。代表輸入完成或者登出
例2 D 不可中斷狀態
[root@xuegod63 ~]# tar -zcvf usr-tar.gz /usr/
然後在另一個終端不斷檢視狀態,由 S+,R+變為 D+
ps -elf 將以長格式顯示系統中的程序資訊
-e:顯示系統內的所有程序資訊。
-1:使用長格式顯示程序資訊。
-f:使用完整的格式顯示程序資訊。
F:核心分配給程序的系統標記。
S:程序的狀態。
UID:啟動這些程序的使用者。
PID: 程序的程序ID.
PPID:父程序的程序號(如果該程序是由另一“個程序啟動的)
C:程序生命週期中的CPU利用率。
PRI:程序的優先順序(越大的數字代表越低的優先順序)。
NI: 謙讓度值用來參與決定優先順序。
ADDR:程序的記憶體地址。
SZ:假如程序被換出,所需交換空間的大致大小。
WCHAN:若該程序在睡眠,則顯示睡眠中的系統函式名。
STIME:程序啟動時的系統時間。
TTY:程序啟動時的終端裝置。 pts/0255代表虛擬終端,一般是遠端連線的終端;tty1tty7 代表本地控制檯終端
TIME:執行程序需要的累計CPU時間。
CMD:程序的啟動命令。
殭屍程序:
一個程序結束了,但是如果該程序的父程序已經先結束了,那麼該程序就不會變成殭屍程序,因為每個程序結束的時候,系統都會掃描當前系統中所執行的所有程序,看有沒有哪個程序是剛剛結束的這個程序的子程序,如果是的話,就由init來接管它,成為它的父程序,子程序退出後init會回收其佔用的相關資源。但是當子程序比父程序先結束,而父程序又沒有回收子程序,釋放子程序佔用的資源,此時子程序將成為一個殭屍程序。
top命令-檢視程序動態資訊
Uptime:當前時間 Up:系統執行時間 ,說明此伺服器連續執行 20 天了
1 user:當前登入使用者數 load average:系統負載,即任務佇列的平均長度。 三個數值分別為 1 分鐘、5 分鐘、15 分鐘前到現在的平均值。
系統任務(Tasks)資訊:total,總程序數;running,正在執行的程序數;sleeping,休眠的程序數;stopped,中止的程序數;zombie,僵死無響應的程序數。
%CPU(s) 佔用資訊: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,可用物理空間。
PID:程序 id
USER:程序所有者的使用者名稱
PR:優先順序(由核心動態調整),使用者不能
NI:程序優先順序。 nice 值。負值表示高優先順序,正值表示低優先順序,使用者可以自己調整
VIRT:(virtual memory usage) 虛擬記憶體,是程序正在使用的所有記憶體(ps 中標為 VSZ) VIRT:virtual memory usage 虛擬記憶體
1、程序“需要的”虛擬記憶體大小,包括程序使用的庫、程式碼、資料等
2、假如程序申請 100m 的記憶體,但實際只使用了 10m,那麼它會增長
100m,而不是實際的使用量
RES:(resident memory usage) 是程序所使用的實體記憶體。實際實用記憶體(ps 中標為 RSS) RES:resident memory usage 常駐記憶體
1、程序當前使用的記憶體大小,但不包括 swap out
2、包含其他程序的共享
3、如果申請 100m 的記憶體,實際使用 10m,它只增長 10m,與 VIRT 相反
4、關於庫佔用記憶體的情況,它只統計載入的庫檔案所佔記憶體大小
SHR:共享記憶體大小,單位 kb SHR:shared memory 共享記憶體
1、除 M 了自身程序的共享記憶體,也包括其他程序的共享記憶體
2、雖然程序只使用了幾個共享庫的函式,但它包含了整個共享庫的大小
3、計算某個程序所佔的實體記憶體大小公式:RES – SHR 4、swap out 後,它將會降下來
S:程序狀態。
D=不可中斷的睡眠狀態
R=執行中或可執行S=睡眠中
T=已跟蹤/已停止Z=僵停
%CPU:上次更新到現在的 CPU 時間佔用百分比
%MEM:程序使用的實體記憶體百分比
TIME+:程序使用的 CPU 時間總計,單位 1/100 秒
COMMAND:命令名/命令列
top 命令全屏操作介面快捷鍵:
預設 3s 重新整理一次,按s修改重新整理時間按空格:立即重新整理。
P(大寫):按 CPU 排序
M:按記憶體排序
T:按時間排序
P(小寫):在外部使用 top -p PID 追蹤程序
N:鍵根據啟動時間進行排序
數字鍵1:顯示每個核心的 CPU 使用率u/U:指定顯示的使用者
h:可以獲得 top 程式的線上幫助資訊
q:鍵可以正常地退出top程式
K(小寫):刪除程序
注:若通過 top 排名工具發現某個程序 CPU 佔用率非常高,需要終止該程序的執行,可以在 top 操作介面中按 k 鍵,然後在列表上方將會出現“PID to signal/kill [default pid = 3180]:”的提示資訊,根據提示輸入指定程序的 PID 號並按 Enter 鍵, 出現“Send pid 5597 signal [15/sigterm]”的二次確認的提示資訊,然後按Enter 鍵確認即可終止對應的程序。
pgrep命令查詢程序資訊
-l:選項可同時輸出對應的程序名以及PID號
-U:選項查詢特定使用者的程序
-t:選項查詢在特定終端執行的程序
例:pgrep -l "log"
pgrep -l -U teacher -t tty1
pstree命令以樹形結構列出程序資訊
pstree 命令預設情況下只顯示各程序的名稱,
結合以下常用的引數使用:
-p:選項使用時可以同時列出對應的PID號
-u:選項可以列出對應的使用者名稱
-a:選項可以列出完整的命令資訊
“pstree -aup”命令可以檢視當前系統的程序樹,包括各程序對應的PID 號、使用者名稱、完整命令等資訊
二.控制程序
1.手工啟動程序
由使用者手工輸入命令或者可執行程式的路徑,可以至少啟動一個程序。根據該程序是否 需要佔用當前的命令終端,手工啟動又可以分為前臺啟動和後臺啟動。
1.1前臺啟動
如執行“ls -l”命令)時,使用者必須等到該程序執行結束並退出以後才能繼續輸入其他命令,大多數命令操作在前臺啟動執行。程序在後臺執行時,使用者可以繼續在當前終端中輸入其他命令,而無須等待該程序結束,適用於執行耗時較長的操作。
1.2後臺啟動
啟動後臺程序需要使用“&”操作符,將“&”操作符放在要執行命令的最後面,程序啟動後會直接放入後臺執行,而不佔用前臺的命令操作介面,方便使用者進行其他操作。例如,當使 用 cp 命令從光碟中製作映象檔案時,由於需要複製的資料較多,耗時較長,因此可結合“&” 符號將複製操作放到後臺執行,以便使用者可以繼續執行其他命令操作。
cp /dev/cdrom /home/cetos7.iso &
2.程序的前後臺排程
2.1 Ctrl+Z組合鍵
將當前程序掛起,即調入後臺並停止執行
tar zcf usr.tar.gz /usr &
2.2jobs命令
檢視處於後臺的任務列表
2.3 將後臺的程序恢復執行
使用 bg命令(BackGround,後臺),可以將後臺中暫停執行(如按 Ctrl+Z 組合鍵掛起)的任務恢復執行,繼續在後臺執行操作;
使用 fg命令(ForeGround,前臺),可以將後臺任務重新恢復到前臺執行。
除非後臺中的任務只有一個,否則 bg 和 fg 命令都需要指定後臺程序的任務編號作為引數。
3.終止程序的執行
Ctrl+c 組合鍵:中斷正在執行程序的命令
3.1使用 kill 命令終止程序
通過 kill 命令終止程序時,需要使用程序的 PID 號作為引數。無特定選項時,kill 命令將給該程序傳送終止訊號並正常退出執行,若該程序已經無法響應終止訊號,則可以結合“-9” 選項強行終止程序。強制終止程序時可能會導致程式執行的部分資料丟失,因此不到不得已時不要輕易使用“-9”選項。
例:
若 SSH 服務的 sshd 程序的 PID 號為 5822,則執行“kill 5822”命令後可以將程序 sshd 終止
[root@localhost ~]# pgrep -l "sshd" 查詢目標程序的PID 號
5822 sshd
[root@localhost ~]# kill 5822 終止指定PID 的程序
[root@localhost ~]# pgrep -l "sshd" 確認程序已終止(查詢時無結果
對於無法正常終止的系統程序,在必要時可以結合“-9”選項強制終止。例如,以下操作展示了強制終止 vim 程序的過程
[root@localhost ~]# vim testfile & 開啟vim 程式並掛起作為測試
[1]+ Stopped vim testfile
[root@localhost ~]# jobs –l 查詢目標程序的PID 號
[1]+ 7095 Stopped vim testfile
[root@localhost ~]# kill 7095 嘗試正常結束程序
[root@localhost ~]# jobs -l 但發現vim 程序並未退出
[1]+ 7095 Stopped vim tmpfile
[root@localhost ~]# kill -9 7095 強制終止目標程序[root@localhost ~]# jobs -l 成功終止vim 程序
[1]+ 2993 已 殺死 vim tmpfile
3.2使用 killall 命令終止程序
使用 killall 命令可以通過程序名稱來終止程序,當需要結束系統中多個相同名稱的程序時,使用 killall 命令將更加方便,效率更高。killall 命令同樣也有“-9”選項。例如,執行如下的“killall -9 vim”命令可將所有名為 vim 的程序都強行終止
[root@localhost ~]# vim testfile1 & 掛起第 1 個 vim 測試程序
[1]+ Stopped vim testfile1
[root@localhost ~]# vim testfile2 & 掛起第 2 個 vim 測試程序
[2]+ Stopped vim testfile2
[root@localhost ~]# jobs -l 確認待終止的程序資訊
[1]- 7144 Stopped vim testfile1
[2]+ 7153 Stopped vim testfile2
[root@localhost ~]# killall -9 vim 通過程序名終止多個程序
[root@localhost ~]# jobs -l
[1]- 7144 Killed vim testfile1
[2]+ 7153 Killed vim testfile2
3.3使用 pkill 命令終止程序
使用 pkill 命令可以根據程序的名稱、執行該程序的使用者、程序所在的終端等多種屬性終止特定的程序,大部分選項與 pgrep 命令基本類似,如“-U”(指定使用者)、“-t”(指定終端) 等選項,使用起來非常方便。例如,若要終止由使用者 hmj 啟動的程序(包括登入 Shell),可以執行以下操作。
su - hmj
vim tst.txt &
[root@localhost ~]# pgrep –l -U "hmj" 確認目標程序相關資訊3773 bash
[root@localhost ~]# pkill -9 -U "hmj" 強行終止使用者hackli的程序
[root@localhost ~]# pgrep -l -U "hmj" 確認目標程序已被終止
三.at一次性任務設定
使用at命令設定的計劃任務只在指定的時間點執行一次,前提是對應的系統服務atd必須已經執行。需要注意的是,計劃執行任務的時間、日期必須安排在當前系統的時刻之後, 否則將無法正確設定計劃任務。
設定一次性計劃任務時,在 at 命令列中依次指定計劃執行任務的時間、日期作為引數
(若只指定時間則表示當天的該時間,若只指定日期則表示該日期的當前時間),確認後將進入帶“at>”提示符的任務編輯介面,每行設定一條執行命令,可以依次設定多條語句,最後按 Ctrl+D 組合鍵提交任務。所設定的命令操作將在計劃的時間點被依次執行。
示例:
先通過 date 命令確認當前的系統時間,並設定在 2017 年 5 月 7 日的10:35 自動執行以下任務:統計該時間點系統中由 root 使用者執行的程序的數量,並將該數值儲存到/tmp/ps.root 檔案中。
at [HH:MM] [yyyy-mm-dd]
任務設定完畢後按Ctrl+D 組合鍵提交
例1
[root@kgc /]# date
2021年 08月 16日 星期一 16:20:58 +00
[root@kgc /]# at 16:23 2021-08-16
at> pgrep -U root | wc -l > /tmp/ps.root //任務設定完畢後按Ctrl+D 組合鍵提交
at> <EOT><EOT>
job 1 at Mon Aug 16 16:23:00 2021
[root@localhost ~]# cat/tmp/ps.root 等過了計劃時間後驗證命令結果202
例2
以下操作將設定一條計劃任務,在當天的 21:30 自動關閉當前系統。
[root@localhost ~]# at 21:30
at> shutdown -h now
at> <EOT>
四.crontab 週期性任務設定
1.crontab任務配置的格式
欄位 |
說明 |
分鐘 |
取值為從0到59之間的任意整數 |
小時 |
取值為從0到23之間的任意整數 |
日期 |
取值為從1到31之間的任意整數 |
月份 |
取值為從1到12之間的任意整數 |
星期 |
取值為從0到7之間的任意整數,0或7代表星期日 |
命令 |
要執行的命令或程式指令碼 |
2.時間數值的特殊表示方法
*表示該範圍內的任意時間
,表示間隔的多個不連續時間點
-表示一個連續的時間範圍
/指定間隔的時間頻率
3.應用示例
0 17 * * 1-5 週一到週五每天17:00
30 8 * * 1,3,5 每週一、三、五的8點30分
0 8-18/2 * * * 8點到18點之間每2小時
0 * */3 * * 每3天
4.使用 crontab 命令管理使用者的計劃任務
設定使用者的週期性計劃任務列表主要通過 crontab 命令進行,結合不同的選項可以完成不同的計劃任務管理操作。常用的選項如下。
Ø-e:編輯計劃任務列表。
Ø-u:指定所管理的計劃任務屬於哪個使用者,預設是針對當前使用者(自己),一般只有 root 使用者有許可權使用此選項(用於編輯、刪除其他使用者的計劃任務)。
Ø-l:列表顯示計劃任務。
Ø-r:刪除計劃任務列表。
下面將分別講解 crontab 命令相關選項的使用。
crontab -u 使用者名稱 #指定XX使用者的cron服務
crontab -l #列出當前使用者下的cron的詳細內容
crontab -u zx -l #列出zx使用者下的cron的詳細內容
crontab -r #刪除所有使用者的cron內容,普通使用者執行,只刪除自己的cron內容
crontab -r -u zx #刪除zx使用者的cron內容
crontab -e #編輯cron服務
五.總結
1.檢視系統程序的常用命令
ps -aux elf top pgrep pstree
2.啟動程序
前臺啟動 輸入指令 直接執行程式
後臺啟動 在命令後 加入 & 符號
3.排程程序
Ctrl+Z組合鍵
將當前程序掛起,即調入後臺並停止執行
jobs命令
檢視處於後臺的任務列表
fg命令
將後臺程序恢復到前臺執行,可指定任務序號
4.終止程序
Ctrl+C組合鍵
kill、killall命令
kill用於終止指定PID號的程序
killall用於終止指定名稱的所有程序
-9選項用於強制終止
5.計劃任務
一次性計劃任務 at atq 檢視 atrm 刪除
crontab計劃任務的配置欄位