程序和任務計畫管理

2022-07-28 12:39:19 字數 3763 閱讀 9378

ps可以檢視程序的資訊,pid是程序號,tty是終端的名稱,pts是遠端終端,tty1是本地登入終端的名稱,時間是占用cpu的時間,cmd就是在執行的命令。下圖就是兩個程序都是在叫pts/0的終端上執行的。想看到本地的登陸終端就相當於在伺服器上直接登入,用w可以檢視到

ps只能看程序的少部分資訊,可以跟引數aux來用

ps aux特點是可以看到程序占用cpu或mem記憶體的百分比

ps -ef顯示系統內所有的程序資訊,通常用來過濾某個服務或程序看它是否處於啟動狀態,看它活著沒有。

還可以讓它只顯示排除自己的過濾程序後的程序資訊。第一行就是父程序的資訊,1是他的父程序的pid號,925是他自己的。下面一行是終端pts/0以使用者root在登入我的sshd。就代表乙個使用者連線sshd的程序。

格式:ps -ef | grep 「服務名」 | grep -v grep

再起乙個連線終端名是pts/1,父程序依舊是pid號為925的sshd父程序。終端以pts/1連過來的使用者。

top動態檢視系統程序資訊。注意:當cpu佔用率過高時不應該直接執行top命令檢視,可以將資訊重定向到乙個檔案裡檢視,以免cpu佔用率過高導致崩潰。

pgrep後跟服務名直接顯示和服務有關的pid號,加引數-l可以顯示服務名的pid號

pgrep 服務名 | head -1可直接顯示出父程序的pid號

程序的啟動方式

ctrl+z將前台程序調入後台並停止執行

fg將後台程序調到前台,後跟數字指將某個具體的後台程序切到前台,不加預設是將上一次調到後台的程序切回前台

jobs看調到後台的有哪些程序

三個「殺」

①    kill根據pid號殺程序,溫柔殺

格式kill  pid號 加-9或者-kill是強殺

②    pkill 根據服務名殺,比較強力,不殺後代。還能踢人,就是根據終端名殺,整個程序都掉線。

③    killall根據服務名殺,子孫後代全殺光,-9或-kill強殺(了解即可,太危險容易出事)

linux作業系統垃圾**機制原理:通常情況下,子程序是由父程序生成的,因此子程序一旦執行結束,預設由他的父程序來收屍。如果父程序比子程序死得早,那麼子程序缺省會交給父程序的父程序來管理來收屍,假如所有父親都沒了,缺省會交給所有父程序的總程序,也就是init主程序來收屍。沒人收屍的話,就會產生殭屍程序。

什麼是殭屍程序?

剛才我們說了,兒子死了預設爸爸收屍,爸爸先死了預設爺爺收屍,假如,爸爸確實死了,死之前沒有來得及通知爺爺代為收屍,於是兒子被忘了,也就沒人來收屍了,這種情況,兒子就是殭屍程序。

殭屍程序的產生?

通常**都是開發寫的,爸爸死了通知爺爺來收屍的這個通知**他忘了寫了,伺服器執行這個程式,就會發生兒子沒人收屍的情況。

產生的後果?

殭屍程序最可怕的後果不是資源的占用,因為乙個程序占用不了太多的資源。可怕的是殭屍程序會永遠占用pid號,作業系統pid號是有限的,如果不夠用了,linux會預設什麼服務都開啟不了。pid號上限是65535

怎麼排查殭屍程序?

①    用top命令開啟會看到第二行的右上角最後乙個單詞zombie就是殭屍的意思,前面是0就說明系統裡沒有。

②    用ps aux預設回車後有乙個stat,殭屍程序的符號是zz,所以我們可以用過濾的方法

ps aux | grep 「^zz$」過濾不出來說明沒有,還可以

ps aux | grep 「^zz$」 | wc -l如果過濾出來的是0行說明沒有。還可以

ps -o pid,stat指定輸出pid號和狀態,加引數-ef是顯示系統中所有程序的pid號和狀態。先顯示出再用過濾。

linux定時任務crond

linux作業系統裡預設就有定時任務的執行,系統日誌的路徑是/var/log/messages*,系統日誌,週期性切割日誌,每七天做一次切割,自動執行。

定時任務的特點,有五個時間段

*分*時*日*月*周    (用五個*表示,分別是分時日月周)

定時任務的寫法:寫成五個*就是每分鐘都會執行後面的命令。*****後跟的是命令的絕對路徑。

/var/spool/cron這個路徑就是存放定時任務的

crontab -l 檢視當前使用者的定時任務

crontab -e(e是編輯狀態,相當於直接開啟了乙個vim,這個vim開啟後就會放到/var/spool/cron/)在裡面我們可以寫定時任務。

crontab -u 指定看的使用者的定時任務 格式:crontab -u 使用者名稱 -l(不指定使用者預設看的是當前使用者)

crontab -r 遞迴刪除定時任務,全刪,謹慎使用。

定時任務的日誌檔案路徑/var/log/cron

tail -f /var/log/cron動態檢視定時任務的日誌檔案

從定時任務的日誌裡看,剛才設定的定時任務被執行了5次

每分鐘都會被執行,一直執行下去

定時任務的配置檔案/etc/crontab

shell是指定解析器,shell的版本使用的是bashell,用/bin/bash去解析定時任務裡的命令。

path 環境變數,告訴linux你敲乙個命令,讓他去哪找命令,去哪些路徑下去找。沒有環境變數的話,輸命令就要輸絕對路徑才能找到這個命令並且執行。export全域性生效全域性宣告,同乙個父親下的兒子子程序都生效

mallto=root給root發郵件,定時任務缺省會給root發郵件,什麼情況下會給root發郵件呢?定時任務如果有螢幕資料輸出的時候會給root發郵件(前提是postfix郵件服務是開啟狀態)

上圖黃色部分是root超級使用者開始編輯普通使用者yunjisuan,替換了普通使用者的定時任務,結束編輯定時任務,這三行記錄了定時任務的操作。

我們開始查詢郵件,/var/spool/mail下記錄了哪些使用者發過郵件,我們開啟yunjisuan使用者的就會看到yunjisuan使用者發的郵件。工作中可能有很多的普通使用者,普通使用者又會有很多的定時任務,root使用者一般不登入,如果登入了,就會一次性簽收好幾百封郵件,如果總給root使用者發郵件,就很不好,所以我們要求,定時任務不能有任何螢幕輸出。

由下圖我們可看出,定時任務配置檔案裡的環境變數和linux作業系統的path不一致,這就意味著,我們在寫定時任務的時候有的命令linux能找到,但是定時任務找不到,此時定時任務必然出錯。所以,在我們學習的時候,就要養成良好的學習習慣,定時任務裡的命令必須用絕對路徑。

home=/ 定時任務的啟動路徑永遠從根開始。所以,寫定時任務的時候,起始點一律是根,不然也會出錯。

總結,寫定時任務時需要注意的幾個問題:

①    首先要關注定時任務環境變數path,我們為了不出錯,寫定時任務時一律用命令的絕對路徑

②    要知道定時任務的任何命令的起始點都是在根下

③    定時任務不能有任何螢幕輸出,有螢幕輸出的話一律重定向到某個檔案裡,我們可以將沒用的重定向到/dev/null垃圾箱檔案裡,這樣就不會產生郵件了。

假如會產生螢幕輸出,我們卻不重定向,但是把postfix郵件服務給關了這樣也不會再產生郵件了,阻止郵件傳送,郵件發不出去會在/var/spool/postfix下有個maildrop(丟棄的郵件)cd進去之後會看到裡面有很多的小檔案,每執行一次定時任務就會產生乙個小檔案。

總結:如果postfix處於關閉狀態,然而定時任務會產生螢幕輸出的話,那麼郵件就不會再發給root賬號,而是會在/var/spool/postfix/maildrop/生成眾多小檔案。這些小檔案會占用系統中的inode號,而inode號也是有上限的,一旦到達上限,再建立檔案就建立不了了,就意味著磁碟明明還有容量,但是卻不能放東西了。

注意:磁碟還能不能放東西取決於兩點

①    df -h看磁碟的真實容量,看它滿不滿

②    df -hi看inode號還有沒有

這兩個任何乙個滿了,磁碟都存不下東西了。

程序和計畫任務管理

第10章 程序和計畫任務管理 一,檢視和控制程序 1 檢視程序 ps 檢視靜態的程序統計資訊 processes statistic a 顯示當前終端下的所有程序,包括其他使用者的程序 u 使用以使用者為主的格式輸出程序資訊 x 顯示當前使用者所在終端下的程序資訊 e 顯示系統內的所有程序資訊 l ...

程序和計畫任務管理

程序和計畫任務管理 管理系統的程序。使用kill命令終止postfix服務的執行。查詢系統中cpu佔用率超過80 的程序,並強行終止該程序。設定計畫執行的系統管理任務。每週一的早上7 50自動清空ftp伺服器公共目錄 var ftp pub中的資料。每天晚上的10 30自動執行任務,完成以下操作 顯...

程序管理和計畫任務

task struct 核心儲存程序資訊的資料結構 task list 多個任務的task struct 組成的鍊錶 建立程序 cow copy on write 寫時複製 子程序只有在資料發生變化的時候才會把父程序的記憶體空間複製乙份給子程序,否則父程序和子程序是 占用一塊相同的記憶體空間的.程序...