进程的控制
1进程的创建
#include<stdio.h> #include<unistd.h> #include<stdlib.h> int main() { int p1,p2; while((p1=fork())==-1) exit(1);//创建子进程P1 if(p1==0) { putchar('b'); putchar('\n'); } else { while((p2=fork())==-1) exit(1);//创建子进程P2 if(p2==0) { putchar('c'); putchar('\n'); } else//父进程 { putchar('a'); putchar('\n'); } } return 0; }
使用gdb调试过程:
qrx@qrx-pc:~/osexp/sy1$ gcc -g bz1.c -o bz1 qrx@qrx-pc:~/osexp/sy1$ gdb bz1 -q Reading symbols from bz1...done. (gdb) l 1 #include<unistd.h> 2 #include<stdio.h> 3 #include<stdlib.h> 4 int main() 5 { 6 int p1,p2; 7 while((p1=fork())==-1) exit(1); 8 if(p1==0) 9 printf("b\n"); 10 else (gdb) break 5 Breakpoint 1 at 0x4005ce: file bz1.c, line 5. (gdb) r Starting program: /home/qrx/osexp/sy1/bz1 Breakpoint 1, main () at bz1.c:7 7 while((p1=fork())==-1) exit(1); (gdb) p p1 $1 = 0 (gdb) n b 8 if(p1==0) (gdb) p p1 $2 = 3633 (gdb) n 12 while((p2=fork())==-1) exit(1); (gdb) p p2 $3 = 0 (gdb) n c 13 if(p2==0) (gdb) p p2 $4 = 3635 (gdb) n 16 printf("a\n"); (gdb) n a 18 return 0;
2编写程序创建进程树如图 1 和图 2 所示,在每个进程中显示当前进程识别码和父进程识别码。

#include<stdio.h> #include<stdlib.h> #include<sys/types.h> #include<unistd.h> int main() { int p1,p2,p3,fpid; fpid=getpid();//获取父进程pid while((p1=fork())==-1) exit(1); if(p1==0) { printf("b-pid:%d,fpid:%d\n",getpid(),fpid); while((p2=fork())==-1) exit(1); if(p2==0) { printf("c-pid:%d,fpid:%d\n",getpid(),fpid); while((p3=fork())==-1) exit(1); if(p3==0) printf("d-pid:%d,fpid:%d\n",getpid(),fpid); } } else { printf("fpid:%d\n",fpid); } return 0; }
#include<stdio.h> #include<sys/types.h> #include<unistd.h> #include<stdlib.h> int main() { int p1,p2,p3,p4,fpid; fpid=getpid(); while((p1=fork())==-1) exit(1); if(p1==0) { printf("b-pid:%d,fpid:%d\n",getpid(),fpid); while((p2=fork())==-1) exit(1); if(p2==0) { printf("c-pid:%d,fpid:%d\n",getpid(),fpid); } } else { while((p3=fork())==-1) exit(1); if(p3==0) { printf("d-pid:%d,fpid:%d\n",getpid(),fpid); while((p4=fork())==-1) exit(1); if(p4==0) { printf("e-pid:%d,fpid:%d\n",getpid(),fpid); } } else { printf("fpid:%d\n",getpid()); } } return 0; }

浙公网安备 33010602011771号