資源簡介
參考以上示例程序中建立并發進程的方法,編寫一個多進程并發執行程序。父進程每隔 3 秒重復建立兩個子進程,首先創建的讓其執行 ls 命令,之后創建執行讓其執行 ps 命令,并控制 ps 命令總在 ls 命令之前執行。
代碼片段和文件信息
#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
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?-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
評論
共有 條評論