gdb除錯:
設定父程序除錯路徑:set follow-fork-mode parent (預設)
設定子程序除錯路徑:set follow-fork-mode child
exec函式族:
使程序執行某一程式。成功無返回值,失敗返回 -1
int execlp(const char *file, const char *arg, ...); 借助 path 環境變數找尋待執行程式
參1: 程式名
參2: ar**0
參3: ar**1
...: ar**n
哨兵:null
int execl(const char *path, const char *arg, ...); 自己指定待執行程式路徑。
int execvp();
ps ajx --> pid ppid gid sid
孤兒程序:
父程序先於子進終止,子程序淪為「孤兒程序」,會被 init 程序領養。
殭屍程序:
子程序終止,父程序尚未對子程序進行**,在此期間,子程序為「殭屍程序」。 kill 對其無效。
wait函式: **子程序退出資源, 阻塞**任意乙個。
pid_t wait(int *status)
引數:(傳出) **程序的狀態。
返回值:成功: **程序的pid
失敗: -1, errno
函式作用1: 阻塞等待子程序退出
函式作用2: 清理子程序殘留在核心的 pcb 資源
函式作用3: 通過傳出引數,得到子程序結束狀態
獲取子程序正常終止值:
wifexited(status) --》 為真 --》呼叫 wexitstatus(status) --》 得到 子程序 退出值。
獲取導致子程序異常終止訊號:
wifsignaled(status) --》 為真 --》呼叫 wtermsig(status) --》 得到 導致子程序異常終止的訊號編號。
waitpid函式: 指定某乙個程序進行**。可以設定非阻塞。 waitpid(-1, &status, 0) == wait(&status);
pid_t waitpid(pid_t pid, int *status, int options)
引數: pid:指定**某乙個子程序pid
> 0: 待**的子程序pid
-1:任意子程序
0:同組的子程序。
status:(傳出) **程序的狀態。
options:wnohang 指定**方式為,非阻塞。
返回值:
> 0 : 表成功**的子程序 pid
0 : 函式呼叫時, 參3 指定了wnohang, 並且,沒有子程序結束。
-1: 失敗。errno
總結:
wait、waitpid 一次呼叫,**乙個子程序。
想**多個。while
程序間通訊的常用方式,特徵:
管道:簡單
訊號:開銷小
mmap對映:非血緣關係程序間
socket(本地套接字):穩定
管道:
實現原理: 核心借助環形佇列機制,使用核心緩衝區實現。
特質; 1. 偽檔案
2. 管道中的資料只能一次讀取。
3. 資料在管道中,只能單向流動。
侷限性:1. 自己寫,不能自己讀。
2. 資料不可以反覆讀。
3. 半雙工通訊。
4. 血緣關係程序間可用。
pipe函式: 建立,並開啟管道。
int pipe(int fd[2]);
引數: fd[0]: 讀端。
fd[1]: 寫端。
返回值: 成功: 0
失敗: -1 errno
管道的讀寫行為:
讀管道:
1. 管道有資料,read返回實際讀到的位元組數。
2. 管道無資料: 1)無寫端,read返回0 (類似讀到檔案尾)
2)有寫端,read阻塞等待。
寫管道:
1. 無讀端, 異常終止。 (sigpipe導致的)
2. 有讀端: 1) 管道已滿, 阻塞等待
2) 管道未滿, 返回寫出的位元組個數。
linux 管道建立程序
程序i o函式,與pclose函式一起使用。include stdio.h file popen const char command,const char type intpclose file stream popen 函式通過建立乙個管道,呼叫 fork 產生乙個子程序,執行乙個 shell ...
linux管道pipe詳解
管道是一種最基本的ipc機制,作用於有血緣關係的程序之間,完成資料傳遞。呼叫pipe系統函式即可建立乙個管道。有如下特質 1.其本質是乙個偽檔案 實為核心緩衝區 2.由兩個檔案描述符引用,乙個表示讀端,乙個表示寫端。3.規定資料從管道的寫端流入管道,從讀端流出。管道的原理 管道實為核心使用環形佇列機...
linux管道pipe詳解
管道是一種最基本的ipc機制,作用於有血緣關係的程序之間,完成資料傳遞。呼叫pipe系統函式即可建立乙個管道。有如下特質 1.其本質是乙個偽檔案 實為核心緩衝區 2.由兩個檔案描述符引用,乙個表示讀端,乙個表示寫端。3.規定資料從管道的寫端流入管道,從讀端流出。管道的原理 管道實為核心使用環形佇列機...