資源簡(jiǎn)介
參考以上示例程序中建立并發(fā)進(jìn)程的方法,編寫一個(gè)多進(jìn)程并發(fā)執(zhí)行程序。父進(jìn)程每隔 3 秒重復(fù)建立兩個(gè)子進(jìn)程,首先創(chuàng)建的讓其執(zhí)行 ls 命令,之后創(chuàng)建執(zhí)行讓其執(zhí)行 ps 命令,并控制 ps 命令總在 ls 命令之前執(zhí)行。
代碼片段和文件信息
#include“pctl.h“
int??main(?){
signal(SIGINT(sighandler_t)sigcat);
char?*argsa[]={“/bin/pwd“NULLNULL};
int?i;
int?pida;//childa‘s?pid
int?pidb;//childb‘s??pid
int?statusa;//childa‘s?status
int?statusb;//childb‘s?status
while(1){
if((pida=fork())==0){
pause();
printf(“%dChilda:?This?is?childa?running?\n“getpid());
printf(“%dChilda:?My?pid?is?%d\n“getpid());
printf(“%dChilda:?My?father‘s?pid?is?%d\n“getpid()getppid());
statusa=execve(argsa[0]argsaNULL);
}
else?{
pidb=fork();
if(pidb<0){
printf(“Create?process?pidb?fail\n“);
exit(EXIT_FAILURE);
}
else?if(pidb==0){
pause();
printf(“%dChildb:?This?is?childb?running?\n“getpid());
printf(“%dChildb:?My?pid?is?%d\n“getpid());
printf(“%dChildb:?My?father‘s?pid?is?%d\n“getpid()getppid());
statusb=execve(“/bin/ls“NULLNULL);
}
else?{
printf(“%dFather:?This?is?father?running?\n“getpid());
printf(“%dFather:?My?pid?is?%d\n?“getpid()getpid());
if(kill(pidaSIGINT)>=0){
waitpid(pida&statusa0);
sleep(3);
printf(“%dFather:?Child
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?-rw-rw-r--??????1163??2010-04-07?20:42??exp1\pctl.c
?-rw-rw-r--??????6688??2010-04-07?20:05??exp1\pctl.o
?-rwxrwxr-x?????10859??2010-04-07?20:05??exp1\pctl
?-rw-rw-r--???????170??2010-04-05?22:52??exp1\Makefile
?-rw-rw-r--???????185??2010-04-05?22:37??exp1\pctl.h
?drwxrwxr-x?????????0??2010-05-25?12:00??exp1
-----------?---------??----------?-----??----
????????????????19065????????????????????6
評(píng)論
共有 條評(píng)論