3.8 进程篇

阅读: 评论:0

3.8 进程篇

3.8 进程篇

用信号模拟司机售票员问题:创建子进程代表售票员,父进程代表司机 ,同步过程如下:
1 售票员捕捉SIGINT(代表开车),发SIGUSR1给司机,司机捕捉到该信号之后打印(“move to next station”)。
2 售票员捕捉SIGQUIT(代表靠站),发SIGUSR2给司机,司机捕捉到该信号之后打印(“stop the bus”)。
3 司机捕捉SIGTSTP(代表车到总站),发SIGUSR1给售票员,售票员捕捉到该信号之后打印(“all get off the bus”)。
代码如下:

#include<stdio.h>
#include<sys/types.h>
#include<signal.h>
#include<unistd.h>
#include<stdlib.h>static 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 busn");kill(0,SIGKILL);break;default:break;}}void server(int sig)
{switch(sig){case SIGUSR1:printf("gogogogon");break;case SIGUSR2:printf("stop busn");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;
}

结果如下:

本文发布于:2024-02-03 04:18:31,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170690511248601.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:进程
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23