進程是正在執行的一個程序或命令,每一個進程都是一個運行的屍體,都有自己的 地址空間,並占用一定的系統資源。
查看所有進程
/* USER 進程由哪個用戶生成 PID 進程ID號 %CPU 進程占用CPU資源的百分比,占用越高,進程越耗資源 %MEM 進程占用物理內存的百分比,占用越高,進程越耗資源 VSZ 進程占用虛擬內存的大小,單位KB RSS 進程占用實際物理內存的大小,單位KB TTY 進程是在哪個終端中運行。 其中tty1-tty7代表本地控制台終端,tty1-tty6是本地字符界面終端,tty7是圖形終端,pts/0-255代表虛擬終端、遠程終端 tty1-tty7可以通過CTL+ALT+F1~CTL+ALT+F7來切換。 TTY顯示?說明進程是由內核啟動的不是由終端啟動。 STAT 進程狀態。 常見的狀態: R 運行、S 睡眠、T 停止狀態、s 包含子進程、+ 位於後台 START 進程啟動時間 TIME 進程占用CPU的運算時間,注意不是系統時間 COMMAND 產生此進程的命令名*/$ ps auxUSER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMANDroot 1 0.0 0.4 185316 4116 ? Ss 6月24 0:23 /sbin/init splroot 2 0.0 0.0 0 0 ? S 6月24 0:00 [kthreadd]root 3 0.0 0.0 0 0 ? S 6月24 4:07 [ksoftirqd/0]root 5 0.0 0.0 0 0 ? S< 6月24 0:00 [kworker/0:0H]root 7 0.1 0.0 0 0 ? S 6月24 16:09 [rcu_sched]...
$ pstreesystemd─┬─ModemManager─┬─{gdbus} │ └─{gmain} ├─NetworkManager─┬─dhclient │ ├─dnsmasq │ ├─{gdbus} │ └─{gmain} ├─accounts-daemon─┬─{gdbus} │ └─{gmain} ├─acpid ├─5*[agetty] ├─avahi-daemon───avahi-daemon ├─colord─┬─{gdbus}...
查看系統健康狀態
-n
選項合用 -n 次數 指定top命令指定的次數。一般和-b
選項合用第一行信息為任務隊列信息
第二行為進程信息
注:
孤兒進程:一個父進程退出,而它的一個或多個子進程還在運行,那麼那些子進程將成為孤兒進程。孤兒進程將被init進程(進程號為1)所收養,並由init進程對它們完成狀態收集工作。
僵屍進程:一個進程使用fork創建子進程,如果子進程退出,而父進程並沒有調用wait或waitpid獲取子進程的狀態信息,那麼子進程的進程描述符仍然保存在系統中。這種進程稱之為僵死進程。
第三行行為CPU信息
第四行行為物理內存信息
注:
buffers:加速寫入;例如保存文件內容,真是情況是先寫入文件進程的緩沖區,然後在文件關閉和系統空閒時再寫入硬盤。
第五行為交換分區(swap)信息
注:
cached:加速讀取;例如,讀取硬盤文件時可以把部分文件放在內存中緩存起來,不用每次訪問硬盤,加速讀取文件速度。
top內容主要查看 load average、cpu的空閒率、內存的空閒、Swap分區的空閒。
// 更改top刷新時間為1s,但不建議,top本身耗費資源$ top -n 1// 使用top只能在終端中看到很少一部分程序,因此使用-b來保存進程到文件中$ top -b -n 1 >top.log$ cat top.log
SIGHUB信號 若apache服務器重新設置配置文件,需要重啟apache服務,如果使用服務命令stop、start時關閉服務造成用戶體驗非常差。那麼可以使用Kill -HUB pid的命令使apache服務重新加載配置實現平滑重啟。但apache服務有多個服務進程,那麼可以使用killall 命令實現。 平滑重啟不會使服務器登錄用戶掉線。
SIGKILL 強制終止進程,kill -9 2236
// 查看可用的進程信號$ kill -l// 強制終止進程,注kill後跟的是pid不能是進程名$ kill -9 2237
// 殺死所有apache服務$ killall -9 httpd
注:pkill和killall命令基本相同。
// 查看當前登錄用戶$ w 19:53:45 up 3:02, 1 user, load average: 0.00, 0.01, 0.05USER TTY FROM LOGIN@ IDLE JCPU PCPU WHATroot tty1 - 16:51 3:02m 23.87s 0.23s -bashroot pts/0 192.168.44.1 04:47 0.00s 0.22s 0.00s wroot pts/0 192.168.44.1 04:47 0.00s 0.22s 0.00s -bash// 只有root用戶可以踢掉本地用戶# pkill -9 -t tty1
Linux操作系統是一個多用戶、多任務的操作系統,Linux系統中通知運行著非常多的進程。但是CPU在統一時鐘周期內只能運算一個指令。進程優先級決定了每個進程處理的先後順序。
$ ps -leF S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD4 S 0 1 0 0 80 0 - 29895 - ? 00:00:02 systemd1 S 0 2 0 0 80 0 - 0 - ? 00:00:00 kthreadd1 S 0 3 2 0 80 0 - 0 - ? 00:00:00 ksoftirqd/01 S 0 5 2 0 60 -20 - 0 - ? 00:00:00 kworker/0:0H1 S 0 7 2 0 80 0 - 0 - ? 00:00:03 rcu_sched1 S 0 8 2 0 80 0 - 0 - ? 00:00:00 rcu_bh1 S 0 9 2 0 -40 - - 0 - ? 00:00:00 migration/05 S 0 10 2 0 -40 - - 0 - ? 00:00:00 watchdog/05 S 0 11 2 0 80 0 - 0 - ? 00:00:00 kdevtmpfs1 S 0 12 2 0 60 -20 - 0 - ? 00:00:00 netns// PRI代表Priority,NI代表Nice。這兩個值都是優先級,數字越小代表該進程優先級越高。
// 進程啟動時才可以修改其NI值,進程運行時無法修改# nice -n -5 service httpd start
// 使用renice來修改已經存在進程的NI值# renice -10 2125
工作管理是指在單個登錄終端中(也就是登錄的shell界面中)同時管理多個工作的行為。
當前的登錄終端,只能管理當前終端的工作,而不能管理其他登錄終端的工作
放入後台的命令必須可以持續運行一段時間,這樣我們才能捕捉和操作這個工作
放入後台執行的命令不能和前台有交互或需要前台輸入,否則放入後台只能暫停,而不能運行
// 把命令放入後台,並在後台執行$ tar -zcf etc.tar.gz /etc &// 按下ctl + z 快捷鍵,放在後台暫停$ topctl + z
$ top&$ top // ctrl+ z放入後台// 查看後台進程,兩個top進程都是停止的,因為top給前台用戶查看的,和前台有交互,無法在後台執行$ jobs[1]- Stopped top[2]+ Stopped top$ vi abc &$ jobs[1] Stopped top[2]- Stopped top[3]+ Stopped vi abc
注:後台恢復執行的命令,是不能和前台有交互的,否則不能恢復到後台執行
把命令放入後台,只能在當前登錄終端執行。一旦退出或關閉終端,後台程序就會停止。
// 系統啟動時執行rc.local文件$ cat /etc/rc.localtouch /var/lock/subsys/local // 注:這裡不是創建文件,改變文件的timestamp
// 在終端1中執行for.sh# vi for.sh#!/bin/bashfor ((i=0; i<=1000; i=i+1)) do echo 11 >> /root/for.log sleep 10 done# nohup /root/for.sh &// 關閉終端1// 打開終端2,ps aux 可以看到for.sh仍在運行
vmstat [刷新延時 刷新次數]
$ vmstat 1 3procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 0 0 70280 133280 13140 303244 0 4 60 16 53 121 1 1 98 0 0 0 0 70280 133264 13140 303248 0 0 0 0 40 201 1 0 99 0 0 0 0 70280 133264 13140 303248 0 0 0 0 43 183 1 0 99 0 0
$ dmesg |grep CPU
/* total 總內存數 used 已經使用內存數 free 空閒的內存數 shared 多個進程共享的內存數 buffers 緩沖內存數 cached 緩存內存數 默認單位是KB*/$ free -m total used free shared buff/cache availableMem: 983 545 124 6 313 273 Swap: 1906 68 1838
$ cat /proc/cpuinfo
顯示系統的啟動時間和平均負載,也就是top命令的第一行。w命令也可以看到這個數據。
$ uptime 10:10:47 up 6:11, 1 user, load average: 0.18, 0.10, 0.09$ w 10:11:35 up 6:12, 1 user, load average: 0.09, 0.09, 0.09USER TTY FROM LOGIN@ IDLE JCPU PCPU WHATroot tty7 :0 一16 17:20m 49.38s 0.28s /sbin/upstart --user
// 查詢系統中所有進程調用的文件$ lsof |more// 查詢某個文件被哪個進程調用$ lsof /sbin/init// 查看httpd進程調用了哪些文件$ lsof -c httpd// 按照用戶名,查詢某個用戶進程調用的文件$ lsof -u root
緩存和緩沖的區別 簡單來說緩存(cache)用來加速數據從硬盤中“讀取”的,而緩沖(buffer)用來加速數據“寫入”硬盤的。
// at 服務是否安裝# chkconfig --list |grep atd# service atd status
如果系統中有/etc/at.allow文件,那麼只有寫入/etc/at.allow文件(白名單)中的用戶可以使用at命令(/etc/at.deny文件會被忽略)
如果系統中沒有/etc/at.allow文件,只有/etc/at.deny文件,那麼寫入/etc/at.deny文件(黑名單)中的用戶不能使用at命令。對root不起作用
如果系統中這兩個文件都不存在,那麼只有root用戶可以使用at命令
at [選項] 時間 選項 -m 當at工作完成後,無論是否命令有輸出,都用email通知執行at命令的用戶 -c 工作號 顯示該at 工作的實際內容 時間: -HH:MM 例如:02:30 -HH:MM YYYY-MM-DD 例如:02:30 2013-07-25 -HH:MM [am|pm] [month] [date] 例如:02:30 July 25 -HH:MM [am|pm] + [minutes|hours|days|weeks] 例如:now + 5 minutes
$ at now +2 minutesat> /root/hello.sh >> /root/hello.logat> <EOT>// 指定時間重啟$ at 02:00 2013-07-26at>/bin/syncat>/sbin/shutdown -r now
atq
atrm [工作號]
// 檢查crond服務是否安裝啟動# service crond restart# chkconfig crond on
當系統中有/etc/cron.allow文件時,只有寫入此文件的用戶可以使用crontab命令,沒有寫入的用戶不能使用crontab命令。同樣如果有此文件,/etc/cron.deny文件會被忽略,/etc/cron.allow文件的優先級更高
當系統中只有/etc/cron.deny文件時,則寫入此文件的用戶不能使用crontab命令,沒有寫入文件的用戶可以使用crontab命令
// 編輯crontab命令$ crontab -e***** command
// cron命令,每月1號和15號,每周1的0點0分都會執行// 注意:星期幾和幾號最好不要同時出現,他們定義的都是天。非常迷惑。0 0 1,15 * 1 命令// 例子// 每隔5分鐘在/root/test中寫入111*/5 * * * * echo 111 >> /root/test
六個選項不能為空,必須填寫。如果不確定使用“*”代表任意時間。
crontab定時任務,最小有效時間是分鐘,最大時間范圍是月。想2018年某時執行,3點30分30秒這樣的時間都不能識別。
在定義時間時,日期和星期最好不要在一條定時任務中出現,因為他們都是以天作為單位,飛鏟更容易讓管理員混亂。
在定時任務中,不管是直接寫命令,還是在腳本中寫命令,最好都是用絕對路徑。
注:定時任務自帶的環境變量與$PATH中的保存的環境變量不一定相同,所以在crontab中使用絕對路徑。
“crontab -e”是每個用戶執行的命令,也就是說不同的用戶身份可以執行自己的定時任務。可是有些定時任務需要系統執行,這是我們就需要編輯/etc/crontab這個配置文件。
// 這裡crontab是普通用戶的定時任務$ crontab -e // 系統定時任務// CentOS 5 中的配置文件$ vim /etc/crontabSHELL=/bin/bashPATH=/sbin:/bin:/usr/sbin:/usr/binMAILTO=rootHOME=/#run-parts01 * * * * root run-parts /etc/cron.hourly02 4 * * * root run-parts /etc/cron.daily22 4 * * 0 root run-parts /etc/cron.weekly42 4 1 * * root run-parts /etc/cron.monthly
// 查看/etc下crontab相關的目錄和文件# ls /etc/croncron.d/ cron.hourly/ crontab cron.daily/ cron.monthly/ cron.weekly/
手工執行定時任務
系統定時任務
第一種是把需要定時執行的腳本復制到/etc/cron.{daily, weekly, monthly}目錄中任意一個
第二種是修改/etc/crontab配置文件
anacron是用來保證在系統關機的時候錯過的定時任務,可以在系統開機之後再執行
anacron會使用一天,七天,一個月作為檢測周期
在系統的/var/spool/anacron/目錄中存在cron.{daily, weekly, monthly}文件,用於記錄上次執行cron的時間
和當前時間作比較,如果兩個時間的差值超過了anacron的指定時間差值,證明有cron任務沒有被執行
在老的CentOS版本中,/etc/cron.{daily, weekly, monthly}這些目錄即會被cron調用,也會被anacron調用,容易重復執行
在CentOS 6.x中則只會被anacron調用,避免了重復執行
在CentOS 6.x中,anacron不再是服務,而是系統命令
$ vi /etc/anacrontab# /etc/anacrontab: configuration file for anacron# See anacron(8) and anacrontab(5) for details.SHELL=/bin/shPATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/binHOME=/rootLOGNAME=rootRANDOM_DELAY=45START_HOURS_RANGE=3-22# These replace cron's entries1 5 cron.daily run-parts --report /etc/cron.daily7 10 cron.weekly run-parts --report /etc/cron.weekly@monthly 15 cron.monthly run-parts --report /etc/cron.monthly#天數 強制延遲(分鐘) 工作名稱 實際執行的命令
首先讀取/var/spool/anacron/cron.daily中上一次anacron執行的時間
和當前時間比較,如果兩個時間差值超過1天,就執行cron.daily工作
執行這個工作只能在03:00-22:00之間
執行工作時強制延遲時間為5分鐘,再隨機延遲0-45分鐘時間
使用nice命令指定默認優先級,使用run-parts腳本執行/etc/cron.daily目錄中所有可執行文件
http://xxxxxx/Linuxjc/1141691.html TechArticle