使用fork或vfork建立子程序以後,子程序呼叫exec函式來執行另外乙個函式。
exec函式族
#include
int execve(const
char *path, char *const argv, char *const envp);
int execv(const
char *path, char *const envp);
int execle(const
char *path, const
char *arg, ...);
int execl(const
char *path, const
char *arg, ...);
int exevp(const
char *file, char *const argv);
int execlp(const
char *file, const
char *arg, ...);
用來替換程序映像的程式
exec函式實現程式
先編譯第乙個程式,生成可執行檔案:gcc -o processimage processimage.c當子程序先於父程序退出時,如果父程序沒有呼叫wait和waitpid函式,子程序就會進入僵死狀態,成為殭屍狀態。再編譯第二個程式,gcc -o execve execve.c
執行結果
由結果可知,當呼叫新函式以後,原有的子程序的映像被替代,子程序永遠不會執行到printf(「process never go to here\n」)。
#include
#include
pid_t wait(int
*statloc);
pid_t waitpid(pid_t pid, int
*statloc, int options);
wait函式使父程序暫停執行,直到他的乙個子程序結束為止。wairpid用於等待某個特定程序結束,引數pid要指明等待的子程序的pid。該函式的返回值是終止執行的子程序的pid。
引數statloc所指向的變數存放子程序的退出碼,即子程序的main函式返回的值或子程序中exit函式的引數。
實現**
setuid設定實際使用者id和有效使用者id;setgid用來設定實際組id和有效組id
#include
#include
int setuid(uid_t uid);
int setgid(gid_t gid);
setuid函式遵循以下規則(setgid函式類似)
a.若程序具有root許可權,則函式將實際使用者id、有效使用者id設定為引數uid1、getpriorityb.若程序不具有root許可權,但uid等於實際使用者id,則setuid只將有效使用者id設定為uid
c.若以上兩個條件都不滿足,則函式呼叫失敗,返回-1。
#include
int getpriority(int which, int who);
函式返回一組程序的優先順序
which和who的意義
prio_process:乙個特定的程序,此時who的取值為程序id2、setpriorityprio_pgrp:乙個程序組的所有程序,此時who的取值為程序組id
prio_user:乙個使用者擁有的所有程序,此時引數who取值為實際使用者id
#include
int setpriority(int which, int who, int prio);
函式返回指定程序的優先順序,出錯返回-1。
3、nice
#include
int nice(int increment);
nice系統呼叫是getpriority和setpriority的一種組合形式,nice系統呼叫相當於:
int nice(int increment)
Linux系統程式設計 程序控制
for 函式使用 include include include int main void else if pid 0 else if pid 0 return 0 正確建立n個子程序 include include include int main void else if pid 0 else...
Linux系統程式設計(7) 程序控制 程序等待
程序等待 父程序對子程序進行程序等待,等待是為了讀取子程序的執行結果 標頭檔案 include include pid t wait int status 返回值 成功返回被等待程序pid,失敗返回 1。引數 輸出型引數,獲取子程序退出狀態,不關心則可以設定成為null wait函式輸乙個阻塞式函式...
Linux系統程式設計 03 程序控制塊PCB
程序控制塊 也叫程序描述符。程序控制塊位於核心空間 sesstion 針對所有的程序 程序組 相似屬性的程序放到一組 檢視程序上下限 book 100ask ulimit a core file size blocks,c 0 data seg size kbytes,d unlimited sch...