进程创建、signal实现进程间通信、进程间管道通信及进程控制代码及解析

操作系统课做了关于进程间通信的实验,做完以后有挺多感慨的,这里分享一下。

(1)进程的创建

基本思路:父进程fork出两个子进程,wait(0)等待子进程分别输出”child1”,”child2”后再输出parent.

代码:

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/wait.h>
#include<sys/types.h>
int main(){
        int pid;
        while((pid=fork())==-1); //这么做保证子进程一定会创建
        if(!pid){    //子进程1
                printf("Child1\n");
                exit(0);
        }
        else{
                while((pid=fork())==-1);
                if(!pid){ //子进程2
                        printf("Child2\n");
                        exit(0);
                }
                else{  //父进程
                        wait(0);//等待任意一个子进程死亡
                        wait(0);
                        printf("Parent\n");
                        exit(0);
                }
        }
}

运行结果

其实这里有一个bug,就是不同的机器下运行的结果可能不同,有可能你的机器上看你到的就是Child2在Child1前面。这是因为我们不能确定fork()之后cpu要调度哪个进程。所以能有以上的运行结果可以说是巧合,放到别人的机器上很可能就不是这样了。如果我们要实现无论什么机器上运行上述并发程序都能呈现这样的结果,就需要借助下面实验要用到的signal函数。

(2)进程间通信

实验要求: 

①编制一个程序,使其实现进程的软中断通信。     要求:使用系统调用 fork()创建两个子进程,再用系统调用 signal()让父进程捕捉键盘 上来的中断信号(即 DEL 键);当捕捉到中断信号后,父进程用系统调用 kill()向两个子进 程发出信号,子进程捕捉到信号后分别输出下列信息后终止:         Child Process 1 is Killed by Parent!         Child Process 2 is Killed by Parent! 父进程等待两个子进程终止后,输出如下信息后终止:         Parent Process is killed! 

②在上面的程序中增加语句 signal(SIGIN

  • 5
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值