实验原理: 1.进程的创建程序如下: #include<stdio.h> main() { int p1,p2; while((p1=fork())==-1); if(p1==0) putchar('b'); else { while((p2=fork())==-1); if(p2==0) putchar('c'); else putchar('a'); } } 2.1进程的控制程序1: #include<stdio.h> main() { int p1,p2,i; while((p1=fork())==-1); if(p1==0) for(i=0;i<50;i++) printf("child %d\n",i); else { while((p2=fork())==-1); if(p2==0) for(i=0;i<50;i++) printf("son %d\n",i); else for(i=0;i<50;i++) printf("daughter %d\n",i); } } 2.2 进程的控制程序2: #include<stdio.h> #include<unistd.h> main() { int p1,p2,i; while((p1=fork())==-1); if(p1==0) { lockf(1,1,0); for(i=0;i<50;i++) printf("child %d\n",i); lockf(1,0,0); } else { while((p2=fork())==-1); if(p2==0) { lockf(1,1,0); for(i=0;i<50;i++) printf("son %d\n",i); lockf(1,0,0); } else { lockf(1,1,0); for(i=0;i<50;i++); printf("daughter %d\n",i); lockf(1,0,0); } } } 3.1软中断通信程序1: #include<unistd.h> #include<stdio.h> #include<signal.h> void waiting(),stop(); int wait_mark; main() { int p1,p2; while((p1=fork())==-1); if(p1>0) { while((p2=fork())==-1); if(p2>0) { printf("parent\n"); wait_mark=1; signal(SIGINT,stop); waiting(0); kill(p1,16); kill(p1,17); wait(0); wait(0); printf("parent process is killed!\n"); exit(0); } else { printf("p2\n"); wait_mark=1; signal(17,stop); waiting(); lockf(stdout,1,0); printf("child process 2 is killed by parent!\n"); lockf(stdout,0,0); exit(0); } } else { printf("p1\n"); wait_mark=1; signal(16,stop); waiting(); lockf(stdout,1,0); printf("child process 1 is killed by parent!\n"); lockf(stdout,0,0); exit(0); } } void waiting() { while(wait_mark!=0); } void stop() { wait_mark=0; }
3.2软中断通信程序2: #include<unistd.h> #include<stdio.h> #include<signal.h> int pid1,pid2; int EndFlag=0,pf1=0,pf2=0; void IntDelete() { kill(pid1,16); kill(pid2,17); EndFlag=1; } void Int1() { printf("child process 1 is killed by parent!"); } void Int2() { printf("child process 2 is killed by parent!"); } main() { int exitpid; signal(SIGINT,SIG_IGN); signal(SIGQUIT,SIG_IGN); while((pid1=fork())==-1); if(pid1==0) { printf("p1\n"); signal(SIGUSR1,Int1); signal(16,SIG_IGN); pause(); } else { while((pid2=fork())==-1); if(pid2==0) { printf("p2\n"); signal(SIGUSR2,Int2); signal(17,SIG_IGN); pause(); } else { printf("parent\n"); signal(SIGINT,IntDelete); waitpid(-1,&exitpid,0); printf("parent process is killed!"); } } } 4.进程的管道通信程序: #include<unistd.h> #include<stdio.h> #include<signal.h> int pid1,pid2; main() { int fd[3]; char OutPipe[100],InPipe[100]; pipe(fd); while((pid1=fork())==-1); if(pid1==0) { printf("p1\n"); lockf(fd[1],1,0); sprintf(OutPipe,"Child 1 process is sending a message!"); write(fd[1],OutPipe,50); sleep(1); lockf(fd[1],0,0); } else { while((pid2=fork())==-1); if(pid2==0) { printf("p2\n"); lockf(fd[1],1,0); sprintf(OutPipe,"Child 2 process is sending a message!"); write(fd[1],OutPipe,50); sleep(1); lockf(fd[1],0,0); } else { printf("parent\n"); wait(0); read(fd[0],InPipe,50); printf("%s\n",InPipe); wait(0); read(fd[0],InPipe,50); printf("%s\n",InPipe);
} } } |
Linux
最新推荐文章于 2022-02-16 17:32:46 发布