日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux父进程循环,LINUX C 父进程建立多个子进程循环非堵塞回收列子

發(fā)布時間:2023/12/9 linux 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux父进程循环,LINUX C 父进程建立多个子进程循环非堵塞回收列子 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

下面 代碼主要用于復習,留于此

點擊(此處)折疊或打開

/*************************************************************************

> File Name: fork5.c

> Author: gaopeng QQ:22389860 all right reserved

> Mail: gaopp_200217@163.com

> Created Time: Sun 02 Jul 2017 02:39:16 AM CST

************************************************************************/

#include

#include

#include

#define MAXPNUM 3

typedef struct handler

{

int* pidarr;

int childnum;

} HANDLER;

int main(void)

{

int i = 0;

int m = 0;

int psre = 0;

HANDLER pidhd;

pidhd.pidarr = (int*)calloc(MAXPNUM+1,sizeof(int));//初始化內存

pidhd.childnum = 0;//初始化進程數(shù)量

for(i = 0 ;i

{

m = fork();

if(m == –1)

{

perror(“fork:”);

}

else if( m == 0 )

{

printf(“CHILD: I is child process pid: %d parent process pid: %d n”,getpid(),getppid());

sleep(60);

break;

}

else

{

sleep(1);

pidhd.childnum ++;//進程num+1

*(pidhd.pidarr+i) = m;//指針移動+1

printf(“PARENT: I is parent process pid: %d i fock chlid pid: %d n”,getpid(),m);

}

}

if(i == MAXPNUM)//一定為父進程

{

for(i=0;*(pidhd.pidarr+i);i++)

{

printf(“child process is pid:%dn”,*(pidhd.pidarr+i));

}

}

if(i == MAXPNUM)//一定為父進程

{

printf(“parent pid %d fock child process number is %d finsh!! n”,getpid(),pidhd.childnum);

while(pidhd.childnum > 0)

{

for(i = 0;i< MAXPNUM ;i++) //WNOHANG非堵塞循環(huán)回收

{

if(*(pidhd.pidarr+i) != 0 && waitpid(*(pidhd.pidarr+i),&psre,WNOHANG) > 0 )

{

if (WIFEXITED(psre))//是否正常退出獲取其退出值

printf(“child %d exit %dn”, *(pidhd.pidarr+i), WEXITSTATUS(psre));

else if (WIFSIGNALED(psre))//是否異常退出信號終止獲得信號值

printf(“child %d cancel signal %dn”, *(pidhd.pidarr+i), WTERMSIG(psre));

*(pidhd.pidarr+i) == 0;

pidhd.childnum––;

break;

}

}

}

free(pidhd.pidarr);

}

return 1;//子進程父進程均已return 1 退出

}

輸出如下可以捕獲子線程由于kill 發(fā)信號終止:

▽aopeng@bogon:~/linux0411/process$ ./a.out

CHILD: I is child process pid: 2588 parent process pid: 2587

PARENT: I is parent process pid: 2587 i fock chlid pid: 2588

CHILD: I is child process pid: 2589 parent process pid: 2587

PARENT: I is parent process pid: 2587 i fock chlid pid: 2589

CHILD: I is child process pid: 2590 parent process pid: 2587

PARENT: I is parent process pid: 2587 i fock chlid pid: 2590

child process is pid:2588

child process is pid:2589

child process is pid:2590

parent pid 2587 fock child process number is 3 finsh!!

child 2588 cancel signal 9

child 2589 cancel signal 15

child 2590 cancel signal 11

可以捕獲正常終止

gaopeng@bogon:~/linux0411/process$ ./a.out

CHILD: I is child process pid: 2597 parent process pid: 2596

PARENT: I is parent process pid: 2596 i fock chlid pid: 2597

CHILD: I is child process pid: 2598 parent process pid: 2596

PARENT: I is parent process pid: 2596 i fock chlid pid: 2598

CHILD: I is child process pid: 2599 parent process pid: 2596

PARENT: I is parent process pid: 2596 i fock chlid pid: 2599

child process is pid:2597

child process is pid:2598

child process is pid:2599

parent pid 2596 fock child process number is 3 finsh!!

child 2599 cancel signal 1

child 2597 exit 1

child 2598 exit 1

來自 “ ITPUB博客 ” ,鏈接:http://blog.itpub.net/7728585/viewspace-2140651/,如需轉載,請注明出處,否則將追究法律責任。

總結

以上是生活随笔為你收集整理的linux父进程循环,LINUX C 父进程建立多个子进程循环非堵塞回收列子的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。