Linux系統程式設計 程序控制 三

2021-07-15 19:02:59 字數 2691 閱讀 7864

使用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

再編譯第二個程式,gcc -o execve execve.c

執行結果

由結果可知,當呼叫新函式以後,原有的子程序的映像被替代,子程序永遠不會執行到printf(「process never go to here\n」)。

當子程序先於父程序退出時,如果父程序沒有呼叫wait和waitpid函式,子程序就會進入僵死狀態,成為殭屍狀態。

#include

#include

pid_t wait(int

*statloc);

pid_t waitpid(pid_t pid, int

*statloc, int options);

wait函式使父程序暫停執行,直到他的乙個子程序結束為止。

該函式的返回值是終止執行的子程序的pid。

引數statloc所指向的變數存放子程序的退出碼,即子程序的main函式返回的值或子程序中exit函式的引數。

wairpid用於等待某個特定程序結束,引數pid要指明等待的子程序的pid。

實現**

setuid設定實際使用者id和有效使用者id;setgid用來設定實際組id和有效組id

#include

#include

int setuid(uid_t uid);

int setgid(gid_t gid);

setuid函式遵循以下規則(setgid函式類似)

a.若程序具有root許可權,則函式將實際使用者id、有效使用者id設定為引數uid

b.若程序不具有root許可權,但uid等於實際使用者id,則setuid只將有效使用者id設定為uid

c.若以上兩個條件都不滿足,則函式呼叫失敗,返回-1。

1、getpriority
#include

int getpriority(int which, int who);

函式返回一組程序的優先順序

which和who的意義

prio_process:乙個特定的程序,此時who的取值為程序id

prio_pgrp:乙個程序組的所有程序,此時who的取值為程序組id

prio_user:乙個使用者擁有的所有程序,此時引數who取值為實際使用者id

2、setpriority
#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...