進程和計劃任務

進程和計劃任務

一、 進程

程序:是在磁盤上的一個文件,只要不去運行它就是一個靜態文件,不占用內存空間;

進程:process是一個動態的概念,只有當用戶將程序運行起來時才會有進程,當進程執行完畢時,就會從內存中刪除。

線程:thread?? pstree –p 命令顯示中{}中的即為線程。

一個進程會對應一個程序,而一個程序可能會對應多個進程。

一個進程里至少有一個線程。

?

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

除了PID還有一些額外信息,例如:UID(誰運行了這個程序)、GID(運行者所屬主組)、和SELinux語境決定對文件系統的存取和訪問權限

task struct(任務結構):存放了進程的必要信息;(PID,UID,GID,SELinux)每個進程都有一個struct。

task list:多個任務的的task struct組成的鏈表

系統中的第一個進程 :init(Centos6)

system(Centos7)

fork(生成子進程), clone(生成子進程以及兄弟進程)都可以用來生成下一級的子進程。

在生成進程時為了優化空間一般來說都會采用CoW(Copy on Write 寫時復制)機制;

 

進程的狀態:創建、就緒、阻塞、執行、終止。

QQ截圖20180505094557

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

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

?? 執行狀態:進程處于就緒狀態被調度后,進程進入執行狀態

?? 阻塞狀態:正在執行的進程由于某些事件(I/O請求,申請緩存區失?。┒鴷簳r無法運行,進程受到阻塞。在滿足請求時進入就緒狀態等待系統調用

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

 

進程優先級

系統優先級:數字越小,優先級越高

0-139(CentOS4,5)

各有140個運行隊列過期隊列 (同級的運行隊列中若任務全部完成,則過期隊列轉化為同級的運行隊列)

0-98,99(CentOS6)

實時優先級: 99-0 值最大優先級最高

nice值:-20到19,對應系統優先級100-139或99

QQ截圖20180505100855

Big O:時間復雜度,用時和規模的關系。

 

進程內存

Page Frame: 頁框,用存儲頁面數據,存儲Page 4k

LRU:Least Recently Used 近期最少使用算法,釋放內存 ,存放緩存數據的基本算法。

內存空間:物理地址空間和線性地址空間

MMU:Memory Management Unit(內存處理單元)負責轉換線性和物理地址

TLB:Translation Lookaside Buffer (翻譯后備緩沖器)用于保存虛擬地址和物理地址映射關系的緩存

IPC: Inter Process Communication (進程間通訊)

同一主機: signal:信號

shm: shared memory (共享內存)

semaphore:信號量,一種計數器 ,表示資源是否可用

不同主機:socket: IP和端口號

RPC: remote procedure call (遠程過程調用)

MQ:消息隊列,Kafka,ActiveMQ

進程類型

守護進程(后臺執行): daemon,在系統引導過程中啟動的進程,和終端無關進程

前臺進程(前臺執行):跟終端相關,通過終端啟動的進程,占用終端資源

進程狀態

運行態:running

就緒態:ready

睡眠態:

可中斷:interruptable

不可中斷:uninterruptable

停止態:stopped,暫停于內存,但不會被調度,除非手動啟動

僵死態:zombie,結束進程,父進程結束前,子進程不關閉

R:running

S: interruptable sleeping

D: uninterruptable sleeping

T: stopped

Z: zombie

+: 前臺進程

l: 多線程進程

L:內存分頁并帶鎖

N:低優先級進程

<: 高優先級進程

s: session leader,會話(子進程)發起者

 

進程的分類

CPU-Bound:CPU密集型,非交互

IO-Bound:IO密集型,交互

Linux系統狀態的查看及管理工具:pstree, ps, pidof, pgrep, top, htop, glance, pmap, vmstat, dstat, kill, pkill, job, bg, fg, nohup

pstree?? 顯示進程樹

pstree –p? 顯示詳細的進程樹

ps: process state 顯示進程狀態,基于快照,即當時瞬間狀態,默認顯示當前這一個用戶的前臺進程。(不包括后臺進程以及與終端無關的進程)

Linux系統各進程的相關信息均保存在/proc/PID目錄下的各文件中

ps支持三種選項

UNIX選項 如-A -e

BSD選項 如a

GNU選項 如—help

選項:ps默認顯示當前終端中的進程

ps? a 選項包括所有終端中的進程

x 選項包括不鏈接終端的進程

u 選項顯示進程所有者的信息

f 選項顯示進程樹,相當于 –forest

k|–sort 屬性 對屬性排序,屬性前加- 表示倒序

o 屬性… 選項顯示定制的信息 pid、cmd、%cpu、%mem

L 顯示支持的屬性列表

-C cmdlist 指定命令,多個命令用,分隔

?? -L 顯示線程

?-e: 顯示所有進程,相當于-A

?? -f: 顯示完整格式程序信息

?? -F: 顯示更完整格式的進程信息

?? -H: 以進程層級格式顯示進程相關信息

?? -u userlist 指定有效的用戶ID或名稱

?? -U userlist 指定真正的用戶ID或名稱

?-g gid或groupname 指定有效的gid或組名稱

?? -G gid或groupname 指定真正的gid或組名稱

?-p pid 顯示指pid的進程

?–ppid pid 顯示屬于pid的子進程

?-M 顯示SELinux信息,相當于Z

 

ps xo ni: nice值

???? pri: priority 優先級

???? psr: processor CPU編號

???? rtprio: 實時優先級

 

使用watch實用程序執行重復的輸出以實現對就程進行實時的監視,如下面的命令顯示每秒鐘的監視:

watch -n 1 ‘ps -eo pid,ppid,cmd,%mem,%cpu –sort=-%mem | head’

 

renice命令: 可以調整進程nice優先級。

renice [-n] priority pid…

例:renice? -n? -10? 2162????? 將2162號進程nice優先級調為-10

nice命令: 可以指定程序的優先級運行。

nice [OPTION] [COMMAND [ARG]…]

例:nice –n -5 cmd???? 以-5的優先級運行cmd程序

nice -5 cmd???????? 以5的優先級運行cmd程序

nice –5 cmd??????? 以-5的優先級運行cmd程序

 

按預定義的模式搜索進程: pgrep [options] pattern (支持正則表達式)

pgrep?? -u uid: effective user,生效者

-U uid: real user,真正發起運行命令者

-t terminal: 與指定終端相關的進程

-l: 顯示進程名

-a: 顯示完整格式的進程名

-P pid: 顯示指定進程的子進程

按確切的程序名稱搜索進程:pidof

例:pidof? bash????? 顯示bash進程的PID

 

uptime

顯示當前時間,系統已啟動的時間、當前上線人數,系統平均負載(指在特定時間間隔內運行隊列中的平均進程數)。

load overage? ____1____? ____2____? ____3____

1.1分鐘內的平均負載

2.5分鐘內的平均負載

3.10分鐘內的平均負載

注:平均負載值一般不會超過1

?

top: ???動態觀察進程

輸入? P:以占據的CPU百分比,%CPU 排序

M:占據內存百分比,%MEM 排序

T:累積占據CPU時長,TIME+ 排序

q: 退出觀察界面

s: 修改刷新時間間隔

k:終止指定進程

l:首部信息顯示uptime信息

t:首部信息顯示tasks及cpu信息

1(數字一):首部信息顯示cpu分別顯示

m:首部信息顯示memory信息

W:保存文件

top ??-d # 指定刷新時間間隔為#秒,默認為3秒

-b??? 全部顯示所有進程

-n #? 刷新#次后退出

 

htop命令:EPEL源

htop -d #: 指定延遲時間;

-u UserName: 僅顯示指定用戶的進程

-s COLUME: 以指定字段進行排序

s: 跟蹤選定進程的系統調用

l: 顯示選定進程打開的文件列表

a:將選定的進程綁定至某指定CPU核心

t: 顯示進程樹

 

free [OPTION]:顯示內存空間使用狀態

free -b 以字節為單位

-m 以MB為單位

-g 以GB為單位

-h 易讀格式

-o 不顯示-/+buffers/cache行

-t 顯示RAM + swap的總和

-s n 刷新間隔為n秒

-c n 刷新n次后即退出

 

vmstat命令:查看虛擬內存信息 ,默認執行完就退出,也可以通過加數字來動態觀察。

例:vmstat 2 5????? 2秒執行命令一次,執行5次后退出

io:?? bi:從塊設備讀入數據到系統的速率(kb/s)

bo: 保存數據至塊設備的速率

swap: si:從磁盤交換進內存的數據速率(kb/s)

so:從內存交換至磁盤的數據速率(kb/s)

 

iostat:統計CPU和設備IO信息

 

pmap命令:顯示進程對應的內存映射關系

pmap –x? 顯示詳細的信息

臟數據:正在修改尚未結束的數據

 

glances命令:EPEL源 ,遠程監控遠程主機上的狀態。

 

dstat命令:系統資源統計,代替vmstat,iostat

dstat -c: 顯示cpu相關信息

-d: 顯示disk相關信息

-g:顯示page相關統計數據

-m: 顯示memory相關統計數據

-n: 顯示network相關統計數據

-p: 顯示process相關統計數據

-r: 顯示io請求相關的統計數據

-s: 顯示swapped相關的統計數據

–top-cpu:顯示最占用CPU的進程

–top-io: 顯示最占用io的進程

–top-mem: 顯示最占用內存的進程

?–top-latency: 顯示延遲最大的進程

 

iotop命令是一個用來監視磁盤I/O使用狀況的top類工具

 

kill命令: 向進程發送控制信號,以實現對進程管理,每個信號對應一個數字,信號名稱以SIG開頭(可省略),不區分大小寫

查看常用信號:man 7 signal

1) SIGHUP: 無須關閉進程而讓其重讀配置文件

2) SIGINT: 中止正在運行的進程;相當于Ctrl+c

3) SIGQUIT:相當于ctrl+\

9) SIGKILL: 強制殺死正在運行的進程

15) SIGTERM:終止正在運行的進程

18) SIGCONT:繼續運行

19) SIGSTOP:后臺休眠

指定信號的方法:

(1) 信號的數字標識:1, 2, 9

(2) 信號完整名稱:SIGHUP

(3) 信號的簡寫名稱:HUP

 

killall (-15) sleep?? 殺死同樣名字為sleep的程序。(killall默認為15號信號)

 

pkill [options] pattern(支持正則表達式)

-SIGNAL(信號編號)

-u uid: effective user,生效者

-U uid: real user,真正發起運行命令者

-t terminal: 與指定終端相關的進程

-l: 顯示進程名(pgrep可用)

-a: 顯示完整格式的進程名(pgrep可用)

-P pid: 顯示指定進程的子進程

 

作業管理:

查看當前終端所有作業:jobs

將命令從前臺執行改為后臺執行:cmd? &

將#號命令從后臺放回前臺:fg? #

將前臺命令放入后臺,但會使命令處于休眠狀態:ctrl + z

將#號命令從休眠狀態恢復到運行狀態:bg? #

關閉#號命令:kill? %#

 

后臺作業雖然被送往后臺運行,但其依然與終端相關;退出終端,將關閉后臺作業。如果希望送往后臺后,剝離與終端的關系

nohup COMMAND &>/dev/null &

screen;COMMAND(創建會話)

 

多進程并行執行:

方法一:編寫腳本

vi all.sh

f1.sh&

f2.sh&

f3.sh&

方法二:

(f1.sh&);(f2.sh&);(f3.sh&)

方法三:

{ f1.sh& f2.sh& f3.sh& }

 

、任務管理

未來的某時間點執行一次任務:at

周期性運行某任務:cron

 

執行一次任務:

at? -V 顯示版本信息:

-l: 列出指定隊列中等待運行的作業;相當于atq

-d: 刪除指定的作業;相當于atrm

-c: 查看具體作業任務

-f /path/from/somefile:從指定的文件中讀取任務

-m:當任務被完成之后,將給用戶發送郵件,即使沒有標準輸出

at的時間格式:

??at now + #minutes??? 15分鐘后執行命令

at 02pm + 3day?????? 三天后的下午2點執行命令

 

noon, midnight, teatime(4pm)

tomorrow

now+#{minutes,hours,days, OR weeks}

 

白名單:/etc/at.allow 默認不存在,只有該文件中的用戶才能執行at命令

黑名單:/etc/at.deny 默認存在,拒絕該文件中用戶執行at命令,而沒有在at.deny 文件中的使用者則可執行

如果兩個文件都不存在,只有 root 可以執行 at 命令

若兩個文件都存在則只有在白名單的用戶才可以使用at命令

 

周期性運行任務:

確保crond守護處于運行狀態:

CentOS 7:

systemctl status crond

CentOS 6:

service crond status

 

系統cron任務:vim? /etc/crontab

 

# .—————- minute (0 – 59)

# | .————- hour (0 – 23)

# | | .———- day of month (1 – 31)

# | | | .——- month (1 – 12) OR jan,feb,mar,apr …

# | | | | .—- day of week (0 – 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat

# | | | | |

# * * * * * user-name command to be executed

分 時 日 月 周幾 執行人? 命令

*/10?? 每10分鐘執行一次

‘日’和‘周幾’時“或”的關系

@monthly??? 每個月一號0點執行任務

@reboot???? 每次啟動系統時執行任務

@yearly???? 每年一月一日0點執行任務

@daily ?????每天0點執行任務

@hourly???? 每個小時0分執行任務

@weekly???? 每周日0點執行任務

 

crontab ??-l: 列出所有任務

-e: 編輯任務

-r: 移除所有任務

-i:同-r一同使用,以交互式模式移除指定任務

-u user: 僅root可運行,指定用戶管理cron任務

控制用戶執行計劃任務

/etc/cron.{allow,deny}??????? (與at的黑白名單相同)

 

注:可以利用sleep命令達到秒級運行任務。

例:vim? f1.sh

cmd

sleep? 20

cmd

sleep? 20???????????????????? 實現了每20秒執行一次任務

cmd

 

vim? /etc/crontab

* * * * * f1.sh

 

sleep命令:

sleep NUMBER[SUFFIX]…

SUFFIX:

s: 秒, 默認

m: 分

h: 小時

d: 天

 

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/97567

(0)
西行西行
上一篇 2018-05-05
下一篇 2018-05-05

相關推薦

  • LFS實驗第一次——第一章

    環境準備:Centos6.8虛擬機 2G內存 2顆CPU 200G硬盤分區情況:/ 50G ?/boot 1G ?/swap 2G /data 30G 安裝時吧開發工具安裝上(gcc)

    2018-03-29
  • bash的工作特性

    bash特性:命令執行狀態返回值 bash命令的執行狀態分為兩種:1. 成功,狀態返回值為0。2. 失敗,狀態返回值為1-255。bash使用特殊變量$?保存最近一條命令的執行狀態結果: [Azuth@azuth ~]$ id root &>/dev/null[Azuth@azuth ~]$ echo $?0[Azuth@azuth ~]$ i…

    Linux筆記 2018-05-20
  • MySQL之SQL語法介紹

    結構化查詢語言(Structured Query Language)簡稱SQL,是一種特殊目的的編程語言,是一種數據庫查詢和程序設計語言,用于存取數據以及查詢、更新和管理關系數據庫系統;同時也是數據庫腳本文件的擴展名

    2018-06-07
  • vim的使用方法

    從命令模式到插入模式的幾種方法 i 光標不移動 I 光標移動到光標所在行首 a 光標往后移動一個字符 A 光標移動到光標所在行尾 o 光標所在行下新增一行 O 光標所在行上新增一行 擴展模式: :q 退出 :q! 強制退出,丟棄做出的修改 :wq 保存退出 :x 保存退出 :wq! 對只讀文件強行修改保存? :r file 把文件內容讀入到當前文件中 :w …

    Linux筆記 2018-08-05
  • linux第一周總結

    一個小白的感受

    Linux筆記 2018-04-01
  • 文本處理工具sed

    一個強大的文本處理sed,行編輯器

    2018-04-19
欧美性久久久久