用信号模拟司机售票员问题:创建子进程代表售票员,父进程代表司机,同步过程如下:
1 售票员捕捉(代表开车),发给司机,司机捕捉到该信号之后打印(“move to next ”) 。
2 售票员捕捉(代表靠站),发给司机,司机捕捉到该信号之后打印(“stop the bus”) 。
文章插图
3 司机捕捉(代表车到总站),发给售票员,售票员捕捉到该信号之后打印(“all get off the bus”) 。
代码如下:
文章插图
#include#include#include#include#includestatic pid_t pid;void client(int sig){switch(sig){case SIGINT:kill(getppid(),SIGUSR1); break;case SIGQUIT:kill(getppid(),SIGUSR2);break;case SIGUSR1:printf("get off bus\n");kill(0,SIGKILL);break;default:break;}}void server(int sig){switch(sig){case SIGUSR1:printf("gogogogo\n");break;case SIGUSR2:printf("stop bus\n");break;case SIGTSTP:kill(pid,SIGUSR1);break;default:break;}}int main(void){if((pid = fork()) < 0){perror("fork");exit(1);}else if(pid == 0){signal(SIGINT,client); //ctrl+csignal(SIGQUIT,client); //ctrl+\signal(SIGUSR1,client);signal(SIGTSTP,SIG_IGN);while(1){pause();}}else{signal(SIGINT,SIG_IGN);signal(SIGQUIT,SIG_IGN);signal(SIGUSR1,server);signal(SIGUSR2,server);signal(SIGTSTP,server); //ctrl+zwhile(1){pause();}}return 0;}
【3.8 进程篇-通信:司机与售票员问题】结果如下:
- 进程通信——司机售票员问题
- 译言网浏览软件使用说明 -- 软件下载篇
- 三 Android逆向修改资源文件
- 智能车图像处理18-进阶篇10--三叉路口辅助判断
- 【node.js】看这一篇就够了!标准node项目文件和项目执行过程简要分析
- 计算机发展史上的冷知识·手动时期篇
- 深度学习在花椒直播中的应用——排序算法篇
- 超分之VSRT
- SQL注入攻击入门篇
- 6、响应式布局 和 自定义样式 一步步开发自己的博客.NET版 剧终篇