系統程式設計之程序

2021-10-07 15:46:11 字數 1763 閱讀 1182

一、程序相關概述

1、相關指令

ps -aux 檢視所有程序

ps -aux|grep 程序 只會過濾出指定程序資訊

top 指令類似windows任務管理器

2、程序描述符 pid

pid = 0 稱為交換程序 --程序排程

pid =1 init程序 --系統初始化

二、c程式的儲存空間是如何分配的

從高位址到低位址 按如下順序

命令列引數和環境變數:int main(int argc,char**ar**)

棧空間:自定義的函式和其中區域性變數

堆空間: malloc和calloc

未初始化的資料:bss段 int a[128];

初始化的資料 :資料段 int a =10;

正文 :**段

三、fork函式的使用

getpid() 獲得當前程序的pid

getppid()獲得父程序的pid

#include

#include

intmain()

printf

("pid is %d\n"

,getpid()

);//父子程序都會跑

if(pid1==0)

//子程序

if(pid1>0)

//父程序

return0;

}

四、vfork函式的使用

與fork函式的區別

1、直接使用父程序的儲存空間,不拷貝

2、vfork保證子程序先執行,子程序呼叫exit後,父程序才執行

驗證demo

#include

#include

#include

#include

int cnt =0;

intmain()

}}else

if(pid >0)

}return0;

}

五、wait函式

作用:用於等待子程序的退出,**子程序退出時的狀態,子程序狀態不被**就會變成殭屍(zombie)程序(僵死程序)

檢查wait 所返回的終止狀態的巨集:

wifexited(status) 正常終止子程序產生的狀態 對於這種情況可使用wextstatus(status)

wifsignaled(status) 異常終止子程序返回的狀態 對於這種情況可使用wtermsig(status)

wifstoppeded(status) 當前暫停子程序返回的狀態 對於這種情況可使用wstopsig(status)

wifcontinued(status)

demo驗證

#include

#include

#include

#include

int cnt =0;

intmain()

}}else

if(pid >0)

}return0;

}

waitpid 與 wait 的區別

pid_t waitpid(pid_t pid, int *status, int options);

options 引數會影響 父程序是否阻塞來等待子程序## 標題

六、孤兒程序

父程序如果不等待子程序的退出,在子程序之前就結束了自己的生命,此時子程序就叫做孤兒程序

linux 避免存在過多孤兒程序,init程序收留孤兒程序,變成孤兒程序的父程序

Linux系統程式設計之程序

程序狀態 4 5種 就緒 初始化 執行,掛起 等待 停止 pbc成員 1 程序id 2 程序狀態 3 程序切換需要儲存和恢復的cpu暫存器 4 描述虛擬位址空間資訊 5 描述控制終端的資訊 6 當前工作目錄 7 umask掩碼 8 檔案描述符 9 訊號相關的資訊 10 使用者和使用者組id 11 會...

Linux 系統程式設計 之 程序 Process

知識點 1.python 跨平台 因此使用process類 而不使用 fork 2.程序建立格式 p process target p1,args process1 target 為函式名 args 為函式引數 3.p.start 建立子程序 p.join 1 主程序等待子程序 1s p.termi...

系統程式設計之檔案系統程式設計

系統呼叫 所有的作業系統都提供多種服務的入口點,程式由此向核心請求服務。這些可直接進入核心的入口點被稱為系統呼叫。不同作業系統提供了自己的一套系統呼叫,所以系統呼叫無法實現跨平台使用。而且頻繁地系統呼叫,在使用者態和核心態之間切換,很耗費資源,效率不高。c標準庫提供了操作檔案的標準i o函式庫,與系...