點擊藍色目錄查找對應內容
程序、進程、線程概述
程序:港、臺譯做電腦程式。計算機程序是一組計算機能識別和執行的指令,運行於電子計算機上,滿足人們某種需求的信息化工具。
進程:是計算機中的程序關於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計劃任務的配置字段,依次爲分鐘、小時、日期、月份、星期