Linux系統中的進程與計劃任務管理

程序、進程、線程概述

程序:港、臺譯做電腦程式。計算機程序是一組計算機能識別和執行的指令,運行於電子計算機上,滿足人們某種需求的信息化工具。
進程:是計算機中的程序關於du某數據集合上的一次運行活動,是系統進行資源分配zhi和調度的基本單位,是操dao作系統結構的基礎。
線程:是操作系統能夠進行運算調度的最小單位。它被包含在進程之中,是進程中的實際運作單位。一條線程指的是進程中一個單一順序的控制流,一個進程中可以併發多個線程,每條線程並行執行不同的任務。在Unix System V及SunOS中也被稱爲輕量進程(lightweight processes),但輕量進程更多指內核線程(kernel thread),而把用戶線程(user thread)稱爲線程。

進程管理內容

查看進程信息

ps命令:查看靜態的進程統計信息

方法一:

[root@localhost ~]# ps aux

a 系統當前的所有進程

u 指定用戶

x 該用戶在所有終端下的進程
在這裏插入圖片描述
第一列,稱爲字段或者屬性

PID 進程號 進程的唯一身份標識,有且僅有一個

cpu 佔用率

mem 內存佔用率

vsz 虛擬內存

rss 物理內存

TTY 終端

? 代表未知 本地加載的基本都是未知

STAT 當前進程狀態

R 代表運行中
S 代表可中斷休眠進程
D 代表不可中斷休眠進程
s 代表父進程
< 代表高優先級
N 代表低優先級
Z 殭屍進程
l代表多線性進程
前臺進程

START 啓動時間

TIME 進程佔用CPU的總時間

COMMAND 名稱
方法二:

[root@localhost ~]#ps -elf

PID 進程號

PPID 當前進程父進程狀態*

PRI 用戶態優先級,人爲控制

NI 內核態優先級,NIce值(-20~19,值越小,優先級越大)

ADDR -代表正在運行

SZ 代表虛擬內存 交換分區

WCHAN 當前進程的內核名稱

top命令

查看動態的進程排名信息

在查看動態進程時:按

c cpu由大到小排序

M 內存由大到小排序

q 退出動態進程
在這裏插入圖片描述

[root@localhost ~]# top
top - 15:12:21 up  2:22,  7 users,  load average: 0.00, 0.01, 0.05
Tasks: 243 total,   1 running, 242 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us, 11.8 sy,  0.0 ni, 88.2 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  1867024 total,    68648 free,  1308412 used,   489964 buff/cache
KiB Swap:  4194300 total,  4158092 free,    36208 used.   321576 avail Mem 

   PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                                        
 54848 root      20   0  157860   2192   1488 R  5.6  0.1   0:00.03 top                                            
     1 root      20   0  128164   4776   2672 S  0.0  0.3   0:02.64 systemd                                        
     2 root      20   0       0      0      0 S  0.0  0.0   0:00.01 kthreadd                                       
     3 root      20   0       0      0      0 S  0.0  0.0   0:00.88 ksoftirqd/0 
     
     ……………………省略部分內容

pgrep命令

-U 指定特定用戶

-l 長格式顯示進程名

-t 指的是終端

根據特定條件查詢進程PID信息
[root@localhost ~]# pgrep -l "log"    //模糊匹配,只要包含log都會顯示出來
281 xfs-log/sda2
488 xfs-log/sda1
489 xfs-log/sda5
575 rsyslogd
581 abrt-watch-log
622 systemd-logind
[root@localhost ~]# pgrep -l -U ml "volume"   //指定用戶匹配volume
52100 gvfs-mtp-volume
52137 gvfs-afc-volume
52148 gvfs-goa-volume

pstree命令

以樹形結構列出進程信息

pstree  -aup

-a 顯示完整信息

-u 列出對應用戶名

-p 列出對應PID號

init,1 代表初始化的進程
process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NzIxOTgxOA==,size_16,color_FFFFFF,t_70)

[root@localhost ~]# pstree -aup       //列出所有進程信息
systemd,1 --switched-root --system --deserialize 21
  ├─ModemManager,578
  │   ├─{ModemManager},600
  │   └─{ModemManager},614
  ├─NetworkManager,706 --no-daemon
  │   ├─dhclient,17013 -d -q -sf /usr/libexec/nm-dhcp-helper -pf /var/run/dhclient-ens33.pid -lf...
  │   ├─{NetworkManager},710
  │   └─{NetworkManager},712
…………省略部分內容

[root@localhost ~]# pstree  -ap ml     //列出用戶ml所有信息
at-spi-bus-laun,53506
  ├─dbus-daemon,53511 --config-file=/usr/share/defaults/at-spi2/accessibility.conf --nofork --print-address 3
  │   └─{dbus-daemon},53512
  ├─{at-spi-bus-laun},53507
  ├─{at-spi-bus-laun},53508
  ├─{at-spi-bus-laun},53509
  └─{at-spi-bus-laun},53510
…………省略部分內容  

[root@localhost ~]# pstree  -ap ml  //註銷用戶後再次輸入命令
未發現進程。                          //所有進程關閉了

手工啓動

前臺啓動:用戶輸入命令,直接執行程序
後臺啓動:在命令行尾加入“&”符號

例如:

[root@localhost dev]# mount /dev/sr0 /mnt/          //掛載
mount: /dev/sr0 寫保護,將以只讀方式掛載
[root@localhost dev]# cd /mnt                     
[root@localhost mnt]# ls
CentOS_BuildTag  EULA  images    LiveOS    repodata              RPM-GPG-KEY-CentOS-Testing-7
EFI              GPL   isolinux  Packages  RPM-GPG-KEY-CentOS-7  TRANS.TBL
[root@localhost mnt]# cp -r /mnt/Packages /opt        //複製安裝包到opt目錄下(屬於前臺)
^C                                             //在此複製期間,無法操作其他命令,crtl+c終斷
[root@localhost mnt]# cd /opt           
[root@localhost opt]# ls          
Packages  rh
[root@localhost opt]# cd Packages          //進入,查看到已經複製了一部分
[root@localhost Packages]# ls
389-ds-base-1.3.6.1-16.el7.x86_64.rpm                      autocorr-pt-5.0.6.2-14.el7.noarch.rpm
389-ds-base-libs-1.3.6.1-16.el7.x86_64.rpm                 autocorr-ro-5.0.6.2-14.el7.noarch.rpm
abattis-cantarell-fonts-0.0.25-1.el7.noarch.rpm            autocorr-ru-5.0.6.2-14.el7.noarch.rpm
abrt-2.1.11-48.el7.centos.x86_64.rpm                       autocorr-sk-5.0.6.2-14.el7.noarch.rpm
abrt-addon-ccpp-2.1.11-48.el7.centos.x86_64.rpm            autocorr-sl-5.0.6.2-14.el7.noarch.rpm
abrt-addon-kerneloops-2.1.11-48.el7.centos.x86_64.rpm      autocorr-sr-5.0.6.2-14.el7.noarch.rpm
abrt-addon-pstoreoops-2.1.11-48.el7.centos.x86_64.rpm      autocorr-sv-5.0.6.2-14.el7.noarch.rpm

[root@localhost opt]# cp -r /mnt/Packages /opt &  //在命令後面使用&符號,可在後臺運行復制,前臺可繼續操作
[1] 55099            *輸出信息中包括後臺任務的序號、PID號*
[root@localhost opt]# 

調度啓動

進程的前後臺調度:

ctrl +z 組合鍵:將當前進程掛機,即調入後臺並停止執行

ctrl +c 組這件:中斷正在執行的命令

jobs命令:查看處於後臺的任務列表

fg命令:將後臺進程恢復到前臺運行,可指定任務序號
在這裏插入圖片描述

[root@localhost ~]# vim abc1.txt &          //後臺創建abc1.txt
[1] 55925                                   //後臺序號1   PID:55925
[root@localhost ~]# jobs -l        
[1]+ 55925 停止 (tty 輸出)     vim abc1.txt      //停止狀態
[root@localhost ~]# vim abc2.txt &         //後臺創建abc1.txt
[2] 55934                                 //後臺序號2   PID:55934
[root@localhost ~]# jobs -l                //查看後臺任務列表
[1]- 55925 停止 (tty 輸出)     vim abc1.txt
[2]+ 55934 停止 (tty 輸出)     vim abc2.txt
[root@localhost ~]# killall -9 vim              //強制殺死vim的所有進程
[1]-  已殺死               vim abc1.txt
[2]+  已殺死               vim abc2.txt
[root@localhost ~]# jobs -l                  //查看後臺任務列表
[root@localhost ~]# fg 1
-bash: fg: 1: 無此任務
[root@localhost ~]# fg 2
-bash: fg: 2: 無此任務

終止進程

kill用於終止指定的PID號的進程

killall用於終止指定名稱的所有進程

-9 選項用戶強制終止

pkill命令**(重要)

根據特定條件終止相應的進程

常用命令選項
-U:根據進程所屬的用戶名終止相應的進程
-t:根據進程所在的終端終止相應進程

管理員可以對用戶進行終止進程
普通用戶不可以對管理員進行終止進程,但可以查看進程

[root@localhost ~]# pgrep -l -U "ml"    //查詢ml用戶PID信息
53307 gnome-keyring-d
53329 gnome-session-b
53337 dbus-launch
………… 省略部分內容…………

[root@localhost ~]# who           //查詢後臺登陸用戶
root     :1           2019-10-29 13:39 (:1)
root     pts/0        2019-10-31 10:57 (:1)
root     pts/2        2019-11-12 13:19 (192.168.17.1)
ml       :2           2019-11-12 14:27 (:2)
[root@localhost ~]# pkill -9 -U ml       //強行終止ml用戶的進程
[root@localhost ~]# who       //查詢後臺登陸用戶,已經沒有ml用戶了
root     :1           2019-10-29 13:39 (:1)
root     pts/0        2019-10-31 10:57 (:1)
root     pts/2        2019-11-12 13:19 (192.168.17.1)

計劃任務管理

at命令

一次性計劃任務
使用at命令,設置一次性計劃任務
使用crontab命令,設置週期性計劃任務

at [HH:MM] [yyyy-mm-dd]           //格式

1、date 獲取當前時間

2、設置時間

3、 at< 進入子模式輸入命令 wc -l 統計行數

4、ctrl+d 提交任務

atq 查看準備執行的任務列表

atrm 刪除指定編號的at任務

[root@localhost ~]# date             //獲取當前時間
2019年 11月 12日 星期二 18:35:00 CST
[root@localhost ~]# at 18:38 2019-11-12   //在18:38 2019-11-12
at> ps aux | wc -l > /opt/123.txt       //輸入要執行的命令
at> <EOT>              //按ctrl+d提交任務
job 1 at Tue Nov 12 18:38:00 2019

對於已經設置但還未執行(未到時間點)的計劃任務,可以通過atq命令進行查詢,但已經執行過的at任務將不會再出現在列表中

[root@localhost ~]# atq               //查看準備執行的任務列表
1	Tue Nov 12 18:38:00 2019 a root    
[root@localhost ~]# date             //獲取當前時間
2019年 11月 12日 星期二 18:39:04 CST
[root@localhost ~]# atq             //查看準備執行的任務列表
[root@localhost ~]# cat /opt/123.txt    //查看是否由被執行成功
192

若要刪除指定編號的at任務,可以使用atrm命令。刪除後的at任務將不會被執行,並且不會顯示在atq命令的顯示結果中。但已經執行過的任務無法刪除。

[root@localhost ~]# at 21:00 2019-11-12   //在21:00 2019-11-12
at> shutdown -h now       //輸入要執行的命令
at> <EOT>              //按ctrl+d提交任務
job 2 at Tue Nov 12 21:00:00 2019
[root@localhost ~]# atq               //查看準備執行的任務列表
2	Tue Nov 12 21:00:00 2019 a root 
[root@localhost ~]# atrm 2         //刪除第2條at計劃任務
[root@localhost ~]# atq              //確認第2條任務已被刪除

crontab命令

按照預先設置的時間週期(分鐘、時、日、月、周)重複執行用戶指定的命令操作

屬於週期性計劃任務

主要設置文件和目錄:
全局配置文件,位於文件:/etc/crontab
系統默認的設置,位於目錄:/etc/cron.*/
用戶定義的設置,位於文件:/var/spool/cron/用戶名

crontab的配置文件和目錄

1)/etc/crontab ——系統任務配置文件

/etc/crontab文件中設置的是維護Linux系統所需的任務,由Linux系統及相關程序在安裝時自動設置,不建議用戶手動修改此文件。例如,該文件中包括了設置Shell環境、可執行路徑等變量的操作,以及每小時、每天、每週、每月需要執行的任務目錄。

[root@localhost ~]# cat /etc/crontab
SHELL=/bin/bash                           //設置執行計劃任務的Shell環境
PATH=/sbin:/bin:/usr/sbin:/usr/bin        //定義可只能怪命令及程序的路徑
MAILTO=root                           //將任務輸出信息發送到指定用戶的郵箱

# For details see man 4 crontabs

# Example of job definition:
# .---------------- 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

//根據“/etc/crontab”配置文件中的設定,crond將按照不同的週期重複執行相應目錄中的任務腳本文件

2)/etc/cron.*/ ——系統默認設置cron任務的配置文件存放目錄

3)/var/spool/cron/ ——用戶cron任務的配置文件存放目錄

由用戶自行設置(使用crontab命令)的cron計劃任務將被保存到目錄/var/spool/cron/中。當用戶使用crontab命令創建計劃任務,就會在/var/spool/cron/目錄下生成一個與用戶名相同的文件。例如,root用戶的cron計劃任務保存在配置文件/var/spool/cron/root中。

[root@localhost ~]# ls -l /var/spool/cron/*
-rw-------. 1 root root 44 11月 12 20:12 /var/spool/cron/root

crond守護進程會自動檢查/etc/crontab文件、/etc/cron.*/目錄及/var/spool/cron/ 目錄中的改變,如果發現有配置更改,他們就會被載入內存,所以當某個crontab文件改變後並不需要重新啓動crond守護進程就可以使設置生效

週期性計劃任務配置

在這裏插入圖片描述
分時日月周

時間數值的特殊表示方法:
“ * ”:表示該範圍內的任意時間
逗號“,”:表示間隔的多個不連續時間點,如“3,4, 6, 8”
減號“ - ”:表示一個連續的時間範圍,如“1-4"表示整數1、2、3、4。
斜槓“ / ”: 指定間隔的時間頻率,如在日期字段中的“ */3 ”表示每隔3天。
示例:

0  17  *  *  1-5             週一到週五每天17:00
 
 0  8  *  *  1,3,5            每週一、三、五的8點30分

0  8-18/2  *  *  *            8點到18點之間每2小時  

  0  *  */3  *  *             每3天

示例:
若要按固定的週期重複完成一些系統管理任務,任務內容如下:①每天早上7:50自動開啓sshd服務,22:50關閉sshd服務;②每隔五天清空一次FTP服務器公共目錄“/var/ftp/pub”中的數據;③每週六的7:30重新啓動系統中的httpd服務;④ 每週一、週三、週五的下午17:30,使用tar命令自動備份“/etc/httpd”目錄。以上任務可由root用戶通過crontab設置以下計劃完成。

[root@kgc 〜]# crontab -e
50 7 * * * /sbin/service sshd start
50 22 * * * /sbin/service sshd stop
0 0 */5 * * /bin/nn -rf/var/ftp/pub/*
30 7 * * 6 /sbin/service httpd restart
30 17 * * 1,3,5 /bin/tar jcf httpdconf.tar.bz2 /etc/httpd/

管理cron計劃任務

-u 指定用戶

crontab -e  [-u 用戶名]  ###編輯計劃任務
crontab -l  [-u 用戶名]  ###查看計劃任務
crontab -r  [-u 用戶名]  ###刪除計劃任務
[root@localhost ~]# crontab -e       //編輯計劃任務進入編輯頁面
no crontab for root - using an empty one
crontab: installing new crontab
[root@localhost ~]# crontab -l      //輸入完成wq保存,查看計劃任務
15 20 12 11 * /usr/bin/cp -r /home/ml /opt/
[root@localhost ~]# ls /home
ml
[root@localhost ~]# ls /opt         //查看opt目錄下 ml家目錄已經複製了
123.txt  ml  Packages  rh

[root@localhost ~]# crontab -r      //清空計劃任務

在設置crontab計劃任務過程中,每一條記錄只能運行一條命令,當只需要刪除某一條計劃任務時,可以通過“crontab -e”進行編輯,刪除;而若要清空所有的計劃任務時,可以使用“crontab -r”命令。

總結

●查看進程的命令(ps、top、pgrep、pstree)

●進程控制

啓動進程
調度進程(Ctrl+Z組合鍵、jobs、bg、fg)
終止進程(kill、killall、pkill)

●at命令設置一次性計劃任務

●crontab命令可以設置週期性計劃任務

●crontab計劃任務的配置字段,依次爲分鐘、小時、日期、月份、星期

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章