Linux進程管理

前言

只有光頭才能變強linux

回顧前面:web

這篇主要講解在Linux下進程的管理shell

那麼接下來就開始吧,若是文章有錯誤的地方請你們多多包涵,不吝在評論區指正哦~服務器

聲明:基於Centos6.9微信

1、Linux下的進程

每一個用戶都可同時運行多個程序。爲了區分每個運行的程序,Linux給每一個進程都作了標識,稱爲進程號(process ID),每一個進程的進程號是惟一的。網絡

Linux 給每一個進程都打上了運行者的標誌,用戶能夠控制本身的進程:給本身的進程分配不一樣的優先級,也能夠隨時終止本身的進程。ssh

  • 進程從執行它的用戶處繼承UID、GID,從而決定對文件系統的存取和訪問

Linux 不可能在一個 CPU 上同時處理多個任務(做業)請求,而是採用 「分時」 技術來處理這些任務請求。工具

使用PID區分不一樣的進程post

  • 系統啓動後的第一個進程是init,它的PID是1。init是惟一一個由系統內核直接運行的進程。
  • 除了init以外,每一個進程都有父進程(PPID標識)
  • 每一個進程還有四個與用戶和組相關的識別號
    • 實際用戶識別號 (real user ID,RUID)
    • 實際組識別號 (real group ID,RGID)
    • 有效用戶識別號 (effect user ID,EUID)
    • 有效組識別號 (effect group ID,EGID)
  1. RUID和RGID的做用:識別正在運行此進程的用戶和組
  2. EUID和EGID的做用:肯定一個進程對其訪問的文件的權限

進程類型學習

  • 交互進程
    • 由一個Shell啓動的進程。
    • 交互進程既能夠在前臺運行,也能夠在後臺運行。
  • 批處理進程
    • 不與特定的終端相關聯,提交到等待隊列種順序執行的進程。
  • 守護進程(Daemon)
    • 在Linux在啓動時初始化,須要時運行於後臺的進程。

進程的啓動方式

  • 手工方式:使用操做系統提供的用戶接口
    • 前臺
    • 後臺 (&)
  • 調度方式:按照預先指定的時間執行
    • at
    • batch
    • cron

前臺進程:

  • 指一個程序控制着標準輸入/輸出,在程序運行時,shell 被暫時掛起,直到該程序運行結束後,才退回到 shell。在這個過程當中,用戶不能再執行其它程序

後臺進程:

  • 用戶沒必要等待程序運行結束就能夠執行其它程序。運行後臺進程的方法是在命令行最後加上 「&」

進程和做業的區別:

  • 進程:操做系統的概念,由操做系統負責管理
  • 做業:shell程序的概念,由shell程序負責管理
    • 一個操做系統能夠啓動多個shell程序,shell自己也是一個進程
    • 一個做業裏至少包含一個進程,也能夠包含多個進程
    • 做業分前臺和後臺運行之分

有了上面的知識點,咱們就能夠畫出這麼一張流程圖:

 

 

1.1管理進程經常使用命令

使用ps命令查看進程狀態信息

  • ps -ef
  • ps aux

ps命令參數說明:

 

 

ps命令輸出說明:

 

 

還有其餘幾個經常使用命令:

  • 註銷後繼續運行進程nohup 命令 [選項] [參數] [輸出文件] &
    • 用過SpringBoot打jar包部署到Linux下的同窗對上面這個命令必定不會陌生啦~
  • 殺死進程kill pid -9
  • free:查看內存使用情況
  • top :查看實時刷新的系統進程信息
  • 進程調度的優先權nice命令:
  • 進程運行後調整優先級:renice命令。

 

 

做業控制是指控制當前正在運行的進程的行爲,也被稱爲進程控制。

  • 暫時中止某個運行程序 使用Ctrl+z
  • 列舉做業號碼和名稱:jobs
  • 在後臺恢復運行:bg [%做業號碼]
  • 在前臺恢復運行:fg [%做業號碼]
  • 發送信號:kill -[信號] pid

1.2進程練習題

以root帳戶登陸,運行ps命令,選項分別用-a和-af;觀察對比結果,並截圖;運行ps命令,選項爲-ef,觀察結果;運行ps,選項爲au,觀察結果,並截圖。

 

 

 

 

 

 

 

 

切換到jkXX帳戶,用長格式列出/usr/bin/passwd命令,觀察命令的權限屬性;用後臺方式運行passwd命令;運行ps命令,選項爲-ao,參數爲user,pid,ruid,euid,tty,cmd,觀察結果並截圖

 

 

 

 

切換到peter帳戶,用後臺執行命令ls -l /usr/bin | more &,觀察結果;上述命令再次執行兩遍,觀察結果;執行ps命令,選項爲au,觀察有哪些進程在運行;執行命令jobs,查看有哪些做業在運行;經過fg命令把後臺命令轉移到前臺,使之結束,觀察剩餘做業;直到做業所有結束。

 

 

 

 

 

 

 

 

 

 

 

 

切換到jason帳戶,用nice命令啓動在後臺啓動vi編輯軟件,優先級增長10,用ps命令,選項爲-l觀察vi進程的優先級;用nice命令啓動在後臺啓動vi編輯軟件,優先級減小10,觀察結果,爲何不成功;切換到root帳戶,用nice命令啓動在後臺啓動vi編輯軟件,優先級減小10;

 

 

 

 

 

 

 

 

ps命令中顯示TTY表明什麼?

答:tty表明字符終端。

ps命令的輸出結果,哪一個進程的狀態爲運行狀態?哪一個進程爲休眠狀態?

答:ps au命令的進程是運行狀態,用R表示;其他的都是休眠狀態。

passwd命令的euid爲多少,它在執行中應得到誰的權限?

答:euid爲0,它在執行中應得到文件全部者root的權限。

若是用chmod命令把passwd命令的suid屬性去掉,在普通帳戶下運行passwd命令,能夠修改密碼嗎?爲何?

答:不能夠,由於passwd命令要修改shadow文件,shadow文件是root用戶的,普通帳戶運行passwd命令,沒有得到root用戶權限,沒法修改shadow文件。

nice命令減小優先級的值,須要什麼樣的權限?

答:須要root用戶權限

2、守護進程

始終在後臺運行並響應合法請求的程序稱爲守護(Daemon)進程。守護進程不是由用戶啓動運行的,也不與終端關聯

  • 一個實際運行中的系統通常會有多個守護進程在運行,且各個系統中運行的守護進程都不盡相同。
  • 除非程序異常停止或者人爲終止,不然它們將一直運行下去直至系統關閉。
  • UNIX/Linux的守護進程在Windows系統中被稱做「服務」。

守護進程的分類:

  • 系統守護進程
    • 計劃性任務 daemon:如 atd、crond
    • 系統日誌 daemon:如 rsyslogd
    • 打印假脫機 daemon:如 cupsd、lpd
    • 網絡參數設置 daemon:如 network
  • 網絡守護進程:
    • 各類網絡協議偵聽 daemon
    • 如:sshd、httpd、postfix、vsftpd
  • 網絡超級服務器(Supper Server)
    • 如:xinetd 或 inetd

超級服務器的引入xinetd

  • 對於系統所要提供的每一種網絡服務,都必須運行一個監聽某個端口鏈接發生的守護程序,這一般意味着系統資源的浪費。
  • 爲了不繫統資源浪費引入了「超級服務器」。超級服務器啓動後同時監聽它所管理的服務的全部端口
  • 當有客戶提出服務請求時
    • 超級服務器會判斷這是對哪個服務的請求,而後再開啓與此服務相應的守護進程
    • 由超級服務器產生的某服務的進程處理客戶的請求,當處理結束便終止此服務進程
    • 超級服務器自己繼續監聽其餘服務請求

 

 

守護進程的啓動方式

  • 獨立啓動
    • 獨立運行的守護進程由init腳本負責管理,腳本存放在/etc/rc.d/init.d/目錄下
    • 全部的系統服務都是獨立運行的。如:crond、syslogd等
    • 一些經常使用的網絡守護進程是獨立運行的。如:httpd等
  • 瞬態啓動
    • 由網絡超級服務器(xinetd)運行的守護進程,由xinetd管理的守護進程的配置文件存在/etc/xinetd.d/目錄下
    • 默認的xinetd的主配置文件是/etc/xinetd.conf
    • 一些不經常使用的網絡守護進程是由xinetd啓動的,如:telnet、 tftp等
    • xinetd自己是獨立運行的守護進程

2.1管理守護進程經常使用命令

chkconfig命令的功能

  • 添加指定的新服務
  • 清除指定的服務
  • 顯示由chkconfig管理的服務
  • 改變服務的運行級別
  • 檢查服務的啓動狀態

chkconfig --list會顯示出對應的運行級別:

  • 0: 關機
  • 1: 單用戶
  • 2: 無網絡的多用戶
  • 3: 命令行模式
  • 4: 未用
  • 5: GUI(圖形桌面 模式)
  • 6 : 重啓

ntsysv管理守護進程

 

 

使用service管理守護進程

  • service --status-all
  • service server-name status
  • service server-name start|stop|restart

2.2守護進程練習題

安裝守護進程工具ntsysv,並運行它;經過ntsysv界面,取消crond的自動啓動,經過命令chkconfig來檢查crond自動運行是否被取消;經過chkconfig命令設置crond啓動啓動,經過ntsysv檢查結果;觀察結果,並截圖

 

 

 

 

 

 

 

 

 

 

編輯xinetd的主配置文件,修改連接instances = 2,從新啓動xinetd;用putty以telnet方式鏈接到linux,用pstree命令觀察xinetd啓動的telnet進程數量;繼續開啓telnet連接,直到鏈接超過限制

 

 

 

 

 

 

編輯系統服務文件services,修改telnet服務的端口爲27,重啓xinetd;用putty以telnet方式鏈接到linux,顯示當前的網絡連接;恢復telnet默認的服務端口,並檢查;觀察結果,並截圖。

 

 

 

 

 

 

telnet服務端口能夠改變嗎?若是能夠改變,鏈接telnet服務應注意什麼問題?

答:telnet服務端口能夠改變。鏈接telnet服務的時候,應該注意端口號修改成正在提供telnet服務的端口號。

修改telnet配置文件,須要xinetd服務重啓嗎?爲何?

答:須要從新啓動xinetd服務,由於xinetd做爲超級服務器,它負責管理telnet服務的啓動,也要同時查看telnet的服務配置文件。當telnet服務配置文件修改的時候,xinetd服務須要知道配置文件的變化,從新啓動會從新讀取配置文件的內容,使之生效。

Telnet爲何能夠看到腳本程序的執行結果?

答:telnet是一個遠程的字符界面的網絡工具,它實現了遠程字符界面的標準輸入和輸出功能;腳本執行的結果是輸出到標準輸出設備,也就是字符界面的屏幕,telnet將標準輸出經過網絡傳遞到telnet客戶端的屏幕上顯示,所以它能夠看到腳本程序執行的結果。

經過ntsysv命令和chkconfig命令打開守護進程啓動運行的結果是否徹底同樣?有什麼不一樣?

答:ntntsysv命令關閉守護進程,只是改變了當前用戶運行級別的守護進程開關,具體來講,改變了3號運行級別命令行模式的守護進程開關。chkconfig命令默認改變三、四、5級別的所有開關,chkconfig還能夠指定某個運行級別的守護進程開關。

3、安排自動化任務

調度任務的守護進程:

  • atd
  • crond

安排調度任務的幾個命令:

  • at 安排做業在某一時刻執行一次
  • batch 安排做業在系統負載不重時執行一次
  • cron 安排週期性運行的做業

3.1atd守護進程

atd守護進程負責監控一次性任務的執行,atd守護進程的執行參數/etc/sysconfig/atd

控制普通用戶的使用

  • /etc/at.allow存在,僅列在其中的用戶容許使用
  • /etc/at.allow 不存在,檢查/etc/at.deny,沒有列於其中的全部用戶容許使用
  • 若兩個文件均不存在,僅容許root用戶使用
  • 空的/etc/at.deny文件,表示容許全部用戶使用(默認值)

如何使用:

  • 安裝命令yum install at
  • atd的啓動service atd start
  • atd服務的查看chkconfig --list | grep atd或者ps -aef | grep atd
  • at 命令格式及參數 at [-q 隊列] [-f 文件名] 時間

3.2cron

  • crond守護進程負責監控週期性任務的執行
  • crond守護進程的執行參數配置文件/etc/sysconfig/crond

控制普通用戶的使用

  • /etc/cron.allow存在,僅列在其中的用戶容許使用
  • /etc/cron.allow 不存在,檢查/etc/cron.deny,沒有列於其中的全部用戶容許使用
  • 若兩個文件均不存在,僅容許root用戶使用
  • 空的/etc/cron.deny文件,表示容許全部用戶使用(默認值)

crond啓動之後,每分鐘喚醒一次,檢測以下文件的變化並將其加載到內存

  • /etc/crontab:是crontab格式(man 5 crontab)的文件
  • /etc/cron.d/*:是crontab格式(man 5 crontab)的文件
  • /var/spool/cron/*:是crontab格式(man 5 crontab)的文件
  • /etc/anacrontab:是anacrontab格式(man 5 anacrontab)的文件

 

 

3.3安排自動化任務練習

安裝at計劃任務服務,而且啓動它;在下午茶的時間,檢查網卡信息;在兩分鐘以後,開啓防火牆;2019年6月1日凌晨兩點,服務器重啓;明天晚上9點,關閉eth1;用命令檢查正在等待的計劃任務;用at -c檢查正在等待任務的具體內容;刪除其中一條任務,觀察結果。觀察結果,並截圖

 

 

 

 

 

 

 

 

 

 

 

 

 

 

編輯一個文件myatXX(XX爲學生的學號末兩位),要求按順序執行以下命令:返回用戶主目錄;查看用戶帳戶名;查看當前系統運行的全部進程,並將記錄保存到文件ps.log中;添加一個計劃任務,要求下午5點執行文件中的命令;觀察結果,並截圖

 

 

 

 

 

 

 

 

用普通帳戶jsjXX登陸,添加一個計劃任務,明天中午關閉eth0;更改at命令的相關配置文件,禁止jsjXX執行at命令,試驗證之

 

 

 

 

修改crontab文件,添加一個新的週期任務,要求以下:每間隔6個小時,把服務器正在監聽的端口信息,保存到/root/net.txt文件中;每週五或者10,20,30日上午9:00到下午15:00,每一個小時第10分鐘,清除目錄/tmp下的全部文件

 

 

 

 

添加一個腳本,要求:每個月執行該任務,查找/home目錄下30天沒有修改的文件,並刪除它;腳本名稱爲clean-home

 

 

 

 

 

 

 

 

登陸jsj08 帳務,用crontab -e命令編寫一個週期任務,要求每一個2分鐘按順序執行:顯示當前系統時間;顯示帳戶名;顯示當前帳戶的進程信息;以上命令的結果,所有以追加式方式保存到用戶主目錄下文件,文件名爲myplanXX(XX爲學生的學號末兩位)。用crontab -l檢查編寫的任務

 

 

 

 

 

 

 

 

 

 

myatXX文件是否要修改權限,才能執行?

答:不須要。atd服務只是從myatXX文件中讀取內容,真正執行的命令會存放在另一個文件,咱們用at -c命令能夠看到這個真正執行文件內容。

腳本放在哪一個目錄下?腳本須要添加可執行屬性嗎?

答:腳本根據不一樣的週期放到不一樣的目錄下,本題以月爲週期執行,所以放入/etc/cron.monthly目錄下。腳本須要添加可執行屬性,由於這是真正可執行的腳本。

普通用戶能夠修改at服務的配置文件嗎?

答:修改at配置文件須要root權限,普通用戶不能夠修改at的配置文件。

4、總結

本文主要是總結了Linux下操做進程和自動化任務知識~~~這兩個知識點在Linux下也是很重要的,是學習Linux的基礎~

繼續完善上一次的思惟導圖

 

 

若是文章有錯的地方歡迎指正,你們互相交流。習慣在微信看技術文章,想要獲取更多的Java資源的同窗,能夠關注微信公衆號:Java3y。爲了你們方便,剛新建了一下qq羣:742919422,你們也能夠去交流交流。謝謝支持了!但願能多介紹給其餘有須要的朋友

文章的目錄導航

相關文章
相關標籤/搜索