一、程序和進(jìn)程
1、程序
- 保存在硬盤(pán)、光盤(pán)等介質(zhì)中的可執(zhí)行代碼和數(shù)據(jù)
- 文件中靜態(tài)保存的代碼
2、進(jìn)程
- 在CPU及內(nèi)存中運(yùn)行的程序代碼
- 動(dòng)態(tài)執(zhí)行的代碼
- 父、子進(jìn)程
每個(gè)程序可以創(chuàng)建一個(gè)或多個(gè)進(jìn)程
3、線(xiàn)程
- 線(xiàn)程是CPU調(diào)度的最小單位(程序執(zhí)行流的最小單元)
- 它被包含在進(jìn)程之中,是進(jìn)程中的實(shí)際運(yùn)作單元
- 一條線(xiàn)程是進(jìn)程中一個(gè)單一順序的控制流
- 一個(gè)進(jìn)程中可以并發(fā)多個(gè)線(xiàn)程,每條線(xiàn)程并行執(zhí)行不同的任務(wù)。
4、線(xiàn)程與進(jìn)程的關(guān)系
- 一個(gè)線(xiàn)程只能屬于一個(gè)進(jìn)程,而一個(gè)進(jìn)程可以有多個(gè)線(xiàn)程,但至少有一個(gè)線(xiàn)程
- 資源分配給進(jìn)程,同一進(jìn)程內(nèi)的所有線(xiàn)程共享該進(jìn)程的所有資源
- 線(xiàn)程在執(zhí)行過(guò)程中需要協(xié)作同步。不同進(jìn)程中的線(xiàn)程之間要利用消息通信的方法實(shí)現(xiàn)同步
- 處理機(jī)分配給線(xiàn)程,即真正在處理機(jī)上運(yùn)行的是線(xiàn)程
- 線(xiàn)程是進(jìn)程的一個(gè)執(zhí)行單元,也是進(jìn)程內(nèi)的可調(diào)用實(shí)體。
二、查看進(jìn)程信息的命令(ps、top、pgrep、pstree)
1、查看靜態(tài)的進(jìn)程統(tǒng)計(jì)信息ps命令:ps aux
1.1、代碼
[root@localhost~]# ps aux
字符 | 說(shuō)明 |
---|---|
a | 顯示終端上的所有進(jìn)程,包括其他用戶(hù)的進(jìn)程 |
u | 表示列出進(jìn)程的用戶(hù) |
x | 顯示所有終端的進(jìn)程 |
1.2、示例
::: hljs-center
:::
::: hljs-center
:::
1.3、各列的解釋
各列名稱(chēng) | 解釋 |
---|---|
USER | 進(jìn)程的用戶(hù) |
PID | 進(jìn)程的ID |
%CPU | 進(jìn)程占用的CPU百分比 |
%MEM | 占用內(nèi)存的百分比 |
VSZ | 該進(jìn)程使用的虛擬內(nèi)存量(KB) |
RSS | 該進(jìn)程占用的物理內(nèi)存量(KB) |
TTY | 啟動(dòng)進(jìn)程的終端名。不是從終端啟動(dòng)的進(jìn)程則顯示為? |
STAT | 該進(jìn)程的狀態(tài) |
START | 該進(jìn)程被觸發(fā)啟動(dòng)時(shí)間 |
TIME | 該進(jìn)程實(shí)際使用CPU運(yùn)行的時(shí)間 |
COMMAND | 進(jìn)程的啟動(dòng)命令 |
1.4、進(jìn)程狀態(tài)
進(jìn)程狀態(tài) | 說(shuō)明 |
---|---|
D | 不可中斷的休眠狀態(tài) |
R | 正在運(yùn)行狀態(tài) |
S | 處于休眠狀態(tài),可被喚醒 |
T | 停止?fàn)顟B(tài),可能是在后臺(tái)暫停或進(jìn)程處于跟蹤調(diào)試狀態(tài) |
Z | 僵尸進(jìn)程,進(jìn)程已經(jīng)中止,但是部分程序還在內(nèi)存當(dāng)中 |
補(bǔ)充:僵尸進(jìn)程
一個(gè)進(jìn)程結(jié)束了,但是如果該進(jìn)程的父進(jìn)程已經(jīng)先結(jié)束了,那么該進(jìn)程就不會(huì)變成僵尸進(jìn)程,因?yàn)槊總€(gè)進(jìn)程結(jié)束的時(shí)候,系統(tǒng)都會(huì)掃描當(dāng)前系統(tǒng)中所運(yùn)行的所有進(jìn)程,看有沒(méi)有哪個(gè)進(jìn)程是剛剛結(jié)束的這個(gè)進(jìn)程的子進(jìn)程,如果是的話(huà),就由Init來(lái)接管它,成為它的父進(jìn)程,子進(jìn)程退出后init會(huì)回收其占用的相關(guān)資源。
但是當(dāng)子進(jìn)程比父進(jìn)程先結(jié)束,而父進(jìn)程又沒(méi)有回收子進(jìn)程,釋放子進(jìn)程占用的資源,此時(shí)子進(jìn)程將成為一個(gè)僵進(jìn)程。
2、查看靜態(tài)的進(jìn)程統(tǒng)計(jì)信息ps命令:ps -elf
2.1、代碼
[root@localhost~]# ps -elf
字符 | 說(shuō)明 |
---|---|
-e | 顯示系統(tǒng)內(nèi)的所有進(jìn)程信息 |
-l | 使用長(zhǎng)格式顯示進(jìn)程信息 |
-f | 使用完整的格式顯示進(jìn)程信息 |
-a | 顯示所有進(jìn)程pid |
-T | 查看線(xiàn)程信息 |
[root@localhost~]# ps -aT 顯示所有線(xiàn)程
2.2、示例
::: hljs-center
:::
2.3、各列的解釋
各列名稱(chēng) | 解釋 |
---|---|
F | 內(nèi)核分配給進(jìn)程的系統(tǒng)標(biāo)記 |
S | 進(jìn)程的狀態(tài) |
UID | 啟動(dòng)這些進(jìn)程的用戶(hù) |
PID | 進(jìn)程的進(jìn)程ID |
PPID | 父進(jìn)程的進(jìn)程號(hào)(如果該進(jìn)程是由另一個(gè)進(jìn)程啟動(dòng)的) |
C | 進(jìn)程生命周期中的CPU使用率 |
PRI | 進(jìn)程的優(yōu)先級(jí)(越大的數(shù)字代表越低的優(yōu)先級(jí)) |
NI | 謙讓度值用來(lái)參與決定優(yōu)先級(jí) |
ADDR | 進(jìn)程的內(nèi)存地址 |
SZ | 假如進(jìn)程被換出,所需交換空間的大致大小 |
WCHAN | 若該進(jìn)程在睡眠,則顯示睡眠中的系統(tǒng)函數(shù)名 |
STIME | 進(jìn)程啟動(dòng)時(shí)的系統(tǒng)時(shí)間 |
TTY | 進(jìn)程啟動(dòng)時(shí)的終端設(shè)備 |
TIME | 運(yùn)行進(jìn)程需要的累計(jì)CPU時(shí)間 |
CMD | 進(jìn)程的啟動(dòng)命令 |
tty終端
- Centos7系統(tǒng),tty1表示圖形界面,tty2-tty6表示文字 界而,可以用Ctr1+Alt+F1-F6切換。
- pts說(shuō)明是用遠(yuǎn)程工具連接的,比如xshell,后面的數(shù)字代表登錄的時(shí)間順序,越小證明登錄的越早
3、查看動(dòng)態(tài)的進(jìn)程排名信息:top命令
3.1、top命令
[root@localhost~]# top
::: hljs-center
:::
3.2、各行的解釋
第一行:任務(wù)隊(duì)列信息
信息 | 說(shuō)明 |
---|---|
11:06:48 | 系統(tǒng)時(shí)間 |
up 1:22 | 系統(tǒng)已運(yùn)行時(shí)長(zhǎng) |
1 user | 當(dāng)前登錄用戶(hù)數(shù) |
load average:0.06,0.60,0.48 | 系統(tǒng)負(fù)載,即單位時(shí)間內(nèi)系統(tǒng)處理的任務(wù)數(shù),后面三個(gè)數(shù)值分別為1分鐘、5分鐘、15分鐘前到現(xiàn)在的平均值 |
第二行:進(jìn)程信息
信息 | 說(shuō)明 |
---|---|
Tasks | 總進(jìn)程數(shù) |
running | 正在運(yùn)行的進(jìn)程數(shù) |
sleeping | 休眠的進(jìn)程數(shù) |
stopped | 中止的進(jìn)程數(shù) |
zombie | 僵死的進(jìn)程數(shù) |
第三行:CPU的信息
信息 | 說(shuō)明 |
---|---|
us | 用戶(hù)占用 |
sy | 內(nèi)核占用 |
ni | 優(yōu)先級(jí)調(diào)度占用 |
id | 空閑CPU,要了解空閑的 CPU 的百分比,主要看 %id 部分 |
wa | I/O等待占用 |
hi | 硬件中斷占用 |
si | 軟件中斷占用 |
st | 虛擬化占用 |
第四行:內(nèi)存的信息
信息 | 說(shuō)明 |
---|---|
total | 總內(nèi)存空間 |
free | 空閑內(nèi)存 |
used | 已用內(nèi)存 |
buff/cache | 物理內(nèi)存和交換內(nèi)存的緩沖區(qū)總和 |
第五行:交換空間的信息
信息 | 說(shuō)明 |
---|---|
total | 總交換空間 |
free | 空閑交換空間 |
used | 已用交換空間 |
avail Mem | 可用物理空間 |
3.3、進(jìn)程信息區(qū)各列解釋
各列名稱(chēng) | 解釋 |
---|---|
PID | 進(jìn)程id |
USER | 進(jìn)程所有者的用戶(hù)名 |
PR | 優(yōu)先級(jí) |
NI | 謙讓度值。謙讓度越高,優(yōu)先級(jí)越低。復(fù)制表示高優(yōu)先級(jí),正值表示低優(yōu)先級(jí) |
VIRT | 進(jìn)程使用的虛擬內(nèi)存總量,單位kb |
RES | 進(jìn)程使用的物理內(nèi)存大小,單位kb |
SHR | 共享內(nèi)存大小,單位kb |
S | 進(jìn)程狀態(tài) |
%CPU | 上次更新到現(xiàn)在的CPU時(shí)間占用百分比 |
%MEM | 進(jìn)程使用的物理內(nèi)存百分比 |
TIME+ | 進(jìn)程使用的CPU時(shí)間總計(jì),單位1/100秒 |
COMMAND | 命令名/命令行 |
3.4、top常用命令
命令 | 說(shuō)明 |
---|---|
P鍵 | 根據(jù)CPU使用百分比大小進(jìn)行排序 |
M鍵 | 根據(jù)駐留內(nèi)存大小進(jìn)行排序 |
N鍵 | 根據(jù)啟動(dòng)時(shí)間進(jìn)行排序 |
c鍵 | 切換顯示命令名稱(chēng)和完整命令行 |
h鍵 | 可以獲得top程序的在線(xiàn)幫助信息 |
k鍵 | 根據(jù)提示輸入指定進(jìn)程的PID號(hào)并按Enter鍵終止對(duì)應(yīng)的進(jìn)程 |
q鍵 | 退出top程序 |
數(shù)字1鍵 | 顯示CPU個(gè)數(shù)和狀態(tài) |
4、根據(jù)特定條件查詢(xún)進(jìn)程PID信息:pgrep命令
[root@localhost~]# pgrep -l "log"2538 rsyslogd2113 mcelog[root@localhost~]# pgrep -l -U teacher -t tty227483 bash27584 vim
選項(xiàng) | 說(shuō)明 |
---|---|
-l | 顯示進(jìn)程名,缺省時(shí)只輸出PID號(hào) |
-U | 指定特定用戶(hù) |
::: hljs-center
:::
5、以樹(shù)形結(jié)構(gòu)列出進(jìn)程信息:pstree命令
[root@localhost ~]# pstree -aupinit,1....//省略部分信息 login,3221 bash,27483,teacher vim,27674 myfile.txt.....//省略部分信息[root@localhost ~]# pstree -ap teacherbash,27483 vim,27674 myfile.txt
::: hljs-center
:::
三、進(jìn)程的啟動(dòng)與控制
1、進(jìn)程的啟動(dòng)方式
1.1、手工啟動(dòng)
- 前臺(tái)啟動(dòng):用戶(hù)輸入命令,直接執(zhí)行程序
- 后臺(tái)啟動(dòng):在命令行尾加入“&”符號(hào)
[root@localhost ~]# cp /dev/cdrom mycd.iso &[1]28454 ##輸出信息中包括后臺(tái)任務(wù)序號(hào)、PID號(hào)
::: hljs-center
:::
1.2、調(diào)度啟動(dòng)
- 使用at命令
- 使用crontab命令,設(shè)置周期性計(jì)劃任務(wù)
2、進(jìn)程的前后臺(tái)調(diào)度
Ctrl+Z組合鍵
- 將當(dāng)前進(jìn)程掛起,即調(diào)入后臺(tái)并停止執(zhí)行
jobs命令
- jobs [-l]
- 查看處于后臺(tái)的任務(wù)列表
fg命令
- 將后臺(tái)進(jìn)程恢復(fù)到前臺(tái)運(yùn)行,可指定任務(wù)序號(hào)
[root@localhost ~]# jobs[1]- Stopped cp /dev/cdrom mycd.iso[2]+ Stopped top[root@localhost ~]# fg 1
3、終止進(jìn)程的運(yùn)行
Ctrl+C組合鍵
- 中斷正在執(zhí)行的命令
kill、killall命令
- kill用于終止指定PID號(hào)的進(jìn)程
- killall用于終止指定名稱(chēng)相關(guān)的所有進(jìn)程
- -9選項(xiàng)用于強(qiáng)制終止
pkill命令
- 根據(jù)特定條件終止相應(yīng)的進(jìn)程
- 常用命令選項(xiàng)
選項(xiàng) | 說(shuō)明 |
---|---|
-U | 根據(jù)進(jìn)程所屬的用戶(hù)名終止相應(yīng)的進(jìn)程 |
-t | 根據(jù)進(jìn)程所在的終端終止相應(yīng)進(jìn)程 |
[root@localhost ~]# pgrep -l -U "teacher"3045 bash[root@localhost ~]# pkill -9 -U "teacher"[root@localhost ~]# pgrep -l -U "teacher"
四、計(jì)劃任務(wù)管理(at命令、crontab命令)
1、at命令
- 一次性計(jì)劃任務(wù)
::: hljs-center
:::
[root@localhost ~]# dateSun May 7 10:33:13 EDT 2017[root@localhost ~]# at 10:35 2017-05-07at> pgrep -U root | WC -l > /tmp/ps.rootat> 按Ctrl+ D鍵提交任務(wù)job 1 at Sun May 7 10:35:00 2017[root@localhost ~]# cat /tmp/ps.root202
1.1、案例
- 在當(dāng)天的21:30時(shí)自動(dòng)關(guān)閉當(dāng)前系統(tǒng)
[root@localhost ~]# at 21:30##不攜帶日期表示為當(dāng)天at> shutdown -h nowat>
##按CtrI+D鍵提交任務(wù)job 2 at Sun May 7 21:30:00 2017
[root@localhost ~]# atq
##查看未執(zhí)行的任務(wù)列表
2 Sun May 7 21:30:00 2017 a root
[root@localhost ~]# atrm 1
##刪除第1條任務(wù)
[root@localhost ~]# atq
### 2、crontab命令**2.1、crontab命令**- 按照預(yù)先設(shè)置的時(shí)間周期(分鐘、小時(shí)、天、月、周)重 分時(shí)日月周 復(fù)執(zhí)行用戶(hù)指定的命令操作- 屬于周期性計(jì)劃任務(wù)- 主要設(shè)置文件全局配置文件,位于文件: /etc/crontab系統(tǒng)默認(rèn)的設(shè)置,位于目錄: /etc/cron.*/用戶(hù)定義的設(shè)置,位于文件: /var/spool/cron/用戶(hù)名**2.2、管理crontab計(jì)劃任務(wù)**- 編輯計(jì)劃任務(wù)::: hljs-center![2.png](https://s2.51cto.com/images/20211122/1637550132563912.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=):::- 查看計(jì)劃任務(wù)::: hljs-center![3.png](https://s2.51cto.com/images/20211122/1637550156822999.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=):::- 刪除計(jì)劃任務(wù)::: hljs-center![4.png](https://s2.51cto.com/images/20211122/1637550182126871.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=):::**2.3、crontab任務(wù)配置的格式**2.3.1、六個(gè)字段::: hljs-center![12.png](https://s2.51cto.com/images/20211122/1637550928388658.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=):::| 代表意義 | 數(shù)字范圍 || :------: | :--------------------------------------: || 分鐘 | 取值從0到59之間的任意整數(shù) || 小時(shí) | 取值從0到23之間的任意整數(shù) || 日期 | 取值從1到31之間的任意整數(shù) || 月份 | 取值從1到12之間的任意整數(shù) || 星期 | 取值為0到7之間的任意整數(shù),0或7代表星期日 || 命令 | 要執(zhí)行的命令或程序腳本 |**2.3.2、時(shí)間數(shù)值的特殊表示方法**- *表示該范圍內(nèi)的任意時(shí)間- ,表示間隔的多個(gè)不連續(xù)時(shí)間點(diǎn)- -表示一個(gè)連續(xù)的時(shí)間范圍- /指定間隔的時(shí)間頻率**2.3.3、應(yīng)用示例**| 示例 | 含義 || :--------------: | :---------------------: || 0 17 * * 1-5 | 周一到周五每天17:00 || 30 8 * * 1,3,5 | 每周一、三、五的8點(diǎn)30分 || 0 818/2 * * * | 8點(diǎn)到18點(diǎn)之間每2小時(shí) || 0 * */3 * * | 每3天 |**2.4、crontab任務(wù)配置**::: hljs-center![13.png](https://s2.51cto.com/images/20211122/1637551219707587.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=):::1.每分鐘定時(shí)執(zhí)行一次規(guī)則:
每1分鐘執(zhí)行: /1 或者
每5分鐘執(zhí)行: /5 *
2.每小時(shí)定時(shí)執(zhí)行一次規(guī)則:
每小時(shí)執(zhí)行:0 或者0 /1
每天上午7點(diǎn)執(zhí)行: 0 7
每天上午7點(diǎn)10分執(zhí)行: 10 7
3.每天定時(shí)執(zhí)行一次規(guī)則:
每天執(zhí)行 0 0 *
4.每周定時(shí)執(zhí)行一次規(guī)則:
每周執(zhí)行 0 0 1
5.每月定時(shí)執(zhí)行一次規(guī)則:
每月執(zhí)行 0 0 1
6.每年定時(shí)執(zhí)行一次規(guī)則:
每年執(zhí)行 0 0 1 1 *
7.其他例子
5 ls 指定每小時(shí)的第5分鐘執(zhí)行一次ls命令
30 5 ls 指定每天的5:30執(zhí)行l(wèi)s命令
30 7 8 ls 指定每月8號(hào)的7: 30分執(zhí)行l(wèi)s命令
30 5 8 6 ls 指定每年的6月8日5: 30執(zhí)行l(wèi)s命令
30 6 0 ls
指定每星期日的6:30執(zhí)行l(wèi)s命令[注: 0表示星期天,1表示星期1,以此類(lèi)推,也可以用英文來(lái)表示,sun表示星期天,mon表示星期一等]
30 3 10,20 ls 每月10號(hào)及20號(hào)的3: 30執(zhí)行l(wèi)s命令[注:“-"用來(lái)連接多個(gè)不連續(xù)的時(shí)段]
25 8-11 ls 每天8-11點(diǎn)的第25分鐘執(zhí)行l(wèi)s命令[注: “-"用來(lái)連接連續(xù)的時(shí)段]
/15 ls 每15分鐘執(zhí)行一次ls命令 [即每個(gè)小時(shí)的第0 15 30 45 60分鐘執(zhí)行l(wèi)s命令]
30 6 /10 * ls 每個(gè)月中,每隔10天6:30執(zhí)行一次ls命令[即每月的1、11、21、31日是的6: 30執(zhí)行一次ls命令。 ]
方法二:
echo ‘30 7 6 /usr/bin/systemct1 httpd restart’ >> /var/spool/cron/ root ##用絕對(duì)路徑表示命令
1,6月的每個(gè)周六從.上午10點(diǎn)到下午的4點(diǎn)的每10分鐘執(zhí)行l(wèi)s -1
/10 10-16 1,6 6 /usr/bin/ls -1