linux進程概論

来源:http://www.cnblogs.com/lang5230/archive/2016/06/07/5566665.html
-Advertisement-
Play Games

1操作系統幾大模塊 進程管理,進程調度,進程間通訊機制,記憶體管理,中斷異常處理,文件系統,I/O系統,網網路部分。 2操作系統的目的 管理硬體設備,為上層應用程式提供良好的執行環境。 3linux系統基本結構 進程描述PCB 廣義上,所有的進程信息被放在一一個叫做進程式控制制塊的數據結構中,可以理解為進 ...


1操作系統幾大模塊

  進程管理,進程調度,進程間通訊機制,記憶體管理,中斷異常處理,文件系統,I/O系統,網網路部分。

2操作系統的目的

  管理硬體設備,為上層應用程式提供良好的執行環境。

3linux系統基本結構

 

進程描述PCB

廣義上,所有的進程信息被放在一一個叫做進程式控制制塊的數據結構中,可以理解為進程屬性的集合。linux 下該結構偽task_struct

其中包含的基本信息

標示符 : 描述本進程的唯一一標示示符,用用來區別其他進程。
狀態 :任務狀態,退出代碼,退出信號等。
優先順序 :相對於其他進程的優先順序。
程式計數器:程式中即將被執行行的下一一條指令的地址。
記憶體指針:包括程式代碼和進程相關數據的指針,還有和其他進程共用的記憶體塊的指針。
上下文文數據:進程執行行時處理器的寄存器中的數據。
I/O狀態信息:包括顯示示的I/O請求,分配給進程的I/O設備和被進程使用用的文文件列表。
記賬信息:可能包括處理器時間總和,使用用的時鐘數總和,時間限制,記賬號等

保存進程信息的數據結構叫做 task_struct,並且可以在 include/linux/sched.h 裡裡找到它。所有運行行在系統裡裡的進程都以 task_struct 鏈表的形式存在內核裡裡。
進程的信息可以通過 /proc 系統文文件夾查看。要獲取PID為400的進程信息,你需要查看 /proc/400 這個文文件夾。大大多數進程信息同樣可以使用用top和ps這些用用戶級工具來獲取。

獲取進程標識符

 

進程位置(進程地址空間)

測試

關於環境變數的獲取與修改

這裡:setenv第三個參數為0時,如果環境變數存在,則不修改,直接返回。為非0 時,則如果存在,那麼修改

進程狀態

static const char * const task_state_array[] = {
"R (running)", /* 0 */
"S (sleeping)", /* 1 */
"D (disk sleep)", /* 2 */
"T (stopped)", /* 4 */
"t (tracing stop)", /* 8 */
"X (dead)", /* 16 */
"Z (zombie)", /* 32 */
};

其中的S 是可中斷睡眠狀態(interruptible sleep),可以被喚醒的,而D狀態是不可終端睡眠(uninterruptible sleep),只有自己醒來或者關機動作終止睡眠。

僵死狀態(Zombies)是一一個比比較特殊的狀態。當進程退出並且父父進程(使用用wait()系統調
用用)沒有讀取到子子進程退出的返回代碼時就會產生生僵死進程。僵死進程會以終止止狀態保持
在進程表中,並且會一一直在等待父父進程讀取退出狀態代碼。

進程狀態之間基本切換規則

向進程發送信號改變狀態

命令  kill,killall

kill  -l  獲取具體的命令編號以及信息

具體用法請自行man kill

另外查看進程狀態的幾個命令是   ps    pstree    top

進程優先順序

在ps 的列中有   

PRI :代表這個進程可被執行行的優先順序,其值越小小越早被執行

NI :代表這個進程的nice值。

PRI也還是比較好理解的,即進程的優先順序,或者通俗點說就是程式被CPU執行行的先後順序,此值越小小進程的優先順序別越高。

nice值了,其表示進程可被執行的優先順序的修正數值。

PRI(new)=PRI(old)+nice

 

註: 這裡的nice值是對於運行中程式優先順序的修正,所以參考點都是pri的預設值。而非當前值。

進程執行

進程記憶體佈局分為四個不同的段:
     •     文文本段,包含程式的源指令。
     •     數據段,包含了靜態變數。
     •     堆,動態記憶體分區區域。
     •     棧,動態增長與收縮的段,保存本地變數。

僵屍進程:一個子進程在其父進程沒有調用wait()或waitpid()的情況下退出。這個子進程就是僵屍進程。如果其父進程還存在而一直不調用wait,則該僵屍進程將無法回收,等到其父
進程退出後該進程將被init回收。

孤兒進程:一個父進程退出,而它的一個或多個子進程還在運行,那麼那些子進程將成為孤兒進程。孤兒進程將被init進程(進程號為1)所收養,並由init進程對它們完成狀態收集工作。

 進程終止止
進程終止止的方方式有8種,前5種為正常終止止,後三種為異常終止止:
1 從main函數返回;
2 調用用exit函數;
3 調用用_exit或_Exit;
4 最後一一個線程從啟動常式返回;
5 最後一一個線程調用用pthread_exit;
6 調用用abort函數;
7 接到一一個信號並終止止;
8 最後一一個線程對取消請求做出響應。
(1)exit函數
#include <stdlib.h>
void exit( int status );
void _Exit( int status );
#include <unistd.h>
void _exit( int status );

exit()做相應的資源清理工作而後返回內核。其他兩個直接返回內核。

exit()和return返回效果一樣

2)atexit函數
#include <stdlib.h>
int atexit( void (*fun)( void ) );

用於註冊程式結束時運行方法,類似與sethandler機制或者戲夠函數機。

且,註冊順序與執行順序相反。類似析構過程


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 這幾天要求做一個伺服器的統計信息,主要針對錶和索引。下麵我就簡單分享幾個查詢數據表和索引統計信息的方法: 1.使用T-SQL 語句實現: 執行結果如圖 這種方法的優點如下: 運行速度快。 由於不訪問用戶表,不會影響性能,不加鎖。 靈活組合,也可以與其他語句聯合查詢金結果。 2. 使用系統存儲過程sp ...
  • YARN資源調度器 轉載請註明出處: "http://www.cnblogs.com/BYRans/" 概述 集群資源是非常有限的,在多用戶、多任務環境下,需要有一個協調者,來保證在有限資源或業務約束下有序調度任務,YARN資源調度器就是這個協調者。 YARN調度器有多種實現,自帶的調度器為Capa ...
  • 在Oracle資料庫中,與用戶有關的表有三種,一是用戶自己創建的表,二是數據字典視圖,三是動態性能視圖。在後兩種視圖中,用戶可以查詢自己關心的信息。 數據字典視圖 數據字典是一種系統表,它在資料庫被創建時自動產生,並且由資料庫伺服器本身進行維護和更新。在數據字典中包含了資料庫的相關信息。 在數據字典 ...
  • 回到目錄 MultipleActiveResultSets可以使資料庫連接復用,但當你上了moebius這種集群工具後,這個選項不能開啟(預設是false),當你使用EF等ORM工具時,這個選項會預設的加上了,它是為了改進程式的性能,好處就是怕資料庫的連接資源被耗盡了,使用方法很簡單,只需要把它加到 ...
  • 前面已經提到,資料庫伺服器包括實例和資料庫兩部分。 其中資料庫是用來存儲數據的,而實例是用來訪問資料庫中的數據的。實例包括一組記憶體結構和後臺進程,而資料庫的結構需要從邏輯結構和物理結構兩個方面來理解。資料庫的邏輯結構是指數據的邏輯組織形式,是Oracle內部用來管理數據的機制。資料庫的物理結構是從用 ...
  • Sqlserver2005日誌文件太大,使其減小的方法: 運行下麵的三行 dbName為資料庫名: backup log dbNamewith NO_LOG backup log dbNamewith TRUNCATE_ONLY DBCC SHRINKDATABASE(dbName) 日誌文件減小到 ...
  • 背景介紹: 對於一個互聯網平臺來說,高併發是經常會遇到的場景。最有代表性的比如秒殺和搶購。高併發會出現三個特點: 1、高併發讀取 2、高併發寫入(一致性) 3、出現超賣問題 如何有效的解決這三個問題是應對高併發的關鍵。 一般系統都分為前端和後端。 前端如何應對? 1、緩存靜態數據,例如圖片,html ...
  • 量產前準備: 1. 插上U盤,(台式機的話插機箱後面) 2. 一臺電腦,最好不要裝殺毒軟體(特別是360) 3. ISO鏡像文件 請先耐心看完教程: 1. 打開:"MPALL_F1_9000_v329_0B"進入量產界面: 2. 點擊"Setting"進入設定畫面: 選擇"New Seting"、" ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...