一. 实验内容 1. 编写一个程序,程序中创建一个子进程。然后父、子进程各自独立运行,父进程不断地在标准输出设备(即显示器)上输出字母p和回车(输出30次或以上),子进程不断地在标准输出设备(即显示器)上输出字母c和回车(输出30次或以上)。 提示:相关的系统调用或函数:fork( ) 多次运行程序,观察程序输出的结果,并做出合理的解释。 2. (附加题,选做)编写一个程序,程序中创建两个子进程,然后三个进程各自独立运行。 父进程每隔1秒钟输出一个字母P和回车,共输出10次; 子进程1每隔2秒钟输出一个字母C和回车,共输出10次; 子进程2每隔3秒钟输出一个字母S和回车,共输出10次; 父进程必须等待两个子进程都结束后输出一句“Finish!”,然后才结束退出。 提示:可能使用到的系统调用或函数: sleep( ) wait( ) 3. 你如果有其他方法可以影响(或改变)父、子进程的执行顺序?写出你的方法,论证其正确性,并加以实现。实现结果是否与预期的一致? |
1. #include<unistd.h> #include<stdio.h> int main() { int i; pid_t fpid; int count = 0; fpid = fork(); if(fpid == 0) { for(i=0;i<30;i++) { usleep(10); printf("c \n"); } } else { for(i=0;i<30;i++) { usleep(15); printf("p \n"); } } return 0; } 2. #include<unistd.h> #include<stdio.h> #include <sys/wait.h> int main() { int i; pid_t fpid; int count = 0; fpid = fork(); if(fpid == 0) { for(i=0;i<10;i++) { sleep(2); printf("c \n"); } } else { fpid=fork(); if(fpid==0) { for(i=0;i<10;i++) { printf("s\n"); sleep(3); } } else{ for(i=0;i<10;i++) {usleep(1); printf("p \n"); } wait(NULL); wait(NULL); printf("finish!"); } } return 0; } 3.可以采用vfork函数确保子进程优先完成或者PV操作实现先后顺序的改变。 |
1. 2. 3. |
1. 借助fork函数和Linux系统完成进程的创建并观察到两个进程相互独立输出拥有自己的空间因此明白了操作系统的进程的含义。 2. 借助wait()函数了解了操作系统的进程之间的相互阻塞去进行先后顺序的改变。 |