一.進程基礎知識 1.1 Linux進程的概念 Process :是運行中的程式的一個副本,是被載入記憶體的一個指令集合。進程 (`Process ID PID UID GID SELinux`語境決定對文件系統的 存取和訪問許可權 ,這些屬性通常從執行進程的用戶來 繼承 ,並且進程存在 生命周期 ,每 ...
一.進程基礎知識
1.1 Linux進程的概念
- Process:是運行中的程式的一個副本,是被載入記憶體的一個指令集合。進程
ID
(Process ID
,PID
)號碼被用來標記各個進程UID
、GID
、和SELinux
語境決定對文件系統的存取和訪問許可權,這些屬性通常從執行進程的用戶來繼承,並且進程存在生命周期,每個進程的進程號是唯一的 - centos linux的第一個進程通常是
init
或者systemd
,它是所有進程的父進程,PID
為1,是唯一一個由系統內核直接運行的進程 - Linux 給每個進程都打上了運行者的標誌,用戶可以控制自己的進程:給自己的進程分配不同的優先順序,也可以隨時終止自己的進程
Linux 不可能在一個 CPU 上同時處理多個任務(作業)請求,而是採用 “分時” 技術來處理這些任務請求
除了init或者systemd,其他進程都是由父進程創建,即每個進程都有父進程(PPID)
1.2 進程類型
- 交互進程
- 由一個Shell啟動的進程。
- 交互進程既可以在前臺運行,也可以在後臺運行。
- 批處理進程
- 不與特定的終端相關聯,提交到等待隊列種順序執行的進程。
- 守護進程(Daemon)
- 在Linux在啟動時初始化,需要時運行於後臺的進程。
1.3 進程狀態
- R (TASK_RUNNING):可執行狀態
- S (TASK_INTERRUPTIBLE):可中斷的睡眠狀態
- D (TASK_UNINTERRUPTIBLE):不可中斷的睡眠狀態
- T (TASK_STOPPED or TASK_TRACED):暫停狀態或跟蹤狀態
- Z (TASK_DEAD - EXIT_ZOMBIE):退出狀態,進程成為僵屍進程
- X (TASK_DEAD - EXIT_DEAD):退出狀態,進程即將被銷毀
1.4 進程的啟動方式
- 手工方式:使用操作系統提供的用戶介面
- 前臺
- 後臺(&)
- 調度方式:按照預先指定的時間執行
- at
- batch
- cron
1.5 前臺進程
指一個程式控制著標準輸入/輸出,在程式運行時,shell 被暫時掛起,直到該程式運行結束後,才退回到 shell。在這個過程中,用戶不能再執行其它程式
1.6 後臺進程
用戶不必等待程式運行結束就可以執行其它程式。運行後臺進程的方法是在命令行最後加上 “&”
1.7 進程與作用的區別
- 進程:操作系統的概念,由操作系統負責管理
作業:
shell程式的概念,由shell程式負責管理- 一個操作系統可以啟動多個shell程式,shell本身也是一個進程
- 一個作業里至少包含一個進程,也可以包含多個進程
- 作業分前臺和後臺運行之分
有了上面的知識,我們可以畫出這麼一張流程圖:
二.管理進程常用命令
使用ps
命令查看進程狀態信息:
ps -ef
ps aux
ps
命令參數說明:
ps
命令輸出說明:
還有其他幾個常用命令:
- 註銷後繼續運行進程:
nohup 命令 [選項] [參數] [輸出文件] &
- 用過SpringBoot打jar包部署到Linux下的人對上面這個命令一定不會陌生啦~
- 殺死進程:
kill -9 pid
pstree
以樹形結構顯示左右進程,特別是它能顯示進程間的父子關係,-p
同時顯示進程號free
:查看記憶體使用狀況top
:查看實時刷新的系統進程信息- 進程調度的優先權
nice
命令 - 進程運行後調整優先順序:
renice
命令
作業控制是指控制當前正在運行的進程的行為,也被稱為進程式控制制。
- 暫時停止某個運行程式 使用
Ctrl+z
- 列舉作業號碼和名稱:
jobs
- 在後臺恢復運行:
bg [%作業號碼]
- 在前臺恢復運行:
fg [%作業號碼]
- 發送信號:
kill -[信號] pid
另外關於進程狀態的切換如下圖:
三.守護進程
始終在後臺運行並響應合法請求的程式稱為守護(Daemon)進程。守護進程不是由用戶啟動運行的,也不與終端關聯。
- 一個實際運行中的系統一般會有多個守護進程在運行,且各個系統中運行的守護進程都不盡相同
- 除非程式異常中止或者人為終止,否則它們將一直運行下去直至系統關閉
- UNIX/Linux的守護進程在Windows系統中被稱作“服務”
3.1 守護進程的分類
系統守護進程:
- 計劃性任務 daemon:如 atd、crond
- 系統日誌 daemon:如 rsyslogd
- 列印假離線 daemon:如 cupsd、lpd
- 網路參數設置 daemon:如 network
網路守護進程:
- 各種網路協議偵聽 daemon
- 如:sshd、httpd、postfix、vsftpd
網路超級伺服器(Supper Server):
- 如:xinetd 或 inetd
3.2 超級伺服器的引入 xinetd
對於系統所要提供的每一種網路服務,都必須運行一個監聽某個埠連接發生的守護程式,這通常意味著系統資源的浪費。
為了避免系統資源浪費引入了“超級伺服器”。超級伺服器啟動後同時監聽它所管理的服務的所有埠
- 當有客戶提出服務請求時 :
- 超級伺服器會判斷這是對哪一個服務的請求,然後再開啟與此服務相應的守護進程
- 由超級伺服器產生的某服務的進程處理客戶的請求,當處理結束便終止此服務進程
- 超級伺服器本身繼續監聽其他服務請求
3.3守護進程的啟動方式
- 獨立啟動
- 獨立運行的守護進程由init腳本負責管理,腳本存放在
/etc/rc.d/init.d/
目錄下 - 所有的系統服務都是獨立運行的。如:crond、syslogd等
- 一些常用的網路守護進程是獨立運行的。如:httpd等
- 獨立運行的守護進程由init腳本負責管理,腳本存放在
- 瞬態啟動
- 由網路超級伺服器(xinetd)運行的守護進程,由xinetd管理的守護進程的配置文件存在
/etc/xinetd.d/
目錄下 - 預設的xinetd的主配置文件是
/etc/xinetd.conf
- 一些不常用的網路守護進程是由xinetd啟動的,如:telnet、 tftp等
- xinetd本身是獨立運行的守護進程
- 由網路超級伺服器(xinetd)運行的守護進程,由xinetd管理的守護進程的配置文件存在
3.4 管理守護進程常用命令
chkconfig
命令的功能
- 添加指定的新服務
- 清除指定的服務
- 顯示由chkconfig管理的服務
- 改變服務的運行級別
- 檢查服務的啟動狀態
chkconfig --list
會顯示出對應的運行級別
- 0: 關機
- 1: 單用戶
- 2: 無網路的多用戶
- 3: 命令行模式
- 4: 未用
- 5: GUI(圖形桌面 模式)
- 6 : 重啟
用ntsysv
管理守護進程
使用service
管理守護進程
service --status-all
service server-name status
service server-name start|stop|restart
四.安排自動化任務
調度任務的守護進程
- atd
- crond
安排調度任務的幾個命令
- at 安排作業在某一時刻執行一次
- batch 安排作業在系統負載不重時執行一次
- cron 安排周期性運行的作業
4.1 atd守護進程
atd守護進程負責監控一次性任務的執行,atd守護進程的執行參數/etc/sysconfig/atd
控制普通用戶的使用
- 若
/etc/at.allow
存在,僅列在其中的用戶允許使用 - 若
/etc/at.allow
不存在,檢查/etc/at.deny
,沒有列於其中的所有用戶允許使用 - 若兩個文件均不存在,僅允許root用戶使用
- 空的
/etc/at.deny
文件,表示允許所有用戶使用(預設值)
如何使用
- 安裝命令
yum install at
- atd的啟動
service atd start
- atd服務的查看
chkconfig --list | grep atd
或者ps -aef | grep atd
at
命令格式及參數at [-q 隊列] [-f 文件名] 時間
4.2 cron
- crond守護進程負責監控周期性任務的執行
- crond守護進程的執行參數配置文件
/etc/sysconfig/crond
控制普通用戶的使用
- 若
/etc/cron.allow
存在,僅列在其中的用戶允許使用 - 若
/etc/cron.allow
不存在,檢查/etc/cron.deny
,沒有列於其中的所有用戶允許使用 - 若兩個文件均不存在,僅允許root用戶使用
- 空的
/etc/cron.deny
文件,表示允許所有用戶使用(預設值)
crond啟動以後,每分鐘喚醒一次,檢測如下文件的變化並將其載入到記憶體
/etc/crontab
:是crontab格式(man 5 crontab)的文件/etc/cron.d/*
:是crontab格式(man 5 crontab)的文件/var/spool/cron/*
:是crontab格式(man 5 crontab)的文件/etc/anacrontab
:是anacrontab格式(man 5 anacrontab)的文件