linux進程管理

進程

概念; 進程是一個具有一定獨立功能的程序在一個數據集上的一次動態(tài)執(zhí)行的過程 ,可以理解為正在運行的程序

linux內核維護著一張記錄系統(tǒng)中運行的所有進程的各種信息,會自動完成對進程的控制和調度,內核中一些重要的進程信息如下:

  • 進程的內存地址
  • 進程當前的狀態(tài)
  • 進程正在使用的資源
  • 進程的優(yōu)先級
  • 進程的屬主

進程的一些屬性

  • 進程的ID號:PID,標志著這個進程

  • 父進程的ID號:PPID,在linux系統(tǒng)中,所有的進程都必須由另一個進程創(chuàng)建,除了系統(tǒng)引導時,由內核自主創(chuàng)建并安裝的那幾個進程,創(chuàng)建進程的那個進程被成為父進程。

    注意:linux并沒有提供一種系統(tǒng)調用來讓應用程序“創(chuàng)建”一個進程,而是通過克隆自己來產生新進程

  • 真實和有效的用戶ID:

    • UID:只有進程的創(chuàng)建者和root用戶才有權力對該進程進行操作,于是記錄了一個進程的屬主,進程的UID就是其創(chuàng)建者的用戶ID
    • EUID:linux還為進程保存了一個“有效用戶ID號”,這個EUID號用來確定進程對某些資源和文件的訪問權限,eg:setuid程序
  • 真實和有效的組ID:

    • GID:創(chuàng)建者所屬組的ID號
    • EGID:與EUIDl類似,可以通過setgid程序來設置
  • 謙讓度與優(yōu)先級

監(jiān)視進程

  • ps命令

    ps aux ##顯示當前系統(tǒng)上運行的所有進程的信息
    ps lax ##不會顯示進程屬主的用戶名(因此運行速度更快),但是可以提供父進程ID和謙讓度(NI)
    
  • 說明:

    • USER:進程創(chuàng)建者的用戶名

    • PID:進程的ID號

    • %CPU:進程占用的cpu百分比

    • %MEN:進程占用的內存百分比

    • VSZ:進程占用的虛擬內存大小

    • RSS:內存中頁的數量(頁是管理內存的大小,在PC上通常是4K)

    • TTY:進程所在終端的ID號

    • STAT:

      • 進程狀態(tài)

        • R:正在運行
        • S:睡眠中(可以被喚醒)
        • Z:僵進程(已經結束而沒有釋放系統(tǒng)資源的進程)
        • D:睡眠中(不可被喚醒,通常是在等待I/O設備)
        • T:停止(由于收到信號或被跟蹤)
      • 常用的附加標志:

        • <:進程擁有比普通優(yōu)先級高的優(yōu)先級
        • N:進程擁有比普通優(yōu)先級低的優(yōu)先級
        • L:有些頁面被鎖在內存中
        • s:會話的先導進程
    • START:進程啟動的時間

    • TIME:進程已經占用CPU的時間

    • COMMAND:命令和參數

即時跟蹤進程信息

  • top命令:即使跟蹤當前系統(tǒng)中進程的情況,默認情況下每10s更新一次,使用命令q退出這個監(jiān)視程序

查看占用文件的進程:lsof

lsof 文件名

不帶參數的lsof會列出所有打開文件的進程的信息

向進程發(fā)送信號:kill

kill命令總是用來殺死一個進程,但事實上,從本質上講,kill命令只是用來向進程發(fā)送一個信號,至于這個信號是什么,則是由用戶指定的

kill [-signal] pid ##標準語法
kill -l ##顯示所有信號及其編號

根據硬件體系結構不同,列表會有所不同,信號名的前綴SIG可以省略

  • 常用信號
信號編號 信號名 描述 默認情況下執(zhí)行的操作
0 EXIT 程序退出時收到該信號 終止
1 HUP 掛起 終止
2 INT 中斷 終止
3 QUIT 退出 終止
9 KILL 殺死 終止
11 SEGV 段錯誤 終止
15 TERM 軟件終止 終止

注意:killl命令不一定可以終止一個程序,kill命令向程序發(fā)送的一個信號,這個信號可以被程序捕捉,程序可以封鎖或者干脆忽略,所以只有在信號沒有被程序捕捉的情況下,系統(tǒng)才會執(zhí)行默認操作。例如

#! /bin/bash
trap "" TEEM
while echo "i am  making files"
do 
   mk adir
   cd adir
   touch afile
   
   sleep 2s
done

上面這個文件,一旦被執(zhí)行,使用kill -TERM 將無法終止,trap “” TERM將會忽略TERM信號,但有一個信號永遠都不能被程序所捕捉,就是KILL信號,KILL可以在內核級別殺死一個而進程,所以,可以使用

kill -9 pid
kill -KILL pid 

來殺死進程,然而也有一些退化的I/O虛假鎖造成的進程,kill也無法影響他們,只能重啟系統(tǒng)

  • trap知識補充: 用于指定在接收到信號后將要采取的動作

     trap command signal ##signal 為接收到的信息,command為接收到信號后執(zhí)行的操作:三種形式
    1 trap "commands" signal-list ## 當腳本收到signal-list清單內列出的信號時,trap命令執(zhí)行雙引號中的命令。
    2 trap signal-list ##trap不指定任何命令,接受信號的默認操作,默認操作是結束進程的運行
    3 trap " " signal-list ##  trap命令指定一個空命令串,允許忽視信號,我們用到的就是這一種
    
    

    調整進程的謙讓度

  • nice命令:在啟動程序時設置其謙讓度

    nice -n 2 bc## -n參數用戶增加程序的謙讓度值 bc為指定程序
    nice bc ##不帶參數的nice會將程序的謙讓度增量設置為10
    nice ##不帶任何參數的nice可以查看默認的謙讓度值
    
  • renice命令:在程序運行時調整其謙讓度值

    renice +12 -p 3244 ## -p指定進程號
    

新進程會從其父進程那里繼承謙讓度,進程的屬主可以提高其謙讓度,但不能降低其謙讓度,保證低優(yōu)先級的進程不會派生出高優(yōu)先級的子進程,但是root用戶可以任意設置進程的優(yōu)先級

/proc文件系統(tǒng)

一個非常特殊的文件系統(tǒng),存放著內核有關系統(tǒng)狀態(tài)的各種有意義的信息。在系統(tǒng)運行時,內核會隨時向這個目錄寫入數據,ps和top命令就是從這個地方讀取數據的,這是操作系統(tǒng)向用戶提供的一條通往內核的通道,用戶甚至可以通過向/proc目錄下的文件寫入數據來 修改操作系統(tǒng)參數。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 進程相關概念 內核的功能 進程管理、文件系統(tǒng)、網絡功能、內存管理、驅動程序、安全功能等。 process 進程,正...
    夾克K閱讀 1,130評論 0 1
  • Linux進程管理原理 Linux的進程管理,就是對硬件各資源進行分配、調度、銷毀等工作,其主要部件的管理為:CP...
    魏鎮(zhèn)坪閱讀 1,508評論 0 6
  • 進程 是 Unix 和 Linux 系統(tǒng)中對正在運行中的應用程序的抽象,通過它可以管理和監(jiān)視程序對內存、處理器時間...
    rollingstarky閱讀 6,940評論 0 5
  • Linux 進程管理與程序開發(fā) 進程是Linux事務管理的基本單元,所有的進程均擁有自己獨立的處理環(huán)境和系統(tǒng)資源,...
    JamesPeng閱讀 2,605評論 1 14
  • 1.知識星球打卡第11篇。 2.現在越來越多的細分領域專家出現,專業(yè)的事都有專業(yè)的人來做了。比如出去逛街買衣服,都...
    徐四青閱讀 177評論 0 0

友情鏈接更多精彩內容