進程的了解與僵屍進程的實現


進程概念:程序的一個執行實例,正在執行的程序等

內核觀念:擔當分配系統資源(CPU時間,內訓存)的實體

查看進程:

  進程存放在根目錄下的proc文件中,可以通過/proc系統文件查看:

    使用ps aux | grep test 

  通過系統調用創建進程—fork(在創建子進程的時候其實是復制了task_struct)

  fork有兩個返回值:返回值為大於0為:父進程  返回值等於0:子進程  返回值等於-1:創建失敗

  fork創建出來的父子進程代碼共享,但數據獨有(數據各自開辟空間,私有一份)

  

進程狀態:

  R:運行狀態(並不意味着進程一定在運行,表示在隊列中或者運行中)

  S:睡眠狀態(意味着進程在等待事件的完成,也叫可中斷狀態)

  T:停止狀態(可以通過發送信號SIGSTOP信號給進程來停止進程,也可以通過信號繼續)

  X:死亡狀態(只是一個返回狀態,你不會在列表中看到這個狀態)

  Z:僵屍狀態(當進程退出並且父進程沒有讀取到子進程的退出返回代碼時就會產生僵屍進程)

實現僵屍進程:

  代碼如下,我們將子進程睡10 秒后退出,然后查看進程的狀態

  

       

  在復制一個SSH渠道,在頁面中輸入ps aux | head -n 1 && ps aux | grep fork 用來查看進程的狀態

       

       

  在運行了10 秒后,子進程退出,則進入僵屍狀態

       

   僵屍進程的危害:

    1.在維護退出狀態本身就是要用數據維護,也屬於進程基本信息,所以保存在tsak_struct(PCB)中,換句話說如果Z狀態一直不退出,PCB就要一直對進程進行維護

    2.而創建了子進程卻不回收,則會由大量的內存資源浪費,存在內存泄露問題

進程優先級:

  概念:

    cpu資源分配的先后順序,就是指進程的優先權(priority)。

    優先權高的進程有優先執行權利。配置進程優先權對多任務環境的linux很有用,可以改善系統性能。

    還可以把進程運行到指定的CPU上,這樣一來,把不重要的進程安排到某個CPU,可以大大改善系統整 體性能

  命令:ps -l  查看進程的優先級

  其中PRI表示優先級:默認為80

  UID : 代表執行者的身份

  PID : 代表這個進程的代號

  PPID :代表這個進程是由哪個進程發展衍生而來的,亦即父進程的代號

  PRI :代表這個進程可被執行的優先級,其值越小越早被執行,那么加入nice值后,將會使得PRI變為:PRI(new)=PRI(old)+nice

  NI :代表這個進程的nice值 (范圍:-20 ——19)nice的值只會影響到進程的優先級變化,並不是優先級 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM