程序與計劃任務

2023-11-07 09:02:10

程式

程式:是一組計算機能識別和執行的指令,執行於電子計算機上,滿足人們某種需求的資訊化工具用於描述程序要完成的功能,是控制程序執行的指令集

程序

介紹

執行中的程式的一個副本,是被載入記憶體的一個指令集合,是資源分配的單位,

程序ID(Process ID,PID)號碼被用來標記各個程序

UID、GID語境決定對檔案系統的存取和存取許可權

通常從執行程序的使用者來繼承

存在生命週期

都由其父程序建立

程序是程式的副本

全生命週期 (誕生--->死去)程序的產生,執行,消失 (殭屍程序)(Zombie process)

 

執行中的程式的一個副本,是被載入記憶體的一個指令集合,是資源分配的單位,

  • 程序ID(Process ID,PID)號碼被用來標記各個程序

  • UID、GID語境決定對檔案系統的存取和存取許可權

  • 通常從執行程序的使用者來繼承

  • 存在生命週期

  • 都由其父程序建立

程序建立

init:第一個程序,從 CentOS7 以後為systemd

程序:都由其父程序建立,fork(),父子關係,CoW:Copy On Write 寫實更新,有資料寫入子程序需要新的記憶體空間

程序具有的特性

動態性:程序是程式的一次執行過程,是臨時的,有生命期的,是動態產生,動態消亡的

並行性:任何程序都可以同其他程序一起並行執行;

獨立性:程序是系統進行資源分配和排程的一個獨立單位

結構性:程序由程式、資料和過程控制塊三部分組成。

 

例題  :怎麼確定一個程式是多執行緒還是單執行緒

 #查nginx的程序數

 #用prtstat這個命令來查nginx的執行緒 ,顯示執行緒是1

另一種方法

 

 

 

 程序的基本狀態

建立狀態:程序在建立時需要申請一個空白PCB(process control block過程控制塊),向其中填寫控制和管理程序的資訊,完成資源分配。如果建立工作無法完成,比如資源無法滿足,就無法被排程執行,把此時程序所處狀態稱為建立狀態

就緒狀態:程序已準備好,已分配到所需資源,只要分配到CPU就能夠立即執行

執行狀態:程序處於就緒狀態被排程後,程序進入執行狀態

阻塞狀態:正在執行的程序由於某些事件(I/O請求,申請快取區失敗)而暫時無法執行,程序受到阻塞。在滿足請求時進入就緒狀態等待系統呼叫

終止狀態:程序結束,或出現錯誤,或被系統終止,進入終止狀態。無法再執行

 

 程序更多的狀態

執行態:running

就緒態:ready

睡眠態:分為兩種,可中斷:interruptable,不可中斷:uninterruptable

停止態:stopped,暫停於記憶體,但不會被排程,除非手動啟動

僵死態:zombie,殭屍態,結束程序,父程序結束前,子程序不關閉,殺死父程序可以關閉僵死態 的子程序

 

訊號

 #使用kill -l 來檢視訊號的型別

程序優先順序

程序優先順序 系統優先順序 使用者優先順序

PRI(優先順序) NI(手動可調的優先順序) -20 ~ 19

 

調優先順序 renice -n (數位) PID號

 

ps

檢視靜態的程序統計資訊 process state

a #顯示當前終端下的所有程序資訊,包括其他使用者的程序。與「x」選項結合時將示系統中所有的程序資訊
-a #顯示所有終端機下執行的程式,除了階段作業領導者之外
u #使用以使用者為主的格式輸出程序資訊
x #顯示當前使用者在所有終端下的程序資訊
-e #顯示系統內的所有程序資訊
-l #使用長(Long)格式顯示程序資訊
-f #使用完整的(Full)格式顯示程序信
k|--sort 屬性 對屬性排序,屬性前加 - 表示倒序 ps aux k -%cpu
o #屬性… 選項顯示客製化的資訊 pid、cmd、%cpu、%mem
au #
aux #檢視系統中所有的程序
ps axo pid,usr|head
-elf|head
pstree -p#檢視PID號

chattr +i a #加上i的許可權 不允許刪除
chattr -i a #減去i的許可權 允許刪除

ps aux |grep Z #過濾殭屍程序
ps aux |grep -v grep|grep Z #過濾殭屍程序

 user:使用者

PID:pid號

%cpu:使用的cpu佔用的百分率

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

VSZ:虛擬記憶體

RSS:真實記憶體

TTY:終端

STAT:狀態

START:執行開始時間

TIME:分片時間 (統計一共佔用了多少時間)

COMMAND:程序的名字

 #檢視pid號

實驗 建立個檔案 a 給i的許可權

 

 

top   (Linux工作管理員)

動態的程序資訊  (看記憶體 cpu 使用率 ,q退出

預設3秒重新整理一次

命令

-d 秒數:#指定 top 命令每隔幾秒更新。預設是 3 秒;
-b:#使用批次處理模式輸出。一般和"-n"選項合用,用於把 top 命令重定向到檔案中;
-n 次數:#指定 top 命令執行的次數。一般和"-"選項合用;
-p 程序PID:#僅檢視指定 ID 的程序;
-s:#使 top 命令在安全模式中執行,避免在互動模式中出現錯誤;
-u 使用者名稱:#只監聽某個使用者的程序;
- ? 或 h:#顯示互動模式的幫助;
- c:#按照 CPU 的使用率排序,預設就是此選項;
- M:#按照記憶體的使用率排序;
- N:#按照 PID 排序;
- T:#按照 CPU 的累積運算時間排序,也就是按照 TIME+ 項排序;
- k:#按照 PID 給予某個程序一個訊號。一般用於中止某個程序,訊號 9 是強制中止的訊號;
- r:#按照 PID 給某個程序重設優先順序(Nice)值;
- q:#退出 top 命令;

 

Tasks: 157 total系統中的程序總數
內 容 說 明
1 running 正在執行的程序數
149 sleeping 睡眠的程序數
7 stopped 正在停止的程序數
0 zombie 殭屍程序數。如果不是 0,則需要手工檢查殭屍程序

 

 

內 容說 明
Cpu(s): 0.0 %us 使用者模式佔用的 CPU 百分比 個人使用者開啟的程序佔用的 cpu 率
0.2%sy 系統模式佔用的 CPU 百分比
0.0%ni 改變過優先順序的使用者程序佔用的 CPU 百分比
99.8%id 空閒 CPU 佔用的 CPU 百分比
0.0%wa 等待輸入/輸出的程序佔用的 CPU 百分比 1
0.0%hi 硬中斷請求服務佔用的 CPU 百分比
0.0%si 軟中斷請求服務佔用的 CPU 百分比
0.0%st st(steal time)意為虛擬程式佔用 cpu 時間百分比,就是當有虛擬機器器時,虛擬 CPU 等待實際 CPU 的時間百分比

 

 

KiB Mem 記憶體
1867048 total 總記憶體
591836 free 剩餘記憶體
440024 used 用掉記憶體
835188 buff/cache 快取

 

(增強版的top  )htop

 

pgrep (檢視指定的程序)

命令

-U #指定使用者
-l: #顯示程序名
-a: #顯示完整格式的程序名
-P pid #顯示指定程序的子程序

 

pidof

只知程式名不知pid號

pidof nginx #檢視 niginx程序的pid號

 

pstree (以樹形結構列出程序資訊)

-p #按時程序數 ,並顯示程序號
-a #顯示啟動每個程序對應的完整指令,包括啟動程序的路徑、引數等
-u #顯示使用者切換
-H #pid 高亮顯示指定程序及其前輩程序

 

 

五大效能

記憶體 :free top

cpu :top ps aux

磁碟 

大小:lsblk 剩餘df

讀寫 :dd iostat vmstat

網路 :dstat iftop

 

 LSOF (列出已經開啟的檔案)

-c 字串 #只列出以字串開頭的程序開啟的檔案
+d 目錄名 #列出某個目錄中所有被程序呼叫的檔案
-u 使用者名稱 #只列出某個使用者的程序開啟的檔案
-p pid #列出某個PID程序開啟的檔案

實驗  當別人在使用時,誤刪了檔案如何找回

 #先複製個/etc/passwd  到/date下取名test

 #這個比如是別人正在使用

 #你刪除這個檔案

 #過濾出這個檔案

 #去 /proc下的6597

 #去往fd下

 #裡面的都是軟連線

 #通過軟連結4 的/date/.test.swp  中去找

 #從記憶體裡撈資料

 

vmstat (效能監控)

 

欄位含義
procs 程序資訊欄位: -r:等待執行的程序數,數量越大,系統越繁忙。 -b:不可被喚醒的程序數量,數量越大,系統越繁忙。
memory 記憶體資訊欄位: -swpd:虛擬記憶體的使用情況,單位為 KB。 -free:空閒的記憶體容量,單位為 KB。-buff:緩衝的記憶體容量,單位為 KB。-cache:快取的記憶體容量,單位為 KB。
swap 交換分割區資訊欄位: -si:從磁碟中交換到記憶體中資料的數量,單位為 KB。 -so:從記憶體中交換到磁碟中資料的數量,單位為 KB。這兩個數越大,表明資料需要經常在磁碟和記憶體之間進行交換,系統效能越差。
io 磁碟讀/寫資訊欄位: -bi:從塊裝置中讀入的資料的總量,單位是塊。 -bo:寫到塊裝置的資料的總量,單位是塊。這兩個數越大,代表系統的 I/O 越繁忙。
system 系統資訊欄位: -in:每秒被中斷的程序次數。 -cs:每秒進行的事件切換次數。這兩個數越大,代表系統與介面裝置的通訊越繁忙。
cpu CPU資訊欄位: -us:非核心程序消耗 CPU 運算時間的百分比。 -sy:核心程序消耗 CPU 運算時間的百分比。 -id:空閒 CPU 的百分比。 -wa:等待 I/O 所消耗的 CPU 百分比。 -st:被虛擬機器器所盜用的 CPU 百分比

 

命令

選項 含義
-fs  -f:顯示從啟動到目前為止,系統複製(fork)的程式數,此資訊是從 /proc/stat 中的 processes 欄位中取得的。 -s:將從啟動到目前為止,由一些事件導致的記憶體變化情況列表說明。
-S 令輸出的資料顯示單位,例如用 K/M 取代 bytes 的容量。
-d 列出硬碟有關讀寫總量的統計表
-p 檢視硬碟分割區的讀寫情況  (分割區,裝置,檔名)

 

free  (檢視記憶體)

free -h

 

 #echo 3 > /proc/sys/vm/drop_caches  (清快取)

iostat (檢視磁碟的讀寫效能)

iostat 1 -d/dev/sda 只檢視sda磁碟 (每一秒重新整理一次)

 

iftop  (監視流量)

系統不自帶,得安裝 (epel)

 #安裝外源

 #安裝 iftop

 

dstat

 #安裝外源

 #安裝dstat

 

webadin

 #下載安裝包

 #安裝webmin-2.100-1.noarch.rpm 

 #檢視有無安裝上

 #開啟webmin

 #檢視webmin目前服務的狀態

 #關閉防火牆和安全機制

 #開啟瀏覽器搜尋你的IP地址後面加上:10000

 #你的使用者名稱和密碼

 

 

 #改中文

 

 #以改變中文

 

程序啟動方式

+& 將前臺任務放在後臺執行

例如:dd if =/dev/zero of=/dev/null &

jobs:檢視後臺執行的命令

fg 1 :把後臺命令調回前臺

在調回後臺 ctrl +z 掉入後臺 並停止

bg 1 :繼續後臺命令 bg序號

 

 #放到後臺執行

 #fg 1調回前面,ctrl +z  停止

 #想讓已停止的它啟動  bg 1

 #檢視是否再執行

 

計劃任務書

at  (一次性計劃任務書)

at 工具

  1. 由包 at 提供

  2. 依賴與atd服務,需要啟動才能實現at任務

  3. at佇列存放在/var/spool/at目錄中,ubuntu存放在/var/spool/cron/atjobs目錄下

  4. 執行任務時PATH變數的值和當前定義任務的使用者身份一致

用法+格式

格式用法
HH:MM 比如 04:00 AM。如果時間已過,則它會在第二天的同一時間執行。
Midnight(midnight) 代表 12:00 AM(也就是 00:00)。
Noon(noon) 代表 12:00 PM(相當於 12:00)。
Teatime(teatime)下午茶 代表 4:00 PM(相當於 16:00)。
英文月名 日期 年份 比如 January 15 2018 表示 2018 年 1 月 15 號,年份可有可無。
MMDDYY、MM/DD/YY、MM.DD.YY 比如 011518 表示 2018 年 1 月 15 號。
now+時間 以 minutes、hours、days 或 weeks 為單位,例如 now+5 days 表示命令在 5 天之後的此時此刻執行。

 

實驗  在1點中,在opt下建立個銘文ky33的檔案

 

crontab  (週期性計劃任務書)

命令

-e #編輯一個定時任務
* * * * *(分 ,時,日,月,周)(分:0-59,時(0-23),日(1-31),月(1-12),周(0-6)(0和7代表星期天)
-u #指定使用者
-l #目前有哪些計劃任務
-r #刪除計劃任務

格式

分時日月周 + 命令(寫絕對路徑

 #在這些路徑下可以不用絕對路徑

符號 代表
* 代表任何時間。比如第一個"*"就代表一小時種每分鐘都執行一次的意思
代表不連續的時間。比如"0 8,12,16***命令"就代表在每天的 8 點 0 分、12 點 0 分、16 點 0 分都執行一次命令。
- 代表連續的時間範圍。比如"0 5 ** 1-6命令",代表在週一到週六的凌晨 5 點 0 分執行命令。
/ 代表每隔多久執行一次。比如"*/10****命令",代表每隔 10 分鐘就執行一次命令。

 

應用範例

0 17 * * 1-5 #週一到週五每天17:00
30 8 * * 1,3,5 #每週一、三、五的8點30分
0 8-18/2 * * * #每天的8點到18點之間每2小時
0 * */3 * * #每3天

 

實驗

 #編輯定時任務

 #每2分鐘複製 /etc/passwd 到/opt下取名soft

 #檢視目前有哪些計劃任務書