程序狀態(4/5種):就緒(初始化),執行,掛起(=等待), 停止
pbc成員:
1、程序id
2、程序狀態
3、程序切換需要儲存和恢復的cpu暫存器
4、描述虛擬位址空間資訊
5、描述控制終端的資訊
6、當前工作目錄
7、umask掩碼
8、檔案描述符
9、訊號相關的資訊
10、使用者和使用者組id
11、會話(session)和程序組
12、資源使用上限(命令ulimit -a, 檢視資源上限值)
2.1 環境變數
環境變數,是指在作業系統中用來指定作業系統執行環境的一些引數。通常具備以下特徵:
① 字串(本質) ② 有統一的格式:名=值[:值] ③ 值用來描述程序環境資訊。
2.1、環境變數
在libc庫中使用外部名變數:environ獲取當前系統全部的系統變數。
2.2、獲取和設定環境變數
獲取環境變數介面名稱:
#include
/*param:
name: 表示環境變數名稱
*/char *getenv(const
char *name);
設定和取消環境變數
#include
/*param:
name: 環境變數名
value: 環境變數
rewrite:0:不覆蓋,非0:覆蓋
*/int setenv(const
char* name, const
char *value, int rewrite);
/*param:
name:環境變數名
*/void unsetenv(const
char *name);
例子:
建立程序:
#include
#include
#include
int var = 34;
int main(void)
else
if (pid > 0) else
if (pid == 0)
printf("var = %d\n", var);
return
0;}
4、如何建立n個程序
簡單想想寫下如下**:
for(int i = 0; i
< n; i++)
else
if(pid == 0)
else
}
但這樣事實果真如此嗎?上述情況建立程序會建立2^n-1個程序,因為在子程序中還會去建立孫程序,如此子子孫孫建立得不是n個程序。避免已建立的子程序也去建立程序,我們應該在else if(pid == 0)上就break來跳出當前的for迴圈。
set follow-fork
-mode child //切換子程序
set follow-fork
-mode father //gdb下預設進入父程序,切換回子程序
在gdb下上面兩個命令實現父程序和子程序的切換
孤兒程序:父程序優先於子程序結束,則子程序成為孤兒程序,孤兒程序由init程序管理。
殭屍程序:程序終止,父程序尚未**,子程序殘留資源(pcb)存放在核心中。
1. 子程序都是通過父程序來**的。如果父程序先退出子程序還在執行,就會產生孤兒程序。
2. 殭屍程序是不能用kill 命令清除掉的,因為kill 命令只是用來終止程序的,而殭屍程序已經終止了。
子程序**函式:
#include
#include
/*param:
status:傳出引數
return:
成功:pid, 失敗:-1
功能:1、阻塞等待子程序 2、**子程序資源 3、獲取程序結束狀態
wifexited(status)=true/false;
wexitstatus(status)獲取子程序退出狀態
wifsignaled(status)=true/false
wtermsig(status)獲取終止子程序的訊號編號
*/pid_t wait(int status);
/*param:
pid:
pid > 0 指定程序**
pid =-1 **任意子程序
pid = 0 **本組任意子程序
pid
status: 參考wait()
options: 0:阻塞**
wnohang:非阻塞**(需要輪詢查)
return:
成功:pid 失敗 -1 返回0:options=wnohang,此時子程序未結束
*/pid_t waitpid(pid_t pid, int *status, int options);
特點:1. 如果子程序還在執行會阻塞等待。
2. 帶子程序的終止資訊立即返回。
3. 出錯(return -1)立即返回。
區別:
如果父程序的所有子程序都還在執行,呼叫wait將使父程序阻塞,而呼叫waitpid時如果在options引數中指定wnohang可以使父程序不阻塞而立即返回0。
wait等待第乙個終止的子程序,而waitpid可以通過pid引數指定等待哪乙個子程序。
系統程式設計之程序
一 程序相關概述 1 相關指令 ps aux 檢視所有程序 ps aux grep 程序 只會過濾出指定程序資訊 top 指令類似windows任務管理器 2 程序描述符 pid pid 0 稱為交換程序 程序排程 pid 1 init程序 系統初始化 二 c程式的儲存空間是如何分配的 從高位址到低...
Linux 系統程式設計 之 程序 Process
知識點 1.python 跨平台 因此使用process類 而不使用 fork 2.程序建立格式 p process target p1,args process1 target 為函式名 args 為函式引數 3.p.start 建立子程序 p.join 1 主程序等待子程序 1s p.termi...
linux系統程式設計之程序訊號的使用
訊號捕捉特性 1.程序正常執行時,預設pcb中有乙個訊號遮蔽字,假定為 它決定了程序自動遮蔽哪些訊號,當註冊了某個訊號捕捉函式,捕捉到該訊號以後,要呼叫該函式,而該函式有可能執行很長時間,在這期間所遮蔽的訊號不由來指定,而是用sa mask來指定,調完訊號處理函式,再次恢復 2.訊號捕捉函式執行期間...