Linux 環境下進程和計劃任務管理

這是我參與 8 月更文挑戰的第 7 天,活動詳情查看: 8月更文挑戰shell

一名致力於在技術道路上的終身學習者、實踐者、分享者,一位忙起來又偶爾偷懶的原創博主,一個偶爾無聊又偶爾幽默的少年。數據庫

歡迎各位掘友們微信搜索「傑哥的IT之旅」關注!vim

原文連接:Linux環境下進程和計劃任務管理api

前言

程序時保存在外部存儲介質(如硬盤)中的可執行機器代碼和數據的靜態集合,而進程實在CPU及內存中處於動態執行狀態的計算機程序。在Linux系統中,每一個程序啓動後能夠建立一個或多個進程。緩存

1、ps命令——查看靜態的進程統計信息

ps命令是Linux系統中最爲經常使用的進程查看工具,主要用於顯示包含當前運行的各進行完整信息的靜態快照。經過不一樣的命令選項,能夠選擇性的查看進程信息。bash

  • a:顯示當前終端下的全部進程信息,包括其餘用戶的進程。與「x」選項結合時將顯示系統中全部的進程信息。
  • u:使用以用戶爲主的格式輸出進程信息。
  • x:顯示當前用戶在全部終端下的進程信息。
  • -e:顯示系統內的全部進程信息。
  • -l:使用長格式顯示進程信息。
  • -f:使用完整的格式顯示進程信息。

執行「ps aux」命令後,將以簡單列表的形式顯示出進程信息。微信

下述輸出信息中,第1行爲列表標題,其中各字段的含義描述以下:markdown

  • USER:啓動該進程的用戶帳號的名稱。
  • PID:該進程在系統中的數字ID號,在當前系統中是惟一的。
  • %CPU:CPU佔用的百分比。
  • %MEM:內存佔用的百分比。
  • VSZ:佔用虛擬內存swap空間的大小。
  • RSS:佔用常駐內存物理內存的大小。
  • TTY:代表該進程在哪一個終端上運行。「?」表示未知或不須要終端。
  • STAT:顯示了進程當前的狀態,S:休眠、R:運行、Z:僵死、<:高優先級、N:低優先級、s:父進程、+:前臺進程。
  • START:啓動該進程的時間。
  • TIME:該進程佔用的CPU時間。
  • COMMAND:啓動該進程的命令的名稱。
[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
複製代碼

2、top命令——查看進程動態信息

top命令將會在當前終端以全屏交互式的界面顯示進程排名,及時跟蹤包括CPU、內存等系統資源佔用狀況,默認狀況下每三秒刷新一次。

圖片

上述輸出信息中,開頭的部分顯示了系統任務Tasks、CPU佔用、內存佔用Mem、交換空間Swap等信息,下方將依次顯示當前進程的排名狀況。

  • 系統任務Tasks信息:total:總進程數;running:正在運行的進程數;sleeping:休眠的進程數;stopped:停止的進程數;zomibe:僵死無響應的進程數。
  • CPU佔用信息:us:用戶佔用;sy:內核佔用;ni:優先級調度佔用;id:空閒CPU;wa:I/O等待佔用;hi:硬件中斷佔用;si:軟件中斷佔用;st:虛擬化佔用。Rt:實時變化。
  • 內存佔用Mem信息:total,總內存空間;used,已用內存;free,空閒內存;buffers,緩衝區域。
  • 交換空間swap佔用:total,總交換空間;used,已用交換空間;free,空閒交換空間;cached,緩存空間。

在top命令的全屏操做界面中,能夠按P鍵根據CPU佔用狀況對進程列表進行排序,或按M鍵根據內存佔用狀況進行排序,按N鍵根據啓動時間進行排序,按h鍵能夠得到top程序的在線幫助信息,按q鍵能夠正常退出top程序。

3、pgrep命令——查詢進程信息

pgrep命令正是用來查詢特定進程信息的專用工具。使用pgrep命令能夠根據進程的名稱、運行該進程的用戶、進程所在的終端等多種屬性查詢特定進程的PID號。

經過pgrep命令,能夠只指定進程的一部分名稱進行查詢,結合「-l」選項可同時輸出對應的進程名、「-U」選項查詢特定用戶的進程、「-t」選項查詢在特定終端運行的進程。

[root@localhost ~]# pgrep -l "log"
1180 rsyslogd
複製代碼

4、pstree命令——查詢進程樹

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
複製代碼

5、at一次性任務設置

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
複製代碼

6、crontab週期性任務設置

使用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命令進行,結合不一樣的選項能夠完成不一樣的計劃任務管理操做。

  • -e:編輯計劃任務列表。
  • -u:指定所管理的計劃任務屬於哪一個用戶,默認時針對當前用戶,通常只有root用戶有權限使用此選項用戶編輯、刪除其餘用戶的計劃任務。
  • -l:列表顯示計劃任務。
  • -r:刪除計劃任務列表。

當使用「*」時表示取值範圍中的任意時間。crontab任務配置記錄中所設置的命令操做將在「分鐘」+「小時」+「日期」+「月份」+「星期」都知足的條件下執行。

image.png

除了「*」之外,還能夠用減號「-」、逗號「,」、斜槓「/」與數字構成表達式來表示較複雜的時間關係。

「-」:表示一個連續的時間範圍

「,」:表示一個間隔的不連續範圍

「/」:表示指定間隔頻率,例如*/5表示每隔五天。

image.png

「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
複製代碼

推薦閱讀

99%的Linux運維工程師必需要掌握的命令及運用

Linux 環境下 Oracle 數據庫經常使用命令

Linux 環境下 vi/vim 編輯器經常使用命令

Linux環境下安裝及管理程序(軟件包封裝、RPM命令、源代碼編譯安裝的基本過程)

Linux 環境下帳號和權限管理

Linux 磁盤和文件系統管理

本文完。


原創不易,若是你以爲這篇文章對你有點用的話,麻煩你爲本文點個贊、評論或轉發一下,由於這將是我輸出更多優質文章的動力,感謝!

對了,掘友們記得給我點個免費的關注喲!防止你迷路下次就找不到我了。

咱們下期再見!

相關文章
相關標籤/搜索