查看進程
在Linux系統中,有多個命令可以用來查看進程
以下是一些常用的命令:
ps命令:用于查看當前系統中的進程狀態。
?基本用法:ps -ef,該命令會以完整格式顯示所有進程的詳細信息,包括用戶ID、進程ID、父進程ID、啟動時間、命令等。例如:
```
UID ? ? ? ?PID ?PPID ?C STIME TTY ? ? ? ? ?TIME CMD
root ? ? ? ? 1 ? ? 0 ?0 Mar10 ? ? ? ? ?00:00:02 /sbin/init
root ? ? ? ? 2 ? ? 0 ?0 Mar10 ? ? ? ? ?00:00:00 [kthreadd]
root ? ? ? ? 3 ? ? 2 ?0 Mar10 ? ? ? ? ?00:00:00 [rcu_gp]
```
常用選項:
`ps`命令是Linux系統中用于查看進程狀態的常用工具,它有許多選項,以下是一些常見選項的詳細解釋:
-a功能:顯示所有終端上的進程,包括與終端無關的進程。
-u功能:以用戶為中心的格式顯示進程信息,提供更詳細的用戶相關信息,如用戶名、啟動時間、CPU和內存使用百分比等。
??
-x功能:顯示沒有控制終端的進程,常與`-a`或`-u`等選項結合使用,以查看更全面的進程列表。
? ?
-e功能:顯示所有進程,等同于`-a -x`的組合效果,會列出系統中的所有進程,包括內核線程等。
??
-f功能:以完整格式顯示進程信息,提供更詳細的進程相關字段,如父進程ID(PPID)、進程啟動命令等。
? ??
-l功能:以長格式顯示進程信息,提供更多關于進程的詳細狀態信息,如進程的優先級(PRI)、nice值等。
-f:顯示完整格式的進程信息。
-u:以用戶為主的格式顯示進程信息,會顯示進程的所有者、啟動時間、CPU和內存使用情況。
-x:顯示所有進程,包括沒有控制終端的進程。
top命令:實時動態地查看系統中各個進程的資源占用情況,是一個非常實用的性能分析工具。
基本用法:直接輸入`top`命令即可進入交互界面,界面中會實時更新進程的相關信息,包括CPU使用率、內存使用率、進程狀態等。
?常用操作鍵
? ? ? ? - M:按照內存使用量對進程進行排序。
? ? ? ? - P:按照CPU使用率對進程進行排序。
? ? ? ? - T:按照累計執行時間對進程進行排序。
? ? ? ? - q:退出`top`命令。
htop命令:htop是top命令的增強版,提供了更友好的界面和更豐富的功能。
?基本用法:直接輸入`htop`命令即可啟動。它的界面類似于`top`,但可以更方便地查看和操作進程。例如,它支持鼠標操作,并且可以直接在界面中對進程進行殺除等操作。
?- 常用功能:
? ? ? ? - 可以通過方向鍵在進程列表中移動光標,選擇不同的進程。
? ? ? ? - 按下`F9`鍵可以向選中的進程發送信號,例如SIGKILL(強制終止進程)等。
? ? ? ? - 按下`F2`鍵可以進入設置界面,對htop的顯示格式、排序方式等進行自定義設置。
pgrep命令通過pgrep能對指定進程信息,
如下為示例:
[root@localhost ~]# pgrep ? ?-l ? ? "log"
357 xfs-log/sda3
609 xfs-log/sda1
712 systemd-logind
720 abrt-watch-log
721 abrt-watch-log
1091 rsyslogd
[3]- ?Killed ? ? ? ? ? ? ? ? ?vim aaa
[4]+ ?Killed ? ? ? ? ? ? ? ? ?vim xxx
pstree
[root@localhost ~]# pstree
下面為結果示例
systemd─┬─ModemManager───2*[{ModemManager}]
? ? ? ? ├─NetworkManager─┬─dhclient
? ? ? ? │ ? ? ? ? ? ? ? ?└─2*[{NetworkManager}]
? ? ? ? ├─VGAuthService
? ? ? ? ├─2*[abrt-watch-log]
? ? ? ? ├─abrtd
? ? ? ? ├─accounts-daemon───2*[{accounts-daemon}]
? ? ? ? ├─alsactl
? ? ? ? ├─at-spi-bus-laun─┬─dbus-daemon───{dbus-daemon}
? ? ? ? │ ? ? ? ? ? ? ? ? └─3*[{at-spi-bus-laun}]
? ? ? ? ├─at-spi2-registr───2*[{at-spi2-registr}]
? ? ? ? ├─atd
? ? ? ? ├─auditd─┬─audispd─┬─sedispatch
? ? ? ? │ ? ? ? ?│ ? ? ? ? └─{audispd}
? ? ? ? │ ? ? ? ?└─{auditd}
? ? ? ? ├─avahi-daemon───avahi-daemon
? ? ? ? ├─boltd───2*[{boltd}]
? ? ? ? ├─chronyd
? ? ? ? ├─colord───2*[{colord}]
? ? ? ? ├─crond
? ? ? ? ├─cupsd
? ? ? ? ├─2*[dbus-daemon───{dbus-daemon}]
? ? ? ? ├─dbus-launch
? ? ? ? ├─dconf-service───2*[{dconf-service}]
? ? ? ? ├─dnsmasq───dnsmasq
? ? ? ? ├─evolution-addre─┬─evolution-addre───5*[{evolution-addre}]
? ? ? ? │ ? ? ? ? ? ? ? ? └─4*[{evolution-addre}]
? ? ? ? ├─evolution-calen─┬─evolution-calen───8*[{evolution-calen}]
? ? ? ? │ ? ? ? ? ? ? ? ? └─4*[{evolution-calen}]
? ? ? ? ├─evolution-sourc───3*[{evolution-sourc}]
? ? ? ? ├─fwupd───4*[{fwupd}]
? ? ? ? ├─gconfd-2
? ? ? ? ├─gdm─┬─X───9*[{X}]
? ? ? ? │ ? ? ├─gdm-session-wor─┬─gnome-session-b─┬─abrt-applet───2*[{abrt-applet}]
? ? ? ? │ ? ? │ ? ? ? ? ? ? ? ? │ ? ? ? ? ? ? ? ? ├─gnome-shell─┬─ibus-daemon─┬─ibus-dconf───3*[{ibus-dconf}]
? ? ? ? │ ? ? │ ? ? ? ? ? ? ? ? │ ? ? ? ? ? ? ? ? │ ? ? ? ? ? ? │ ? ? ? ? ? ? ├─ibus-engine-sim───2*[{ibus-engine-sim}]
? ? ? ? │ ? ? │ ? ? ? ? ? ? ? ? │ ? ? ? ? ? ? ? ? │ ? ? ? ? ? ? │ ? ? ? ? ? ? └─2*[{ibus-daemon}]
? ? ? ? │ ? ? │ ? ? ? ? ? ? ? ? │ ? ? ? ? ? ? ? ? │ ? ? ? ? ? ? └─32*[{gnome-shell}]
? ? ? ? │ ? ? │ ? ? ? ? ? ? ? ? │ ? ? ? ? ? ? ? ? ├─gnome-software───3*[{gnome-software}]
? ? ? ? │ ? ? │ ? ? ? ? ? ? ? ? │ ? ? ? ? ? ? ? ? ├─gsd-a11y-settin───3*[{gsd-a11y-settin}]
? ? ? ? │ ? ? │ ? ? ? ? ? ? ? ? │ ? ? ? ? ? ? ? ? ├─gsd-account───3*[{gsd-account}]
? ? ? ? │ ? ? │ ? ? ? ? ? ? ? ? │ ? ? ? ? ? ? ? ? ├─gsd-clipboard───2*[{gsd-clipboard}]
? ? ? ? │ ? ? │ ? ? ? ? ? ? ? ? │ ? ? ? ? ? ? ? ? ├─gsd-color───3*[{gsd-color}]
? ? ? ? │ ? ? │ ? ? ? ? ? ? ? ? │ ? ? ? ? ? ? ? ? ├─gsd-datetime───3*[{gsd-datetime}]
? ? ? ? │ ? ? │ ? ? ? ? ? ? ? ? │ ? ? ? ? ? ? ? ? ├─gsd-disk-utilit───2*[{gsd-disk-utilit}]
? ? ? ? │ ? ? │ ? ? ? ? ? ? ? ? │ ? ? ? ? ? ? ? ? ├─gsd-housekeepin───3*[{gsd-housekeepin}]
? ? ? ? │ ? ? │ ? ? ? ? ? ? ? ? │ ? ? ? ? ? ? ? ? ├─gsd-keyboard───3*[{gsd-keyboard}]
? ? ? ? │ ? ? │ ? ? ? ? ? ? ? ? │ ? ? ? ? ? ? ? ? ├─gsd-media-keys───3*[{gsd-media-keys}]
? ? ? ? │ ? ? │ ? ? ? ? ? ? ? ? │ ? ? ? ? ? ? ? ? ├─gsd-mouse───3*[{gsd-mouse}]
? ? ? ? │ ? ? │ ? ? ? ? ? ? ? ? │ ? ? ? ? ? ? ? ? ├─gsd-power───3*[{gsd-power}]
? ? ? ? │ ? ? │ ? ? ? ? ? ? ? ? │ ? ? ? ? ? ? ? ? ├─gsd-print-notif───2*[{gsd-print-notif}]
? ? ? ? │ ? ? │ ? ? ? ? ? ? ? ? │ ? ? ? ? ? ? ? ? ├─gsd-rfkill───2*[{gsd-rfkill}]
? ? ? ? │ ? ? │ ? ? ? ? ? ? ? ? │ ? ? ? ? ? ? ? ? ├─gsd-screensaver───2*[{gsd-screensaver}]
? ? ? ? │ ? ? │ ? ? ? ? ? ? ? ? │ ? ? ? ? ? ? ? ? ├─gsd-sharing───3*[{gsd-sharing}]
? ? ? ? │ ? ? │ ? ? ? ? ? ? ? ? │ ? ? ? ? ? ? ? ? ├─gsd-smartcard───4*[{gsd-smartcard}]
? ? ? ? │ ? ? │ ? ? ? ? ? ? ? ? │ ? ? ? ? ? ? ? ? ├─gsd-sound───3*[{gsd-sound}]
? ? ? ? │ ? ? │ ? ? ? ? ? ? ? ? │ ? ? ? ? ? ? ? ? ├─gsd-wacom───2*[{gsd-wacom}]
? ? ? ? │ ? ? │ ? ? ? ? ? ? ? ? │ ? ? ? ? ? ? ? ? ├─gsd-xsettings───3*[{gsd-xsettings}]
? ? ? ? │ ? ? │ ? ? ? ? ? ? ? ? │ ? ? ? ? ? ? ? ? ├─nautilus-deskto───3*[{nautilus-deskto}]
? ? ? ? │ ? ? │ ? ? ? ? ? ? ? ? │ ? ? ? ? ? ? ? ? ├─seapplet
? ? ? ? │ ? ? │ ? ? ? ? ? ? ? ? │ ? ? ? ? ? ? ? ? ├─ssh-agent
? ? ? ? │ ? ? │ ? ? ? ? ? ? ? ? │ ? ? ? ? ? ? ? ? ├─tracker-extract───13*[{tracker-extract}]
? ? ? ? │ ? ? │ ? ? ? ? ? ? ? ? │ ? ? ? ? ? ? ? ? ├─tracker-miner-a───3*[{tracker-miner-a}]
? ? ? ? │ ? ? │ ? ? ? ? ? ? ? ? │ ? ? ? ? ? ? ? ? ├─tracker-miner-f───3*[{tracker-miner-f}]
? ? ? ? │ ? ? │ ? ? ? ? ? ? ? ? │ ? ? ? ? ? ? ? ? ├─tracker-miner-u───3*[{tracker-miner-u}]
? ? ? ? │ ? ? │ ? ? ? ? ? ? ? ? │ ? ? ? ? ? ? ? ? └─3*[{gnome-session-b}]
? ? ? ? │ ? ? │ ? ? ? ? ? ? ? ? └─2*[{gdm-session-wor}]
? ? ? ? │ ? ? └─3*[{gdm}]
? ? ? ? ├─gnome-keyring-d───3*[{gnome-keyring-d}]
? ? ? ? ├─gnome-shell-cal───5*[{gnome-shell-cal}]
? ? ? ? ├─goa-daemon───3*[{goa-daemon}]
? ? ? ? ├─goa-identity-se───3*[{goa-identity-se}]
? ? ? ? ├─gsd-printer───2*[{gsd-printer}]
? ? ? ? ├─gssproxy───5*[{gssproxy}]
? ? ? ? ├─gvfs-afc-volume───3*[{gvfs-afc-volume}]
? ? ? ? ├─gvfs-goa-volume───2*[{gvfs-goa-volume}]
? ? ? ? ├─gvfs-gphoto2-vo───2*[{gvfs-gphoto2-vo}]
? ? ? ? ├─gvfs-mtp-volume───2*[{gvfs-mtp-volume}]
? ? ? ? ├─gvfs-udisks2-vo───2*[{gvfs-udisks2-vo}]
? ? ? ? ├─gvfsd─┬─gvfsd-burn───2*[{gvfsd-burn}]
? ? ? ? │ ? ? ? ├─gvfsd-trash───2*[{gvfsd-trash}]
? ? ? ? │ ? ? ? └─2*[{gvfsd}]
? ? ? ? ├─gvfsd-fuse───5*[{gvfsd-fuse}]
? ? ? ? ├─gvfsd-metadata───2*[{gvfsd-metadata}]
? ? ? ? ├─ibus-portal───2*[{ibus-portal}]
? ? ? ? ├─ibus-x11───2*[{ibus-x11}]
? ? ? ? ├─imsettings-daem───3*[{imsettings-daem}]
? ? ? ? ├─irqbalance
? ? ? ? ├─ksmtuned───sleep
? ? ? ? ├─libvirtd───16*[{libvirtd}]
? ? ? ? ├─lsmd
? ? ? ? ├─lvmetad
? ? ? ? ├─master─┬─pickup
? ? ? ? │ ? ? ? ?└─qmgr
? ? ? ? ├─mission-control───3*[{mission-control}]
? ? ? ? ├─packagekitd───2*[{packagekitd}]
? ? ? ? ├─polkitd───6*[{polkitd}]
? ? ? ? ├─pulseaudio───2*[{pulseaudio}]
? ? ? ? ├─rngd
? ? ? ? ├─rpcbind
? ? ? ? ├─rsyslogd───2*[{rsyslogd}]
? ? ? ? ├─rtkit-daemon───2*[{rtkit-daemon}]
? ? ? ? ├─smartd
? ? ? ? ├─sshd───bash───su───bash───pstree
? ? ? ? ├─systemd-journal
? ? ? ? ├─systemd-logind
? ? ? ? ├─systemd-udevd
? ? ? ? ├─tracker-store───7*[{tracker-store}]
? ? ? ? ├─tuned───4*[{tuned}]
? ? ? ? ├─udisksd───4*[{udisksd}]
? ? ? ? ├─upowerd───2*[{upowerd}]
? ? ? ? ├─vmtoolsd───2*[{vmtoolsd}]
? ? ? ? ├─vmtoolsd───3*[{vmtoolsd}]
? ? ? ? ├─wpa_supplicant
? ? ? ? └─xdg-permission-───2*[{xdg-permission-}]
進程管理
將拷貝文件放后臺
[root@localhost ~]# cp ?/root/xxx ?/root/a/b/c/abcd/abc &
[1] 6258
查詢目標進程
[root@localhost ~]# pgrep? ? -l? ? ? "sshd"
[root@localhost ~]# killall ? ?-9 ? ? ? vim ?
后臺開啟文件編輯器,命令后接&,下方為輸出結果
[root@localhost ~]# vim ? ?aaa ?&
[1] 6522
[root@localhost ~]# vim ? ?xxx ?&
[2] 6523
[1]+ ?Stopped ? ? ? ? ? ? ? ? vim aaa
殺死目標進程
kill? ? ?-9/-15? ? ?進程ID
[root@localhost ~]# kill ? ? -9 ? ? 6523
[2]+ ?Stopped ? ? ? ? ? ? ? ? vim xxx
確認終止的進程信息:
jobs? ?-l
確認目標用戶的進程相關信息阻止用戶進程,-U指定用戶,-t指定終端
[root@localhost ~]# pgrep ? -l ?-U? ?"kackli"
[root@localhost ~]#pkill? ?-9? ? ?-U? ?"hackli"? ? ?強制終止用戶hackli的進程
[root@localhost ~]# pgrep ? -l ?-U? ?"kackli"? 確認目標已被進程已被終止
計劃任務管理
一次性任務設置
at命令
在CentOS 7中,可以使用at命令來
使用at命令設置一次性任務
基本語法:at [選項] [時間]
常用選項:
? ? - f:指定包含任務命令的腳本文件。
? ? -l:列出待執行的任務隊列。
? ? -d:刪除指定的任務。
時間指定方式:
? ? 可以使用絕對時間,如HH:MM(例如10:30表示上午10點30分),如果不指定日期,默認是當天。如果要指定日期,可以使用`YYYY-MM-DD HH:MM`的格式。
? ? 也可以使用相對時間,如now + 10 minutes表示10分鐘后,now + 1 hour表示1小時后等。
?4. 示例
在指定時間執行命令:假設要在今天的14:30執行一個命令,將當前目錄下的所有文件列表輸出到file_list.txt文件中,可以這樣做:
at 14:30
warning: commands will be executed using /bin/sh
at> ls -l > file_list.txt
at> <EOT>
```
在輸入at 14:30并回車后,會進入at命令的輸入模式,
提示warning: commands will be executed (警告命令將被執行)
using /bin/sh,此時輸入要執行的命令ls -l > file_list.txt,
然后按Ctrl + D組合鍵(即輸入<EOT>)表示命令輸入結束。
使用相對時間執行任務:比如要在30分鐘后執行一個腳本test.sh,可以這樣寫:
at now + 30 minutes
at> /bin/bash /path/to/test.sh
at> <EOT>
```
查看任務隊列:可以使用`at -l`命令查看當前待執行的任務隊列,例如:
at -l
1 ? ? ? 2025-03-12 14:30 a root
2 ? ? ? 2025-03-12 15:00 a root
```
這里顯示了兩個任務,任務1將在2025年3月12日14:30執行,任務2將在2025年3月12日15:00執行,a表示任務的所有者是root。
刪除任務:如果要刪除任務隊列中的某個任務,可以使用at -d [任務編號],
例如要刪除上面的任務1,可以這樣做:
at -d 1
```
at工作原理
at命令會將用戶提交的任務及其執行時間等信息記錄在/var/spool/at目錄下的文件中。atd服務會定期檢查這個目錄,當到達任務指定的執行時間時,atd服務會讀取任務文件,并按照其中的指令執行相應的任務。任務執行時,會在后臺運行,不會影響當前終端的操作。
周期性任務設置
crontab命令
作用:用于設置和管理用戶的計劃任務。
簡單來說,就是可以讓系統在指定的時間自動執行你設定的命令或腳本。
格式:crontab? ? -u|-e|-l|-r
參數說明:
-u user:指定要操作的用戶,如果不寫,默認是當前用戶。
-e:編輯用戶的crontab文件,也就是用來設置計劃任務的具體內容。
-l:列出用戶的crontab文件中的計劃任務。
-r:刪除用戶的crontab文件,也就刪除了該用戶所有的計劃任務。
計劃任務的時間設置格式:分 時 日 月 周 命令。
示例:0 2 * * * /usr/bin/backup.sh
表示每天凌晨 2 點執行/usr/bin/backup.sh這個腳本
編輯當前用戶的計劃任務:crontab -e
示例:
30 8 * * 1-5 /usr/bin/sendmail user@example.com < /home/user/mail.txt
表示每周一到周五的早上 8 點 30 分,發送/home/user/mail.txt內容到user@example.com
列出當前用戶的計劃任務:crontab -l,會顯示當前用戶設置的所有計劃任務
刪除當前用戶的計劃任務:crontab -r,執行后當前用戶的所有計劃任務都被刪除
下面分別介紹五個字段的含義:
字段位置 | 名稱字段 | 取值范圍 | 特殊字符 |
第 1 個 | 分鐘(Minute) | 0 - 59 | *、/、 -、 , |
第 2 個 | 小時(Hour) | 0 - 23 | *、/、-、, |
第 3 個 | 日期(Day of month | 1 - 31 | *、/、 -、 ,、 ?、 L、 W |
第 4 個 | 月份(Month) | 1 - 12 或 jan, feb, mar, ..., dec | *、 /、 -、 , |
第 5 個 | 星期(Day of week) | 0 - 7(0 和 7 都代表星期日)或 sun, mon, tue, ..., sat | *、 /、 -、 、,、 ?、 L、 # |
特殊字符含義
*(星號):表示該字段的所有可能取值。例如,在分鐘字段使用 * 表示每分鐘。
/(斜杠):用于指定時間間隔。例如,*/5 表示每隔 5 個單位執行一次,如在分鐘字段使用 */5 表示每 5 分鐘執行一次。
-(連字符):用于指定一個范圍。例如,1-5 表示從 1 到 5 的取值范圍,如在小時字段使用 1-5 表示從凌晨 1 點到凌晨 5 點。
,(逗號):用于指定多個取值。例如,1,3,5 表示取值為 1、3 和 5,如在星期字段使用 1,3,5 表示星期一、星期三和星期五。
?(問號):僅用于日期和星期字段,當一個字段已經有明確的值時,另一個字段可以使用 ? 來表示不指定。例如,若要在每月 10 號執行任務,星期字段就可以用 ?。
L(最后):僅用于日期和星期字段,表示該字段的最后一個值。例如,在日期字段使用 L 表示該月的最后一天;在星期字段使用 L 表示該月的最后一個星期幾。
W(工作日):僅用于日期字段,表示離指定日期最近的工作日。例如,15W 表示離該月 15 號最近的工作日。
#(序號):僅用于星期字段,表示該月的第幾個星期幾。例如,6#3 表示該月的第三個星期五(6 代表星期五)。
示例:
每分鐘執行一次任務:
* * * * * /usr/bin/backup.sh
每天凌晨 2 點執行任務:
0 2 * * * /usr/bin/cleanup.sh
每周六和周日的 10 點 30 分執行任務:
30 10 * * 0,6 /usr/bin/archive.sh
每月 1 號和 15 號的 14 點執行任務:
0 14 1,15 * * /usr/bin/update.sh
每 3 小時執行一次任務:
0 */3 * * * /usr/bin/check_status.sh
??