這是我參與 8 月更文挑戰的第 7 天,活動詳情查看: 8月更文挑戰shell
一名致力於在技術道路上的終身學習者、實踐者、分享者,一位忙起來又偶爾偷懶的原創博主,一個偶爾無聊又偶爾幽默的少年。數據庫
歡迎各位掘友們微信搜索「傑哥的IT之旅」關注!vim
原文連接:Linux環境下進程和計劃任務管理api
程序時保存在外部存儲介質(如硬盤)中的可執行機器代碼和數據的靜態集合,而進程實在CPU及內存中處於動態執行狀態的計算機程序。在Linux系統中,每一個程序啓動後能夠建立一個或多個進程。緩存
ps命令是Linux系統中最爲經常使用的進程查看工具,主要用於顯示包含當前運行的各進行完整信息的靜態快照。經過不一樣的命令選項,能夠選擇性的查看進程信息。bash
執行「ps aux」命令後,將以簡單列表的形式顯示出進程信息。微信
下述輸出信息中,第1行爲列表標題,其中各字段的含義描述以下:markdown
[root@localhost ~]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.1 0.1 19364 1540 ? Ss 12:19 0:01 /sbin/init
root 2 0.0 0.0 0 0 ? S 12:19 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 12:19 0:00 [migration/0]
root 4 0.0 0.0 0 0 ? S 12:19 0:00 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S 12:19 0:00 [migration/0]
root 6 0.0 0.0 0 0 ? S 12:19 0:00 [watchdog/0]
root 7 0.0 0.0 0 0 ? S 12:19 0:00 [migration/1]
root 8 0.0 0.0 0 0 ? S 12:19 0:00 [migration/1]
root 9 0.0 0.0 0 0 ? S 12:19 0:00 [ksoftirqd/1]
root 10 0.0 0.0 0 0 ? S 12:19 0:00 [watchdog/1]
root 11 0.0 0.0 0 0 ? S 12:19 0:00 [events/0]
root 12 0.0 0.0 0 0 ? S 12:19 0:00 [events/1]
root 13 0.0 0.0 0 0 ? S 12:19 0:00 [cgroup]
root 14 0.0 0.0 0 0 ? S 12:19 0:00 [khelper]
root 15 0.0 0.0 0 0 ? S 12:19 0:00 [netns]
root 16 0.0 0.0 0 0 ? S 12:19 0:00 [async/mgr]
root 17 0.0 0.0 0 0 ? S 12:19 0:00 [pm]
root 18 0.0 0.0 0 0 ? S 12:19 0:00 [sync_supers]
root 19 0.0 0.0 0 0 ? S 12:19 0:00 [bdi-default]
root 20 0.0 0.0 0 0 ? S 12:19 0:00 [kintegrityd/0]
root 21 0.0 0.0 0 0 ? S 12:19 0:00 [kintegrityd/1]
複製代碼
若執行「ps -elf」命令,則將以長格式顯示系統中的進程信息,而且顯示內容較多。輸出信息中還包括PPID列(表示對應進程的父進程的PID號)。app
[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 - 4841 poll_s 12:19 ? 00:00:01 /sbin/init
1 S root 2 0 0 80 0 - 0 kthrea 12:19 ? 00:00:00 [kthreadd]
1 S root 3 2 0 -40 - - 0 migrat 12:19 ? 00:00:00 [migration/0]
1 S root 4 2 0 80 0 - 0 ksofti 12:19 ? 00:00:00 [ksoftirqd/0]
1 S root 5 2 0 -40 - - 0 cpu_st 12:19 ? 00:00:00 [migration/0]
5 S root 6 2 0 -40 - - 0 watchd 12:19 ? 00:00:00 [watchdog/0]
1 S root 7 2 0 -40 - - 0 migrat 12:19 ? 00:00:00 [migration/1]
1 S root 8 2 0 -40 - - 0 cpu_st 12:19 ? 00:00:00 [migration/1]
1 S root 9 2 0 80 0 - 0 ksofti 12:19 ? 00:00:00 [ksoftirqd/1]
5 S root 10 2 0 -40 - - 0 watchd 12:19 ? 00:00:00 [watchdog/1]
複製代碼
直接執行不帶任何選項的ps命令時,將只顯示當前用戶會話中打開的進程。運維
[root@localhost ~]# ps
PID TTY TIME CMD
2258 pts/1 00:00:00 bash
2280 pts/1 00:00:00 bash
2369 pts/1 00:00:00 ps
複製代碼
因爲系統中運行的進程數量較多。須要查詢某一個進程的信息時能夠結合管道操做和grep命令進行過濾。
[root@localhost ~]# ps aux | grep bash
root 2239 0.0 0.1 108336 1772 pts/0 Ss+ 12:22 0:00 /bin/bash
root 2258 0.0 0.1 108336 1812 pts/1 Ss 12:23 0:00 -bash
root 2280 0.0 0.1 108336 1764 pts/1 S 12:23 0:00 bash
root 2753 0.0 0.0 103256 848 pts/1 S+ 13:41 0:00 grep bash
複製代碼
top命令將會在當前終端以全屏交互式的界面顯示進程排名,及時跟蹤包括CPU、內存等系統資源佔用狀況,默認狀況下每三秒刷新一次。
上述輸出信息中,開頭的部分顯示了系統任務Tasks、CPU佔用、內存佔用Mem、交換空間Swap等信息,下方將依次顯示當前進程的排名狀況。
在top命令的全屏操做界面中,能夠按P鍵根據CPU佔用狀況對進程列表進行排序,或按M鍵根據內存佔用狀況進行排序,按N鍵根據啓動時間進行排序,按h鍵能夠得到top程序的在線幫助信息,按q鍵能夠正常退出top程序。
pgrep命令正是用來查詢特定進程信息的專用工具。使用pgrep命令能夠根據進程的名稱、運行該進程的用戶、進程所在的終端等多種屬性查詢特定進程的PID號。
經過pgrep命令,能夠只指定進程的一部分名稱進行查詢,結合「-l」選項可同時輸出對應的進程名、「-U」選項查詢特定用戶的進程、「-t」選項查詢在特定終端運行的進程。
[root@localhost ~]# pgrep -l "log"
1180 rsyslogd
複製代碼
pstree命令能夠輸出Linux系統中各進程的樹形結構,判斷出各進程之間的相互關係(父、子進程)。pstree命令默認狀況下只顯示各進程的名稱,「-p」選項使用時能夠同時列出對應的PID號、「-u」選項能夠列出對應的用戶名、「-a」選項能夠列出完整的命令信息。
執行「pstree -aup」命令能夠查看當前系統的進程樹,包括各進程對應的PID號、用戶名、完整命令等信息。
[root@localhost ~]# pstree -aup
init,1
├─NetworkManager,1249 --pid-file=/var/run/NetworkManager/NetworkManager.pid
│ ├─dhclient,2909 -d -4 -sf /usr/libexec/nm-dhcp-client.action -pf /var/run/dhclient-eth1.pid -lf...
│ └─{NetworkManager},1300
├─abrtd,1570
├─acpid,1328
├─atd,1589
├─auditd,1155
│ └─{auditd},1156
├─automount,1411 --pid-file /var/run/autofs.pid
│ ├─{automount},1412
│ ├─{automount},1413
│ ├─{automount},1417
│ └─{automount},1420
├─bonobo-activati,1945 --ac-activate --ior-output-fd=18
│ └─{bonobo-activat},1946
├─certmonger,1601 -S -p /var/run/certmonger.pid
├─clock-applet,2192 --oaf-activate-iid=OAFIID:GNOME_ClockApplet_Factory --oaf-ior-fd=34
├─console-kit-dae,1672 --no-daemon
│ ├─{console-kit-da},1673
│ ├─{console-kit-da},1674
│ ├─{console-kit-da},1675
│ ├─{console-kit-da},1676
複製代碼
at命令設置的計劃任務只在指定的時間點執行一次,前提是對應的系統服務atd必須已經運行。須要注意的是,計劃執行任務的時間、日期必須安排在當前系統的時刻以後,不然將沒法正確設置計劃任務。
設置一次性計劃任務時,在at命令行中依次指定計劃執行任務的時間、日期做爲參數(若只指定時間則表示當天的該時間,若只指定日期則表示該日期的當前時間),確認後將進入帶「at>」提示符的任務編輯界面,每行設置一條執行命令,能夠依次設置多條語句,最後按Ctrl+D組合鍵提交任務便可。所設置的命令操做將在計劃的時間點被依次執行。
[root@localhost ~]# date
2016年 06月 17日 星期五 15:01:40 CST
[root@localhost ~]# at 15:05 2016-06-17
at> cat /proc/cpuinfo > /tmp/ps.root
at> <EOT>
job 2 at 2016-06-17 15:05
[root@localhost ~]# cat /tmp/ps.root
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 61
model name : Intel(R) Core(TM) i5-5200U CPU @ 2.20GHz
stepping : 4
cpu MHz : 2194.915
cache size : 3072 KB
fpu : yes
fpu_exception : yes
cpuid level : 20
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon xtopology tsc_reliable nonstop_tsc unfair_spinlock pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm 3dnowprefetch arat fsgsbase smep
bogomips : 4389.83
clflush size : 64
cache_alignment : 64
address sizes : 40 bits physical, 48 bits virtual
power management:
processor : 1
vendor_id : GenuineIntel
cpu family : 6
model : 61
model name : Intel(R) Core(TM) i5-5200U CPU @ 2.20GHz
stepping : 4
cpu MHz : 2194.915
cache size : 3072 KB
fpu : yes
fpu_exception : yes
cpuid level : 20
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon xtopology tsc_reliable nonstop_tsc unfair_spinlock pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm 3dnowprefetch arat fsgsbase smep
bogomips : 4389.83
clflush size : 64
cache_alignment : 64
address sizes : 40 bits physical, 48 bits virtual
power management:
You have mail in /var/spool/mail/root
複製代碼
在當天的15:10時自動關閉當前系統。
[root@localhost ~]# at 15:10
at> cat /proc/cpuinfo
at> <EOT>
job 3 at 2016-06-17 15:10
複製代碼
對於已經設置但還未執行的計劃任務,能夠經過atq命令進行查詢。
[root@localhost ~]# atq
3 2016-06-17 15:10 a root
複製代碼
若要刪除指定編號的at任務,能夠執行atrm命令。刪除後的at任務將不會被執行,而且不會顯示在atq命令的顯示結果中。但已經執行過的任務沒法刪除。
[root@localhost ~]# at 15:16
at> cat /proc/cpuinfo
at> <EOT>
job 4 at 2016-06-17 15:16
[root@localhost ~]# atrm 4
[root@localhost ~]# atq
複製代碼
使用crontab命令設置的計劃任務能夠按預設的週期重複執行,能夠大大減輕設置重複性系統管理任務的操做。啓用週期性任務也有一個的前提條件,即對應的系統服務crond必須已經運行。
crontab的配置文件和目錄
crond經過多個目錄和文件設置計劃任務,不一樣類型的任務由不一樣的配置文件來設置。
/etc/crontab文件中設置的是維護Linux系統所需的任務,由Linux系統及相關程序在安裝時自動設置,不建議用戶手動修改此文件。該文件包括了設置shell環境、可執行路徑等變量的操做,以及每小時、天天、每週、每個月須要執行的任務目錄。
[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)分鐘
# | .------------- 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
複製代碼
/var/spool/cron——用戶cron任務的配置文件存放目錄
由用戶自行設置的cron計劃任務將被保存到目錄/var/spool/cron/中,文件名與用戶名相同。
[root@localhost ~]# ls -l /var/spool/cron/
總用量 0
複製代碼
crond守護進程會自動檢查/etc/crontab文件、/etc/cron.d/目錄及/var/spool/cron目錄中的改變,若是發現有配置更改,就會被載入內存,因此當某個crontab文件改變後並不須要從新啓動crond守護進程就可使設置生效。
使用crontab命令管理用戶的計劃任務
設置用戶的週期性計劃任務列表主要經過crontab命令進行,結合不一樣的選項能夠完成不一樣的計劃任務管理操做。
當使用「*」時表示取值範圍中的任意時間。crontab任務配置記錄中所設置的命令操做將在「分鐘」+「小時」+「日期」+「月份」+「星期」都知足的條件下執行。
除了「*」之外,還能夠用減號「-」、逗號「,」、斜槓「/」與數字構成表達式來表示較複雜的時間關係。
「-」:表示一個連續的時間範圍
「,」:表示一個間隔的不連續範圍
「/」:表示指定間隔頻率,例如*/5表示每隔五天。
「crontab -e」命令:能夠設置本身的計劃任務。
[root@localhost ~]# crontab -e
01 * * * * /sbin/service httpd start
02 * * * * /sbin/service httpd stop
複製代碼
「crontab -l」命令:能夠查看當前用戶的計劃任務列表。(-u:能夠查看其它用戶的計劃任務)
[root@localhost ~]# crontab -l
01 * * * * /sbin/service httpd start
02 * * * * /sbin/service httpd stop
複製代碼
「crontab -r」命令:能夠刪除用戶的計劃任務列表。
[root@localhost ~]# crontab -r
[root@localhost ~]# crontab -l
no crontab for root
複製代碼
Linux環境下安裝及管理程序(軟件包封裝、RPM命令、源代碼編譯安裝的基本過程)
本文完。
原創不易,若是你以爲這篇文章對你有點用的話,麻煩你爲本文點個贊、評論或轉發一下,由於這將是我輸出更多優質文章的動力,感謝!
對了,掘友們記得給我點個免費的關注喲!防止你迷路下次就找不到我了。
咱們下期再見!