进程的创建和管理

一. 实验内容

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()函数了解了操作系统的进程之间的相互阻塞去进行先后顺序的改变。

  • 22
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

-Initiation

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值