Linux學習--進程概念

>>進程

說進程,感覺好空洞,來一張圖,Linux下的進程:


 ps -eo pid,comm,cmd
說明:-e表示列出全部進程,-o pid,comm,cmd表示我們需要PID,COMMAND,CMD信息

下面:我們好好說說,Linux下的進程的含義:

1》.程序的一個執行實例
2》.正在執行的程序。
3》.能分配處理器並由處理器執行的實體。
4》.內核觀點:擔當分配系統資源(CPU時間,內存)的實體。
進程的兩個基本元素:
程序代碼(可能被執行相同程序的其他進程共享)和代碼相關聯的數據集。
      進程是一種動態描述,但是並不代表所有的進程都在運行。(進程在內存中因策略或調度需求,會處於各種狀態)
在來看看另外一些對進程的描述:
      廣義上,所有的進程信息被放在一個叫做進程控制塊的數據結構中,可以理解爲進程屬性 的集合。 進程控制塊每個進程在內核中都有一個進程控制塊(PCB)來維護進程相關的信息,Linux內核的 進程控制塊是task_struct結構體。現在我們全面瞭解一下其中都有哪些信息。 在Linux中,這個結構叫做task_struct。 task_struct是Linux內核的一種數據結構,它會被裝載到RAM⾥裏並且包含着進程的信息。 每個進程都把它的信息放在 task_struct 這個數據結構裏,task_struct 包含了這些內容: 
1》.標示符 : 描述本進程的唯一標示符,用來區別其他進程。 
2》.狀態    :任務狀態,退出代碼,退出信號等。 
3》.優先級 :相對於其他進程的優先級。 
4》.程序計數器:程序中即將被執行的下一條指令的地址。 
5》.內存指針:包括程序代碼和進程相關數據的指針,還有和其他進程共享的內存塊的指針 
6》.上下文數據:進程執行時處理器的寄存器中的數據。 
7》.I/O狀態信息:包括顯示的I/O請求,分配給進程的I/O設備和被進程使用的文件列表。 
8》.記賬信息:可能包括處理器時間總和,使用的時鐘數總和,時間限制,記賬號等。 保存進程信息的數據結構叫做 task_struct,並且可以在 include/linux/sched.h 裏找到它。所有運行在系統裏的進程都以 task_struct 鏈表的形式存在內核裏。 進程的信息可以通過 /proc 系統文件夾查看。要獲取PID爲400的進程信息,你需要查看 / proc/400 這個文件夾。大i多數進程信息同樣可以使用top和ps這些用戶級工具來獲取。
最後借用博友的話說:

    進程是程序的一個具體實現。只有食譜沒什麼用,我們總要按照食譜的指點真正一步步實行,才能做出菜餚。進程是執行程序的過程,類似於按照食譜,真正去做菜的過程。同一個程序可以執行多次,每次都可以在內存中開闢獨立的空間來裝載,從而產生多個進程。不同的進程還可以擁有各自獨立的IO接口。操作系統的一個重要功能就是爲進程提供方便,比如說爲進程分配內存空間,管理進程的相關信息等等,就好像是爲我們準備好了一個精美的廚房。

以上爲Linux下進程的相關概念,關於進程的創建,見另一篇博客:Linux學習--進程創建

發佈了109 篇原創文章 · 獲贊 424 · 訪問量 51萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章