进程的创建和管理

一. 实验内容

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

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-15 15:26:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-15 15:26:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-06-15 15:26:03       82 阅读
  4. Python语言-面向对象

    2024-06-15 15:26:03       91 阅读

热门阅读

  1. Hive 面试题(七)

    2024-06-15 15:26:03       24 阅读
  2. 搜索文档的好助手

    2024-06-15 15:26:03       36 阅读
  3. js中reduce方法是什么

    2024-06-15 15:26:03       68 阅读
  4. 【react】react 使用 Context 的简单示例

    2024-06-15 15:26:03       27 阅读
  5. 科技创新对农业发展的影响

    2024-06-15 15:26:03       29 阅读
  6. 在 npm 上发布包 npm publish

    2024-06-15 15:26:03       29 阅读
  7. Ollama部署的模型,怎么被调用

    2024-06-15 15:26:03       29 阅读
  8. Notepad++ 使用正则表达式删除空行空格方法

    2024-06-15 15:26:03       31 阅读
  9. btstack协议栈实战篇--LE Peripheral - Delayed Response

    2024-06-15 15:26:03       33 阅读