父、子进程中的全局变量
来源:互联网 发布:seo教程cao4 编辑:程序博客网 时间:2024/06/06 10:00
子进程创建以后,会继承父进程的全局变量,但是继承的是父进程刚开始全局变量的值。
但是子进程创建以后,子进程修改了变量,或者父进程修改了全局变量的值,父子进程就互相都不影响了。
/* 用信号模拟司机售票员问题:创建子进程代表售票员,父进程代表司机 ,同步过程如下: 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 <stdlib.h> #include <string.h> #include <signal.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> static pid_t pid_child, pid_parent; void child_handler(int sig) { if (sig == SIGINT) { // kill(pid_parent, SIGUSR1); //错误,此时pid_parent = 0 kill(getppid(), SIGUSR1); //正确 } if (sig == SIGQUIT) { // kill(pid_parent, SIGUSR2); //错误,此时pid_parent = 0 kill(getppid(), SIGUSR2); //正确 } if (sig == SIGUSR1) printf("all get off the bus\n"); } void parent_handler(int sig) { if (sig == SIGUSR1) printf("move to next staion\n"); if (sig == SIGUSR2) printf("stop the bus\n"); if (sig == SIGTSTP) kill(pid_child, SIGUSR1); } int main(void) { pid_t ret; ret = fork(); if (ret < 0) { printf("fork fail"); exit(1); } else if (ret == 0) { /* child process */ signal(SIGTSTP, SIG_IGN); signal(SIGINT, child_handler); signal(SIGQUIT, child_handler); signal(SIGUSR1, child_handler); while (1) { pause(); } } else { /* parent process */ pid_child = getpid(); // pid_parent = getpid(); printf("pid_child = %d\n", pid_child); printf("pid_parent = %d\n", pid_parent); signal(SIGINT, SIG_IGN); signal(SIGQUIT, SIG_IGN); signal(SIGUSR1, parent_handler); signal(SIGUSR2, parent_handler); signal(SIGTSTP, parent_handler); while (1) { pause(); } } return 0; }
阅读全文
0 0
- 父、子进程中的全局变量
- 子进程和父进程是否共用同一个全局变量
- 子进程继承父进程中的锁
- linux中的子进程和父进程
- 操作系统中同一父进程中的子进程之间如何交互?不同父进程中的子进程之间如何交互?
- 父进程 子进程
- 父进程子进程
- python中的subprocess子进程
- 关于子进程中的exit-----子进程中使用exit对于子进程复制父进程数据段、堆栈的影响
- 父进程与子进程
- 子进程与父进程
- 父进程与子进程
- 子进程与父进程
- 父进程与子进程
- 父进程干掉子进程
- 多进程引用的动态链接库中的全局变量问题
- 子父进程
- Shell脚本中的return,exit 0,以及 父进程获取子进程的变量
- js闭包函数和 this指针
- Mac OS X 下Node.js开发环境的搭建
- java基础
- PAT1004
- maven dependency tree
- 父、子进程中的全局变量
- 面试题
- Docker Compose简介
- 【Linux学习】之 网络管理
- ARM-M4的记录
- vmware设置共享文件夹
- supervisord 搭建与学习积累
- JavaScript中的闭包
- RecycleView 当前可视item