一、程序和進(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 部分
waI/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