2019独角兽企业重金招聘Python工程师标准>>>

/*
*基于信号处理的司机与售票员进程同步问题
*题目要求:SIGINT(表开车),由售票员接收,发送信号SIGUSR1给司机,司机打印run the bus
*SIGQUIT(表停车),由售票员接收,发信号SIGUSR2给司机,司机打印stop the bus
*SIGTSTP(表车到总站),由司机接收,发信号SIGUSR1给售票员,售票员打印get off the bus
* */
#include <stdio.h>
#include <signal.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/wait.h>
pid_t pid;
void conductor_handler(int signo);
void driver_handler(int signo);
int main()
{
    if((pid = fork()) < 0){ //pid为子进程号
        perror("fork error.\n");
    }
    else if(pid == 0){ //child process conductor
        signal(SIGTSTP,SIG_IGN);    //conductor进程不接收ctrl-z
        signal(SIGINT,conductor_handler);
        signal(SIGQUIT,conductor_handler);
        signal(SIGUSR1,conductor_handler);
        while(1){
            pause();
        }
    }
    else{   //parent process driver
        signal(SIGINT,SIG_IGN); //driver进程不接收ctrl-c 
        signal(SIGQUIT,SIG_IGN);    //driver进程不接收ctrl-'\'
        signal(SIGTSTP,driver_handler);
        signal(SIGUSR1,driver_handler);
        signal(SIGUSR2,driver_handler);
        while(1){
            pause();
        }
    }
    return 0;
}
void conductor_handler(int signo)
{
    switch(signo)
    {
    case SIGINT :
        kill(getppid(),SIGUSR1);
        break;
    case SIGQUIT:
        kill(getppid(),SIGUSR2);
        break;
    case SIGUSR1:
        printf("Final station ,all get off.\n");
        exit(0);    //到终点子进程结束
    }
}
void driver_handler(int signo)
{
    switch(signo)
    {
    case SIGTSTP :
        kill(pid,SIGUSR1);
        wait(NULL); //等待子进程先结束,终点已到进程退出
        exit(0);
    case SIGUSR1 :
        printf("bus will run...\n");
        break;
    case SIGUSR2 :
        printf("bus will stop...\n");
        break;
    }
}

转载于:https://my.oschina.net/u/2546684/blog/686026

linux司机售票员问题相关推荐

  1. C Linux 公交司机售票员问题

    #include<stdio.h> #include<stdlib.h> #include<unistd.h> #include<pthread.h> ...

  2. 操作系统P、V操作,司机-售票员问题(c++实现)

    问题描述及信号量设定 设公共汽车上,司机和售票员的活动分别是: 司机:启动车辆–正常行驶–到站停车: 售票员:关车门–售票–开车门: 信号量(semaphore)的数据结构为一个值和一个指针,指针指向 ...

  3. c 语言实现司机与售票员线程,用多线程模拟汽车司机与售票员需求分析试验报告...

    <用多线程模拟汽车司机与售票员需求分析试验报告>由会员分享,可在线阅读,更多相关<用多线程模拟汽车司机与售票员需求分析试验报告(5页珍藏版)>请在人人文库网上搜索. 1.操作系 ...

  4. 操作系统复习笔记(四)

    10.司机和售票员之间要协同工作:一方面只有售票员把车门关好了司机才能开车,因此售票员关好车门应通知司机开车;另一方面只有当汽车已经停下时,售票员才能开门让乘客上下客,司机停车后应该通知售票员,假定某 ...

  5. 南京邮电大学操作系统实验二:线程的互斥与同步

    实验原理及内容 基于互斥锁的临界区管理 使用编辑器gedit 2_1.c,新建一个2_1.c源文件,创建双线程并发完成订票操作,输入后面的范例代码: #include <stdio.h> ...

  6. 操作系统 (二): 进程与线程

    本文为<现代操作系统>的读书笔记 目录 进程 (process) 多道程序设计模型 程序顺序执行与并发执行 前驱图和程序执行 并发执行 进程模型 进程控制 创建进程 进程是何时被创建的? ...

  7. 幼儿园教师怎么教计算机知识,幼儿园教师的常识教案大全

    幼儿园教师的常识教案大全 幼教常识教案:十二生肖 设计意图: 随着新年的到来,周围环境中新年气氛也在不断浓厚起来,孩子们在挂历.广告中或多或少地了解到,今年是羊年.有幼儿说,今年生的小宝宝是属羊的.而 ...

  8. 冰炭不投day博客导航

    文章目录 前言 一.Android应用层 1.Android之View篇[完结] 2.Android之Rxjava篇[完结] 3.Android之网络请求篇[完结] 4.Android之IPC篇[完结 ...

  9. IDCardReader-身份证信息写入Excel模板

    介绍 身份证信息读取的软件IDCardReader.通过CVR100U读卡器,读取身份证信息,并可导出到任意定制的Excel模板.具备如下功能: 通用读卡 旅客登记 驾校报名 劳务实名登记 特种作业培 ...

  10. 计算机操作系统 PV题目

    struct Semaphore{int value;queue process; }; 吃水果问题 问题描述: 桌子上有一只盘子,每次只能放一个水果,爸爸专向盘中放苹果,妈妈专向盘中放桔子,儿子专吃 ...

最新文章

  1. 手把手教你怎么在linux安装c++编译器
  2. Quartz Java编程
  3. C语言-第21课 - 指针基础
  4. 用自然语言教育人工智能:百度新算法发展出zero-shot学习能力
  5. 【Spring-Cached】Cached之Caffeine
  6. 华为交换机常见STP/RSTP操作
  7. java罗马数字_整数转罗马数字以及罗马数字转整数(java实现)
  8. 不确定中找到确定性, IBM开出哪些疫后企业数字化新处方?
  9. 工厂模式之抽象工厂模式
  10. 【HUST】网络攻防实践|5_二进制文件补丁技术|实验二 getshell
  11. 激光打印机热定影器的组成以及维护
  12. (C++题目)定义一个描述学生基本情况的类Student,数据成员包括姓名、学号、英语成绩和高数成绩;成员函数包括构造函数、析构函数、获取姓名、获取学号、求出平均成绩,以及显示各
  13. 入手评测 华为擎云 L410怎么样
  14. 进化计算原理和实现(遗传算法)
  15. Java中Integer.MAX_VALUE/Integer.MIN_VALUE的含义
  16. NIST原子光谱数据库使用说明
  17. HashMap概述与用法总结
  18. 云原生Envoy边缘服务代理简介和使用指南
  19. 对标汽车之家,新势力杉车网的另类崛起
  20. 组合逻辑和时序逻辑的区别

热门文章

  1. Atitit. 解决unterminated string literal 缺失引号
  2. Atitit. 软件---多媒体区---- jmf 2.1.1 Java Media Framework 支持的格式
  3. 技术狂何波:战斗在程序化交易第一线
  4. 阿里巴巴四十大盗教你零知识证明
  5. 通力法评 | 简评中国证监会关于MOM产品的征求意见稿
  6. 新兴IT企业特斯拉(二)——特斯拉的诞生
  7. Open Source Drives IOT From Device to Edge
  8. 【心电信号】基于matlab心电信号PTT+HRV+PRV【含Matlab源码 158期】
  9. 毕设题目:Matlab表盘识别
  10. 【三维路径规划】基于matlab多种算法无人机三维路径规划【含Matlab源码 300期】