一、程序管理
(一)程式與程序
程式:指令+參數的集合通過邏輯控制運作起來,完成某項特定任務。(類似Java)靜态的,封閉的。
程序:程式運作起來的過程。是作業系統運作的基本機關。有生命周期(産生---->死亡)程序有運作狀态(running,sleepping,等待,僵死)
Linux多任務作業系統能夠讓許多程式同時運作,每一個運作着的程式就是一個程序
1.程序與程式差別:
程式是靜态的,程序是動态的有生命周期的,有狀态
程式和程序不是一一對應。相同的程式運作到不同的數量集上就是不同的程序/usr/bin/vim(程式) -----vim test1 ,vim test2
程式是封閉的,程序有并發性和交往性。程序之間可以通信,(|);方式:(1)共享記憶體,(2)消息隊列
2.程序與線程
在linux系統上,對于程序或線程都将擁有一套完整的資源集。(記憶體---->虛拟記憶體,CPU------>時間片)。
自學:協程;對比一下程序,線程協程
差別:一個程序可以擁有多個線程,而一個線程同時隻能被一個程序所擁有。
線程不能單獨執行,但是每一個線程都有程式的入口、執行序列以及程式出口,它必須組成程序才能被執行。
3.子程序與父程序:fork
子程序繼承父程序的特性:安全性的身份認證;過去和目前的檔案描述符,端口等資源特權;環境變量;程式代碼。
子程序的id号永遠大于父程序,檢視pid号:用pgrep指令 # pgrep httpd
每個程序都可以産生子程序,
父程序 ----sleep---------------------running-------->
| |
fork()-----exec()----------exit() ---->zombie
關系:①父程序終止,子程序也就終止。
②.子程序運作期間,父程序處于(sleeping)睡眠狀态;當子程序完成時發出信号請求,在退出時,子程序已經關閉或丢棄其資源環境,剩下的部分稱之為(zombie)僵屍。子程序退出父程序喚醒,繼續執行自己的代碼。加粗樣式
(二).程序的生命周期
sleep:
S:可中斷睡眠,條件:硬體要求,系統資源通路,信号。比如:鍵盤輸入。
D: 不可中斷睡眠, 比如:系統程序(不可中斷),如中斷可能會引起系統的異常 -->使用者程序
K:可退出的睡眠,
running:在CPU上運作的程序或者是準備運作的程序(隊列(高速緩存));
user的日常任務,kernel的日常任務
運作:---->程序占用cpu時間片
等待:---->等待某個條件成熟
就緒:---->配置設定好所有資源,等待cpu時間片
stop:
zombie:
Z: —>exit----task_struct(PID,傳回狀态碼,父程序需要狀态)
X: —>exit----将沒有資料
(三).linux系統的程序優先級
“程序的優先級” 0-139 — 140數
實時優先級:0<------------------------------99
: 100-139
nice : -20-19
RP: 0-39 RT
“nice值” -20-19 作用是調整程序優先級,(不能調kernel,調整user)
“top–PR” 0-39
top —>“r” —>“PID” —“nice值”
renice -n 10 -u apache
(四).程序管理工具(pstree ps pgrep pkill uptime top htop vmstar lsof)
1、pstree 檢視程序樹之間的關系
[[email protected] ~]# yum provides pstree //檢視安裝包
[[email protected] ~]# yum install psmisc //下載下傳ps安裝包
-A:用途,當終端不支援UTF-8(中文),顯示亂碼,此時用該參數。(線)
-U:UTF-8預設線的樣式(線)
-p:列出pid 子程序的号大于夫程序号
-u:列出賬号名稱
2、ps 檢視瞬間程序狀态
(最常用監控背景程序工作的情況)能列出系統中運作的程序,包括程序号、指令、CPU使用量、記憶體使用量等
注意:ps顯示瞬間程序狀态,并不動态連續。對程序實時監控應該用top指令
-a :顯示終端機下的程序,包括其他使用者/列出所有運作中/激活程序
-u :以使用者為 主的程序狀态/uid or username 選擇有效的使用者id或者是使用者名
-x : 除了TTY控制的其他程序/顯示沒有控制終端的程序,同時顯示各個指令的具體路徑。dx不可合用。(utility)
-l :列出較詳細的資訊
-f: 列印完整輸出
-aux:目前以使用者為主的所有程序狀态
USER: 運作程序的使用者
PID: 程序ID
%CPU: CPU占用率
%MEM: 記憶體占用率
VSZ: 占用虛拟記憶體
RSS:占用實際記憶體 駐留記憶體
TTY: 程序運作的終端
STAT: 程序狀态 man ps (/STATE) R 運作 S 可中斷睡眠 Sleep
D 不可中斷睡眠
T 停止的程序
Z 僵屍程序
X 死掉的程序
Ss s程序的上司者,父程序
S< <優先級較高的程序
SN N優先級較低的程序
R+ +表示是前台的程序組
Sl 以線程的方式運作
START: 程序的啟動時間
TIME: 程序占用CPU的總時間
COMMAND: 程序檔案,程序名
ps -ef |grep - 列出需要程序
F :代表這個程式的旗幟(flag)
S:代表使用者 superuser
UID :代表執行者身份
PID :程序id号
PPID:父程序号
C :cpu使用的資源百分比
PRI :程序的執行優先級 (priorite)值越小越早被執行
NI :程序的nice值表示程序可被執行的優先級的修正數值
ADDR:核心函數
SZ :使用掉的記憶體大小 WCHAN:目前這個程式是否正在運作 運作-
TTY :登入者的終端位置
TIME :使用掉的cpu時間
CMD:所下達的指令名稱
3、pgrep 檢視pid與程序名的對應
o:當比對多個程序時,顯示程序号最小的那個
n:當比對多個程序時,顯示程序号最大的那個
l:同時顯示程序名和pid
kill
pgrep -o httpd
4、killall ,kill ,pkill 殺死指定名字的程序
-----------通過發送信号的方式,對程序行為做控制
killall httpd 直接加程序名
kill PID 加父程序号
pkill httpd 直接加程序名
kill指令
0 ---->嗅探程序是否存在,不對其做任何操作
1 ---->斷開終端
2 ---->中斷,ctrl + c
3 ---->退出,ctrl
15 —>預設,終止
9 —>強制終止,
18 —>繼續
19 —>暫停
eg:kill -18 程序
5、top動态的列印系統資訊:
[[email protected] ~]# top
PID:程序ID
user:運作程序的使用者
PR:程序優先級 NI:nice值,負數表示優先級最高
VIRT:程序使用虛拟記憶體總量 REX:程序占用的實體記憶體總量
SHR:程序占用的共享記憶體大小 S:程序狀态: R:runing S:sleeping休眠 T:stop Z:zombie D:不可中斷
%CPU:從上次重新整理到目前使用的cpu時間占比
%MEM:程序使用的實體記憶體百分比
TIME+:程序使用cpu的時間 機關1%秒
COMMAND:程序名稱
6、htop top更新版
-aux注意:htop是第三方源 安裝時先要安裝epel*源,在安裝htop .
根據此連結安裝epel 源(選一種安裝即可)
https://developer.aliyun.com/mirror/epelspm=a2c6h.13651102.0.0.3e221b11lbqnQo
安裝
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum install htop
上左區域:men:實體記憶體
上右區域:tasks:任務數量 uptime:運作時間
程序區域:同top顯示的一樣
7、vmstat:
8、sar
[[email protected] ~]# yum install sysstat -y9、tsar --sar:
淘寶開源,以周期計劃任務的方式執行
10、lsof
管理檔案
(五)僞檔案系統
/proc:程序資訊,記憶體資訊,磁盤資訊
/sys:裝置組織
(六)前背景作業
1、什麼是作業:使用者交給系統的某項任務
“前台作業同一時刻隻能運作一個,背景作業同時可以運作多個”
前–》後:“指令 &”:運作
“Ctrl +z” :停止 —》bg &序列 ----》運作
後–》前:fg %序列
對于做支援信号:
0 ---->嗅探程序是否存在,不對其做任何操作 echo $? —>0
1 ---->斷開終端
2 ---->中斷,ctrl + c
3 ---->退出,ctrl +
15 —>預設,終止
9 —>強制終止,
18 —>繼續
19 —>暫停
kill -19 %序列
作業可以放到背景運作,任然可以将輸出列印在終端上。
作業是正對于終端而言,在哪個終端上啟動的作業,在哪個終端上jobs。
2、 屏蔽中斷信号
對于終端上的作業,有内容輸出時,當終端斷開後,該作業程序将會接收到中斷信号;導緻程序被殺死。
nohup屏蔽中斷信号。
nohup ping www.baidu.com > /dev/null &
nohup ping www.baidu.com >> /tmp/nohup_ping.log &