首先我們了解一下程式和程序的關系:
程式:
儲存在 、CD光牒等媒體中的可執行代碼和資料靜态儲存的代碼
程序:
在CPU及記憶體中運作的程式代碼動态執行的代碼
一、檢視程序
1、檢視靜态的程序統計資訊(ps)
ps指令(檢視靜态的程序統計資訊Processes Statistic)
是Linux系統中最為常用的程序檢視工具,主要用于顯示包含目前運作的各程序完整資訊的靜态快照,通過不同的指令選項,可以有選擇性的檢視程序資訊
ps -aux(将以簡單清單形式顯示出程序資訊):
a:顯示目前終端下所有程序資訊,包含其他使用者程序。與“x”選項結合時顯示系統中所有程序資訊
u:使用以使用者為主的格式輸出程序資訊
x:顯示目前使用者在所有終端下的程序資訊
-e:顯示系統内的所有程序資訊
-l:使用長格式顯示程序資訊
-f:使用完整的格式顯示程序資訊
複制
[root@localhost 桌面]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.3 0.1 19360 1544 ? Ss 16:29 0:02 /sbin/init
root 2 0.0 0.0 0 0 ? S 16:29 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 16:29 0:00 [migration/0]
root 4 0.0 0.0 0 0 ? S 16:29 0:00 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S 16:29 0:00 [migration/0]
複制
下面來解釋一下各字段含義
1、USER:使用者
2、PID:程序号(ls -l | grep init可以看到init的軟連結,1程序為init)
3、%CPU:程序的cpu占用率
4、%MEM:程序的記憶體占用率
5、VSZ:虛拟記憶體占用
6、RSS:實體記憶體占用
7、TTY:終端(?代表未知,大多為本地)
8、STAT:目前程序狀态,其中
“S”:可中斷休眠程序
“D”:不可中斷休眠程序
“s”:父程序
“<”:代表優先級高
“N”:代表優先級低
“R”:代表正在運作的程序
“I”:多線性程序
“Z”:僵屍程序
“+”:前台程序
9、START:啟動時間
10、TIME:程序占用cpu的總時間
11、COMMAND:程序的名稱
複制
ps -elf(将以長格式顯示系統中的程序資訊):
[root@localhost 桌面]# ps -elf
F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
4 S root 1 0 0 80 0 - 4840 poll_s 16:29 ? 00:00:02 /sbin/init
1 S root 2 0 0 80 0 - 0 kthrea 16:29 ? 00:00:00 [kthreadd]
1 S root 3 2 0 -40 - - 0 migrat 16:29 ? 00:00:00 [migration/0]
1 S root 4 2 0 80 0 - 0 ksofti 16:29 ? 00:00:00 [ksoftirqd/0]
1 S root 5 2 0 -40 - - 0 cpu_st 16:29 ? 00:00:00 [migration/0]
5 S root 6 2 0 -40 - - 0 watchd 16:29 ? 00:00:00 [watchdog/0]
1 S root 7 2 0 -40 - - 0 migrat 16:29 ? 00:00:00 [migration/1]
1 S root 8 2 0 -40 - - 0 cpu_st 16:29 ? 00:00:00 [migration/1]
1 S root 9 2 0 80 0 - 0 ksofti 16:29 ? 00:00:00 [ksoftirqd/1]
5 S root 10 2 0 -40 - - 0 watchd 16:29 ? 00:00:00 [watchdog/1]
1 S root 11 2 0 80 0 - 0 worker 16:29 ? 00:00:01 [events/0]
1 S root 12 2 0 80 0 - 0 worker 16:29 ? 00:00:00 [events/1]
1 S root 13 2 0 80 0 - 0 worker 16:29 ? 00:00:00 [cgroup]
1 S root 14 2 0 80 0 - 0 worker 16:29 ? 00:00:00 [khelper]
複制
了解一下各字段含義
1、PPID:目前程序的父程序
2、PIR:使用者态(人可以進行互動額)優先級
3、NI:核心态優先級(-20~19,數值越低優先級越高)
4、ADDR:-代表正在運作
5、SZ:占用swap交換分區的容量
6、WCHAN:目前程序核心态的名稱
7、CMD:指令名稱
複制
2、檢視靜态的程序統計資訊(top)
使用ps指令檢視到的是一個靜态的程序資訊,并不能連續的回報出目前程序的運作狀态,若希望以動态重新整理的方式顯示各程序的狀态資訊,可以使用top指令,該指令将會在目前終端全屏互動式的界面顯示程序排名,及時跟蹤包括CUP、記憶體等系統資源占用情況,預設情況下每隔3秒重新整理一次,其作用類似于windows系統中的“任務管理器”。
Linux系統中檢視程序和計劃任務管理
表中的資訊表述含義如下:
1、total:總程序數
2、running:正在運作的程序數
3、sleeping:休眠的程序數、
4、stopped:中止的程序數
5、zombie:僵死無響應的程序數
6、%Cpu(s):CPU占用資訊,其中:
“us”:使用者占用
“sy”:核心占用
“ni”:核心排程優先級
“id”:空閑空間占用
“wa”:IO讀寫占用
“hi”:硬線程占用
“si”:軟線程占用
“st”:虛拟化占用
7、Men:記憶體占用資訊,其中:
“total”:總記憶體空間
“free”:空閑記憶體
“used”:已用記憶體
“buff/cahce”:緩存占用
8、Swap:交換空間占用,其中:
“total”:總交換空間
“free”:空閑交換空間
“used”:已用交換空間
“avail men”:實體占用
複制
3、pgrep指令(查詢程序資訊)
當使用ps指令查詢某個程序新的PID資訊時,往往需要配合grep指令對輸出結果進行過濾,但這樣使用非常不友善,而pgrep指令則正是用來查詢特定程序資訊的專用工具,使用pgrep指令可以根據程序的名稱、運作該程序的使用者、進城所在的終端等多種屬性查詢特定程序的PID号。
-l:既顯示PID也顯示程序名
-U:檢視指定使用者的程序,此處例如zhangsan
複制
4、pstree指令(檢視程序樹)
pstree指令可以輸出Linux系統中各程序的樹形結構,更加直覺的判斷出各程序之間的互相關系(父、子程序)。
常用選項:
-p:同時列出相對應的PID号
-u:列出相對應的使用者名
-a:列出完整的指令資訊
複制
二、控制程序
1、程序的啟動方式
(1)手工啟動
前台啟動:使用者輸入指令,直接執行程式
背景啟動:在指令行尾加入按&符号
[root@localhost~]#cp /dev/cdrom mycd/iso &
複制
(2)排程啟動
使用at指令,是指一次性計劃任務
使用crontab指令,設定周期性計劃任務
(3)程序的前背景排程
1、Ctrl+Z組合鍵:
當Linux系統中的指令正在前台執行時,按Ctrl+Z組合鍵可以将目前程序挂起(調入背景并停止執行),這種操作在需要暫停目前程序并進行其他操作時特别有用。
2、jobs指令:
需要檢視目前終端中在背景運作的程序任務時,可以使用jobs指令,結合“-l”選項可以同時顯示處該程序對應的PID号,在jobs指令的輸出結果中,每一行記錄對應一個背景程序的狀态資訊,首行的數字表示該程序在背景的任務編号。
3、fg指令:
将背景程序恢複到前台運作,可指定任務序号,示例如下:
[root@localhost~]#jobs
[1]- Stopped cp/dev/cdrom mycd.iso
[2]+ Stopped top
[root@localhost~]#fg 1
複制
(3)終止程序的運作
1、Ctrl+C組合鍵
中斷正在執行的指令
2、kill、killall指令(跟号碼,具有唯一性)
常用選項:
kill:用于終止指定PID号的程序
killall:用于終止指定名稱的所有程序
-9:選項用于強制終止
複制
pkill指令
1.根據特定條件終止相應的程序
2.常用選項:
-U:根據程序所屬的使用者名終止相應程序
-t:根據程序所在的終端終止相應程序
複制
如果此時我們想把張三使用者踢出,使用Xshell界面登入的root賬戶下輸入:pkill -9 -U zhangsan,敲回車,此時系統會自動跳回開機之後的使用者登入界面,zhangsan使用者的所有程序全部被終止
三、at一次性任務設定
格式:at [HH:MM] [yyyy-mm-dd]
具體執行操作如下:
1、[root@localhost~]#date(擷取系統的目前時間)
2、2019年 08月 24日 星期六 16:08:24 CST
3、[root@localhost~]#at 16:12 2019-08-24(計劃性時間要在系統目前時間之後)
4、at>ps aux | wc -l > /opt/ps.txt(确定執行的動作)
5、ctrl+d(送出)
6、atq(檢視計劃任務)
7、atm2删除第二條任務計劃
Linux系統中檢視程序和計劃任務管理
到了計劃時間之後輸入:ls /opt/檢視目錄
此時顯示計劃的檔案ps.txt被寫入
Linux系統中檢視程序和計劃任務管理
複制
四、 crontab周期性任務設定
crontab(定時任務)
使用crontab指令設定的計劃任務可以按預設的周期重複執行,可以大大減輕重複性系統管理任務的操作
軟體包cronie 提供crontab工具,系統服務crond和配置檔案 /etc/crontab。
開啟系統服務crond 是啟動周期性任務的前提條件
1、crontab的配置檔案和目錄
crond通過多個目錄和檔案設定計劃任務,不同類型的任務由不同的配置檔案來配置
(1) /etc/crontab 全局配置檔案
全局配置檔案
/etc/crontab 檔案中設定的是維護Linux系統所需的任務
Linux系統及相關程式在安裝時自動設定
不建議使用者手動修改此檔案
[root@localhost ~]# cat /etc/crontab '//檢視系統任務配置檔案'
SHELL=/bin/bash '//設定執行計劃任務的Shell環境'
PATH=/sbin:/bin:/usr/sbin:/usr/bin '//定義可執行指令及程式的路徑'
MAILTO=root '//将任務輸出資訊發送到指定使用者的郵箱'
HOME=/ '//執行計劃任務時使用的主目錄'
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59) '//分鐘範圍:0-59'
# | .------------- hour (0 - 23) '//小時範圍:0-23'
# | | .---------- day of month (1 - 31) '//一個月的天數範圍:1-31'
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ... '//月數範圍:1-12'
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat '//一周的天數範圍: 0-6(周日用0或者7表示)'
# | | | | |
# * * * * * user-name command to be executed
複制
2、/etc/cron.*/ 系統預設設定
系統預設設定cron任務的配置檔案存放目錄
軟體包crontabs安裝後,會在/etc/cron.*/目錄下生成存放一些系統預設設定的計劃任務目錄,設定了系統每個小時,每一天做些什麼任務
例如:
/etc/cron.hourly/ 目錄下存放的是系統每小時要做的任務可執行腳本
/etc/cron.daily/ 目錄下存放的是系統每天要做的任務可執行腳本
/etc/cron.weekly/ 目錄下存放的是系統每周要做的任務可執行腳本
/etc/cron.monthly/ 目錄下存放的是系統每月要做的任務可執行腳本
這些是可執行腳本,不是cron配置檔案,crond服務通過run-parts 工具調用執行這些腳本
3、/var/spool/cron/使用者名 使用者定義的位置
使用者自行設定的cron計劃任務将被儲存到目錄/var/spool/cron/中
使用者使用crontab指令建立計劃任務,就會在/var/spool/cron/目錄下生産一個與使用者名相同的檔案
例如:root使用者的cron計劃任務儲存在配置檔案/var/spool/cron/root中
crond守護程序會自動檢查上述三個檔案,若有配置更改,就會載入記憶體,不需重新開機crond守護程序就可以使設定生效
[root@localhost ~]# ls -l /var/spool/cron/*
ls: 無法通路/var/spool/cron/*: 沒有那個檔案或目錄 '//沒有建立任務'
複制
2、使用crontab指令管理使用者的計劃任務
常用選項
crontab -e [-u 使用者名] '//編輯計劃任務 e:edit,編輯,使用方式同Vim編輯器。'
crontab -l [-u 使用者名] '//檢視計劃任務 l:list,清單'
crontab -r [-u 使用者名] '//删除計劃任務 r:remove,移除'
crontab -l '//檢視目前使用者的計劃清單'
crontab -l -u lisi '//檢視lisi使用者的計劃任務'
crontab -e '//可以操作删除一條計劃任務'
crontab -r '//删除使用者所有的計劃任務'
複制
指令格式: 時間周期設定 + 任務内容設定
時間數值的特殊表示方法
* 表示該範圍内的任意時間
, 表示間隔的多個不連續的時間點
- 表示一個連續的時間範圍
/ 指定間隔的時間頻率
例如:
0 17 * * 1-5 '//表示周一到周五每天17:00'
30 8 * * 1,3,5 '// 表示每周一,三,五的8點30分'
0 8-18/2 * * * '// 表示8點到18點之間每2小時'
0 * */3 * * '//表示每3天'
複制
分鐘字段應該填寫一個具體的時間數值,不可是“*”,否則将會每一分鐘都執行一次任務
執行個體
如:每天15:30将/home/中zhangsan目錄複制到/opt/中
[root@localhost ~]# crontab -e '//編輯計劃任務'
進入編輯清單開始編輯,操作類似vim 編輯器
30 15 * * * /usr/bin/cp -r /home/zhangsan /opt/ '//在其中編輯好任務,wq儲存退出'
複制