導航:首頁 > 編程系統 > linux創建多個子進程

linux創建多個子進程

發布時間:2022-01-19 22:34:06

linux 父進程創建子進程的例子

父進程為什麼要創建子進程呢?前面我們已經說過了Linux是一個多用戶操作系統,在同一時間會有許多的用戶在爭奪系統的資源.有時進程為了早一點完成任務就創建子進程來爭奪資源. 一旦子進程被創建,父子進程一起從fork處繼續執行,相互競爭系統的資源.有時候我們希望子進程繼續執行,而父進程阻塞直到子進程完成任務.這個時候我們可以調用wait或者waitpid系統調用.
#i nclude
#i nclude

pid_t wait(int *stat_loc);
pid_t waitpid(pid_t pid,int *stat_loc,int options);

wait系統調用會使父進程阻塞直到一個子進程結束或者是父進程接受到了一個信號.如果沒有父進程沒有子進程或者他的子進程已經結束了wait回立即返回.成功時(因一個子進程結束)wait將返回子進程的ID,否則返回-1,並設置全局變數errno.stat_loc是子進程的退出狀態.子進程調用exit,_exit 或者是return來設置這個值. 為了得到這個值Linux定義了幾個宏來測試這個返回值.
WIFEXITED:判斷子進程退出值是非0
WEXITSTATUS:判斷子進程的退出值(當子進程退出時非0).
WIFSIGNALED:子進程由於有沒有獲得的信號而退出.
WTERMSIG:子進程沒有獲得的信號號(在WIFSIGNALED為真時才有意義).
waitpid等待指定的子進程直到子進程返回.如果pid為正值則等待指定的進程(pid).如果為0則等待任何一個組ID和調用者的組ID相同的進程.為-1時等同於wait調用.小於-1時等待任何一個組ID等於pid絕對值的進程. stat_loc和wait的意義一樣. options可以決定父進程的狀態.可以取兩個值 WNOHANG:父進程立即返回當沒有子進程存在時. WUNTACHED:當子進程結束時waitpid返回,但是子進程的退出狀態不可得到.
父進程創建子進程後,子進程一般要執行不同的程序.為了調用系統程序,我們可以使用系統調用exec族調用.exec族調用有著5個函數.
#i nclude

int execl(const char *path,const char *arg,…);
int execlp(const char *file,const char *arg,…);
int execle(const char *path,const char *arg,…);
int execv(const char *path,char *const argv[]);
int execvp(const char *file,char *const argv[]):

exec族調用可以執行給定程序.關於exec族調用的詳細解說可以參考系統手冊(man execl). 下面我們來學習一個實例.注意編譯的時候要加 -lm以便連接數學函數庫.

#i nclude
#i nclude
#i nclude
#i nclude
#i nclude
#i nclude

void main(void)
{
pid_t child;
int status;

printf(」This will demostrate how to get child status\n」);
if((child=fork())==-1)
{
printf(」Fork Error :%s\n」,strerror(errno));
exit(1);
}
else if(child==0)
{
int i;
printf(」I am the child:%ld\n」,getpid());
for(i=0;i<1000000;i++) sin(i);
i=5;
printf(」I exit with %d\n」,i);
exit(i);
}
while(((child=wait(&status))==-1)&(errno==EINTR));
if(child==-1)
printf(」Wait Error:%s\n」,strerror(errno));
else if(!status)
printf(」Child %ld terminated normally return status is zero\n」,
child);
else if(WIFEXITED(status))
printf(」Child %ld terminated normally return status is %d\n」,
child,WEXITSTATUS(status));
else if(WIFSIGNALED(status))
printf(」Child %ld terminated e to signal %d znot caught\n」,
child,WTERMSIG(status));
}

strerror函數會返回一個指定的錯誤號的錯誤信息的字元串.

⑵ Linux下C語言 編寫程序創建3個進程,三個進程分別完成不同的事情

兩次建立子進程就行了啊~~
父子孫:
pid_tpid;
pid=fork();
//進程地址空間獨立
if(pid<0){
}
if(pid==0){ 專
pid=fork();
if(pid<0){
}
if(pid==0){
printf("789");//孫
}
if(pid>0){
printf("456");//子
}
}
if(pid>0){
printf("123");//父
}
發散思屬維即可

⑶ Linux中的用fork()如何由一個父進程創建同時多個子進程

int status,i;
for (i = 0; i < 10; i++)
{
status = fork();
if (status == 0 || status == -1) break;
}
if (status == -1)
{
//error
}
else if (status == 0)
{
//sub process
}
else
{
//parent process
}

⑷ linux建立進程,生成兩個子進程,一個進行加法,一個進行除法,最後結果由父進程輸出

個人覺得分別輸出結果也OK
但是非要用主進程輸出的話可以創建管道子進程把運算結果放到管道中,父進程從管道中取出來然後輸出就OK了,具體實現方法參照進程間通信相關技術。

⑸ linux'中,怎麼創建一個父進程和5個子進程,且父子進程都一直處於運行態

你是不會創建子進程還是對子進程有什麼特殊需求?
一直運行恐怕比較難,只有流氓軟體採用第三方進程監控並不斷創建,無法確保一個進程始終存活的

⑹ 在linux中用fork()函數創建進程,若連續創建多個子進程而不使用條件進行各自空間的分隔,會出現什麼情況

輸出16個'A'

⑺ 在linux創建多進程(3個進程)的程序,父進程向每個子進程傳遞不同的參數!!! 謝謝!!!怎樣傳遞參數了

不知道你是不是學習編程的,如果不是就沒必要看了。

1.PID是進程標識號,它是一個進程的唯一性標識。PPID是該進程父進程的進程標識號。

2.fork和exec和pid完全就是2件事情不能混為一談。fork是一個linux庫函數。他是用來創建一個新的進程。至於exec是一個系列函數,C標准庫函數,用來改變進程上下文的。2者結合使用可以創建一個新的進程。

3.如果創建新的進程,一般是用fork,他會返回這個被創建進程的PID,你可以通過PID找到這個進程。

⑻ linux父進程創建兩個子進程

#include"stdio.h"
#include"stdlib.h" //exit包含在stdlib.h頭文件
#include"unistd.h"
int main(void)
{
pid_t pid1,pid2;
pid1=fork();
switch(pid1)
{
case 0: //進程創建成功,返回值為0
printf("b"); //子進程1創建成功,輸出b
break;
case -1:
printf("Process creation failed\n");//子進程創建失敗,輸出錯誤信息
break;
default:
printf("a");//此時執行父進程,輸出a
sleep(1);
exit(0);
break;
}
pid2=fork();
switch(pid2)
{
case 0: //進程創建成功,返回值為0
printf("c"); //子進程2創建成功,輸出c
break;
case -1:
printf("Process creation failed\n");//子進程創建失敗,輸出錯誤信息
exit(0);
break;
default:
printf("a");//此時執行父進程,輸出a
//sleep(1);
exit(0);
break;
}
exit(0);
}

⑼ linux下創建多進程,一個父進程可以有多個子進程嗎,如果可以的話,父進程和多個子進程的關系是什麼

2是誰創建的,他爹就是誰
fork會把子進程數據結構中的父進程號設置為當前進程號

⑽ linux下一個程序建立多個進程,如何保證多個子進程同步。

你可以看看linux操作系統原理相關書籍,裡面有介紹進程管理的,有關於同步於互斥的處理方法。如:臨界資源,臨界區,p v 原語等

閱讀全文

與linux創建多個子進程相關的資料

熱點內容
電影理發師殺死女友 瀏覽:419
word2003剪貼板 瀏覽:208
手機微信文件已過期或已被清理怎麼辦 瀏覽:997
免費看會員電影網站 瀏覽:639
女生去找在北京送快遞的男朋友的電影 瀏覽:67
子非魚網路技術有限公司 瀏覽:119
適合二人看的愛情片怦然心動 瀏覽:830
Linux安裝軟體還是文件啊 瀏覽:322
如何在線找網路主播 瀏覽:493
趣味編程如何下載 瀏覽:26
測繪大數據處理 瀏覽:739
appstore禁用銀行卡 瀏覽:369
ios支持文件夾導入的看書軟體 瀏覽:657
微信轉賬5000元圖片 瀏覽:703
桂林萬象城電影院今日影訊 瀏覽:58
note4文件管理移植 瀏覽:682
那種在線觀看網址鏈 瀏覽:321
資料庫中性別用什麼字元 瀏覽:672
易捷文件加密軟體注冊碼 瀏覽:312
一部關於偵探下馬和綉花鞋的老電影 瀏覽:19

友情鏈接