一:程序,進程,線程之間的關係
1.1:進程概述:
進程(Process)是計算機中的程序關於某數據集合上的一次運行活動,是系統進行資源分配和調度的基本單位,是操作系統結構的基礎。在早期面向進程設計的計算機結構中,進程是程序的基本執行實體;在當代面向線程設計的計算機結構中,進程是線程的容器。程序是指令、數據及其組織形式的描述,進程是程序的實體。
二:查看進程:
ps命令,查看靜態的進程統計信息(Processes Statistic):
ps命令基本格式
ps [選項] 注意:有一些選項時不帶“-”前綴的(添加“-”前綴後含義可能會有出入)
a 顯示當前終端下的所有進程信息,包括其他用戶的進程、與“x”選項結合時將顯示系統中所有的進程信息
u 使用以用戶爲主的格式輸出進程信息
x 顯示當前用戶在所有終端下的進程信息
-e 顯示系統內的所有進程信息
-l 使用長(Long)格式顯示進程信息
-f 使用完整的(Full)格式顯示進程信息
ps aux命令 以簡單列表的形式顯示出進程信息:
[root@localhost ~]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.2 0.3 193700 6836 ? Ss 22:38 0:01 /usr/lib/systemd/syst
root 2 0.0 0.0 0 0 ? S 22:38 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 22:38 0:00 [ksoftirqd/0]
root 4 0.0 0.0 0 0 ? S 22:38 0:00 [kworker/0:0]
root 5 0.0 0.0 0 0 ? S< 22:38 0:00 [kworker/0:0H]
root 7 0.0 0.0 0 0 ? S 22:38 0:00 [migration/0]
root 8 0.0 0.0 0 0 ? S 22:38 0:00 [rcu_bh]
..以下省略部分內容
ps -elf 命令:以長格式顯示系統中的進程信息:
[root@localhost ~]# ps -elf
F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
4 S root 1 0 0 80 0 - 32041 ep_pol 23:04 ? 00:00:00 /usr/l
1 S root 2 0 0 80 0 - 0 kthrea 23:04 ? 00:00:00 [kthre
1 S root 3 2 0 80 0 - 0 smpboo 23:04 ? 00:00:00 [ksoft
1 S root 4 2 0 80 0 - 0 worker 23:04 ? 00:00:00 [kwork
1 S root 5 2 0 60 -20 - 0 worker 23:04 ? 00:00:00 [kwork
1 S root 6 2 0 80 0 - 0 worker 23:04 ? 00:00:00 [kwork
1 S root 7 2 0 -40 - - 0 smpboo 23:04 ? 00:00:00 [migra
1 S root 8 2 0 80 0 - 0 rcu_gp 23:04 ? 00:00:00 [rcu_b
1 R root 9 2 0 80 0 - 0 - 23:04 ? 00:00:00 [rcu_s
..此處省略部分信息
ps aux | grep "bash"命令:
[root@localhost ~]# ps aux | grep "bash"
root 655 0.0 0.0 115256 924 ? S 23:04 0:00 /bin/bash /usr/sbin/ksmtuned
root 1791 0.0 0.0 51332 580 ? Ss 23:05 0:00 /usr/bin/ssh-agent /bin/sh -c exec -l /bin/bash -c "env GNOME_SHELL_SESSION_MODE=classic gnome-session --session gnome-classic"
root 2422 0.0 0.1 116300 2864 pts/0 Ss+ 23:05 0:00 bash
root 2482 0.0 0.1 116044 2776 pts/1 Ss 23:06 0:00 -bash
root 2536 0.0 0.0 112680 984 pts/1 S+ 23:07 0:00 grep --color=auto bash
動態查看 top命令:
top - 23:17:10 up 12 min, 3 users, load average: 0.00, 0.04, 0.06
Tasks: 185 total, 1 running, 184 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni, 99.7 id, 0.3 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 1867024 total, 670880 free, 669584 used, 526560 buff/cache
KiB Swap: 4194300 total, 4194300 free, 0 used. 986308 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1833 root 20 0 1624108 168500 51624 S 0.0 9.0 0:02.26 gnome-shell
1983 root 20 0 1100816 63532 20704 S 0.0 3.4 0:00.10 evolution-cal+
2083 root 20 0 1202856 59344 19216 S 0.0 3.2 0:00.08 evolution-cal+
2040 root 20 0 1040248 59132 19108 S 0.0 3.2 0:00.06 evolution-cal+
1994 root 20 0 884268 32724 14160 S 0.0 1.8 0:00.31 gnome-software
1392 root 20 0 288368 30804 10276 S 0.0 1.6 0:00.40 X
1965 root 20 0 1026108 30296 18916 S 0.0 1.6 0:00.20 nautilus-desk+
查看進程信息 pgrep 和 pstree:
“-l”選項顯示進程名
[root@localhost ~]# pgrep -l "log" '//查詢進程名中包含“log”的進程及其PID號'
282 xfs-log/sda2
444 xfs-log/sda5
445 xfs-log/sda1
555 systemd-logind
561 abrt-watch-log
580 abrt-watch-log
597 rsyslogd
640 mcelog
pstree命令:
[root@localhost ~]# pstree -aup '//查看當前系統的進程樹(包括各進程對應的PID號,用戶名,完整命令等信息)'
systemd,1 --switched-root --system --deserialize 21
├─ModemManager,601
│ ├─{ModemManager},631
│ └─{ModemManager},635
├─NetworkManager,667 --no-daemon
│ ├─dhclient,791 -d -q -sf /usr/libexec/nm-dhcp-helper -pf...
│ ├─{NetworkManager},676
│ └─{NetworkManager},678
..省略部分信息
三:控制進程:
手工啓動:
[root@localhost ~]# cp /dev/cdrom mycd.iso& '//在後臺運行復制鏡像文件進程'
[1] 3227 '//輸出信息中心包括後臺任務序號,PID號'
改變進程的運行方式:
掛起當前進程 Ctrl+Z 組合鍵:
將當前進程掛起,即調入後臺並停止執行(對於速度緩慢,會耽誤其他操作的進程使用
查看後臺進程 jobs 命令:
查看處於後臺的任務列表。
結合“-l”選項可以同時顯示出該進程對應的PID號
輸出結果中,每一行記錄對應一個後臺進程的狀態信息,行首的數字代表該進程在後臺的任務編號。
若當前終端沒有後臺進程,將不會顯示任何信息
將後臺的進程恢復運行 fg 命令:
將後臺進程恢復到前臺運行,可以指定任務序號
bg(BackGround)命令可以將後臺中暫停執行的任務恢復運行,繼續在後臺執行操作
fg(ForeGround)命令可以將後臺任務恢復到前臺運行
除非後臺任務只有一個,否則bg和fg命令都需要指定後臺進程的任務編號作爲參數
at一次性任務設置:
at命令使用順序
查看時間–>設置時間–>輸入命令–>Ctrl + D提交任務
date:查看當前時間。設置任務,時間不可在當前時間之前
命令輸入完成後按 Ctrl + D組合鍵提交任務即可
[root@localhost ~]# date '//查看當前時間'
2019年 11月 13日 星期三 00:45:58 CST
[root@localhost ~]# at 00:48 2019-11-13 '//設置任務執行時間'
at> pgrep -U root |wc -l > /tmp/ps.root '//輸入命令(統計該時間點系統中由root用戶運行的進程數量,並將數值保存到/tmp/ps.root文件中)'
at> <EOT> '//按Ctrl + D組合鍵提交任務'
job 1 at Wed Nov 13 00:48:00 2019
[root@localhost ~]# cat /tmp/ps.root '//查看任務完成情況'
175
crontab週期性任務設置:
5.1.1: /etc/crontab 全局配置文件
全局配置文件
/etc/crontab 文件中設置的是維護Linux系統所需的任務
Linux系統及相關程序在安裝時自動設置
不建議用戶手動修改此文
[root@localhost ~]# cat /etc/crontab '//查看系統任務配置文件'
SHELL=/bin/bash '//設置執行計劃任務的Shell環境'
PATH=/sbin:/bin:/usr/sbin:/usr/bin '//定義可執行命令及程序的路徑'
MAILTO=root '//將任務輸出信息發送到指定用戶的郵箱'
HOME=/ '//執行計劃任務時使用的主目錄'
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59) '//分鐘範圍:0-59'
# | .------------- hour (0 - 23) '//小時範圍:0-23'
# | | .---------- day of month (1 - 31) '//一個月的天數範圍:1-31'
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ... '//月數範圍:1-12'
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat '//一週的天數範圍: 0-6(週日用0或者7表示)'
# | | | | |
# * * * * * user-name command to be executed
本章實驗:
一、使用kill命令終止postfix服務的運行:
二、查找系統中CPU佔用率超過80%的進程,並強行終止該進程:
有超過80%的用“kill-9+進程號”即可刪除》
三、每週一早上7:50自動清空FTP服務器“/var/ftp/pub”中數據:
四、每天晚上的10:30自動執行任務,完成以下操作
顯示當前的系統時間並查看已掛載磁盤分區的磁盤使用情況
將輸出結果追加到文件/var/log/df.log中,持續觀察硬盤空間變