8章 进程控制
来源:互联网 发布:c语言源代码大全 编辑:程序博客网 时间:2024/06/06 00:19
不同进程直接不同步或者通信就会产生竞争关系。
下面是一个父子进程同时输出,没有进行同步处理
static void print(char *str){ char *ptr; char c; setbuf(stdout , NULL); for(ptr = str ;(c = *ptr++) != 0 ;){//这句for循环,先初始化ptr,然后利用c等于一个值,++的情况处理,既可以遍历,也可以输出. putc(c , stdout); sleep(1);//睡觉一秒 }}int main(void){ pid_t pid; if((pid = fork()) < 0) err_sys("fork error\n"); else if(pid == 0){ print("child ouput\n"); }else{ print("parent ouput\n"); } exit(0);}
pcahirelnd to oupuuput //输出相互干扰,毫无逻辑。必须加上通信机制
t
按 来关闭窗口…
sigset_t newmask , oldmask , waitmask;volatile sig_atomic_t sigflag = 0;static void sig_int(int signo){ sigflag = 1;//信号已经到达,可以同步了} void tell_wait(void) { if(signal(SIGUSR1 , sig_int) == SIG_ERR)//注册信号 err_sys("signal(SIGUSR1) error"); if(signal(SIGUSR2 , sig_int) == SIG_ERR)//注册信号 err_sys("signal(SIGUSR2) error"); sigemptyset(&newmask); sigaddset(&newmask , SIGUSR1); sigaddset(&newmask , SIGUSR2); sigemptyset(&waitmask);// if(sigprocmask(SIG_BLOCK , &newmask , &oldmask) < 0)//屏蔽INT信号 err_sys("SIG_BLOCK err");//屏蔽这两个信号,因为此处单独用作进程通信使用. } void tell_parent(pid_t pid) { kill(pid , SIGUSR2); } void wait_parent(void) { while (sigflag == 0) sigsuspend(&waitmask); sigflag = 0; if(sigprocmask(SIG_SETMASK , &oldmask , NULL) < 0)//恢复INT信号 err_sys("SIG_SETMASK error"); } void tell_child(pid_t pid) { kill(pid , SIGUSR1); } void wait_child(void) { while (sigflag == 0) sigsuspend(&waitmask); sigflag = 0; if(sigprocmask(SIG_SETMASK , &oldmask , NULL) < 0)//恢复INT信号 err_sys("SIG_SETMASK error"); } static void print(char *str) { char *ptr; char c; setbuf(stdout , NULL); for(ptr = str ;(c = *ptr++) != 0 ;){//这句for循环,先初始化ptr,然后利用c等于一个值,++的情况处理,既可以遍历,也可以输出. putc(c , stdout); sleep(1);//睡觉一秒 } } int main(void) { pid_t pid; tell_wait(); if((pid = fork()) < 0) err_sys("fork error\n"); else if(pid == 0){ wait_parent(); print("child ouput\n"); }else{ print("parent ouput\n"); tell_child(pid);//这里父进程先运行 } exit(0); }
parent ouput
按 来关闭窗口…//因为父进程先退出了
child ouput
阅读全文
1 0
- 8章 进程控制
- 第8章 进程控制
- 第8章 进程控制
- 第8章 进程控制
- APUE读书笔记-第8章进程控制
- apue 第8章 进程控制
- 8进程控制
- 专题 8 进程控制
- Chapter 8 进程控制
- 8(进程控制)
- 第八章 进程控制
- 第八章 进程控制
- 第六章 进程控制
- 第八章 进程控制
- 第八章 进程控制
- 第二章 进程控制
- 8、进程控制(1)
- [APUE]第八章 进程控制
- 人脸识别系列-Centerloss论文阅读笔记
- 个人简历APP cocos制作
- js实现常见排序方法
- 【BZOJ1007】【HNOI2008】水平可见直线
- 【s5p4418嵌入式学习】分步编译之module编译05
- 8章 进程控制
- 大数据排重算法-布隆算法(BloomFilter)
- 微信小程序--后端管理平台业务4--Mybatis模糊查询相关
- 排序算法之归并排序
- 数据结构-数组
- 机器学习故事汇-决策树算法
- scala实现超限学习机(ELM)手写数字分类
- Android之点击返回键退出程序
- java正则表达式匹配