题目:请解释wait是如何同步父子进程的。

程序代码:

  1. #include <stdio.h>
  2. #include <unistd.h>
  3. #include <sys/types.h>
  4. #include <stdlib.h>
  5. #include <sys/wait.h>
  6.  
  7. int main()
  8. {
  9. pid_t pid;
  10. printf("Start main..., pid:%d\n", getpid());
  11. pid = fork();
  12. if (pid == 0) {
  13. sleep(3); // 父进程先执行完毕,本应先退出,却因为wait而等待子进程
  14. printf("This is a child process, pid:%d\n", getpid());
  15. }
  16. else {
  17. printf("This is father process, pid:%d\n", getpid());
  18. }
  19. printf("End main.., pid:%d\n", getpid());
  20. wait(NULL); // 父进程等到子进程结束才退出
  21. return 0;
  22. }

  

题目:编写一个守护进程,要求其一直打开记事本。

程序代码:

  1. #include <stdio.h>
  2. #include <unistd.h>
  3. #include <sys/wait.h>
  4. #include <sys/stat.h>
  5. #include <stdlib.h>
  6. #include <fcntl.h>
  7.  
  8. int startDaemon()
  9. {
  10. pid_t pid;
  11. pid = fork();
  12. if (pid > 0) {
  13. exit(0); // step1:父进程退出
  14. }
  15. pid = setsid(); // step2:tty = ?
  16. if (pid < 0) {
  17. perror("fail to setsid");
  18. return -1;
  19. }
  20. chdir("/"); // step3:修改工作目录为/
  21.  
  22. int fd = open("/dev/null", O_RDWR);
  23. if (fd < 0) {
  24. perror("fail to open /dev/null");
  25. return -1;
  26. }
  27. dup2(fd, STDIN_FILENO); // step4:关闭文件描述符
  28. dup2(fd, STDOUT_FILENO);
  29. dup2(fd, 2);
  30. umask(033); // step5:其他人只有只读权限,去除w、x权限
  31. return 0;
  32. }
  33.  
  34. int main()
  35. {
  36. startDaemon(); // 此进程已经是守护进程
  37. while(1) {
  38. pid_t pid = fork();
  39. if (pid == 0) {
  40. execlp("gedit", "gedit", NULL);
  41. }
  42. wait(NULL); // 阻塞,只有子进程退出时,即记事本关闭后才能进入下一循环
  43. }
  44. return 0;
  45. }

自测之Lesson8:进程操作的更多相关文章

  1. 基于ADB框架Robotium跨进程操作

    转自:http://blog.csdn.net/qingchunjun/article/details/42580937 2015年2月3日更新: 有些朋友在用真机尝试本方法时,抛出了InputStr ...

  2. C#进程操作

    C#进程操作 转:http://www.cnblogs.com/vienna/p/3560804.html 一.C#关闭word进程  foreach (System.Diagnostics.Proc ...

  3. Linux进程操作信息

    Linux进程操作简单小结 linux上进程有5种状态: 1. 运行(正在运行或在运行队列中等待) 2. 中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号) 3. 不可中断(收到信号不唤醒和不 ...

  4. 在Python程序中的进程操作,multiprocess.Process模块

    在python程序中的进程操作 之前我们已经了解了很多进程相关的理论知识,了解进程是什么应该不再困难了,刚刚我们已经了解了,运行中的程序就是一个进程.所有的进程都是通过它的父进程来创建的.因此,运行起 ...

  5. python 全栈开发,Day38(在python程序中的进程操作,multiprocess.Process模块)

    昨日内容回顾 操作系统纸带打孔计算机批处理 —— 磁带 联机 脱机多道操作系统 —— 极大的提高了CPU的利用率 在计算机中 可以有超过一个进程 进程遇到IO的时候 切换给另外的进程使用CPU 数据隔 ...

  6. 第十五章、python中的进程操作-开启多进程

    目录 第十五章.python中的进程操作-开启多进程 一.multprocess模块 二.multprocess.process模块 三.Process()对象方法介绍 四.Process()对象属性 ...

  7. Process Monitor监控进程操作注册表如何实现?

    http://zhidao.baidu.com/link?url=Kqav4qkQSprC5FnpHPOGJvhqvY9fJ9-Vdx9g_SWh4w5VOusdRJo4Vl7qIdrG4LwRJvr ...

  8. C# 调用word进程操作文档关闭进程

    C# 调用word进程操作文档关闭进程 作者:Jesai 时间:2018-02-12 20:36:23 前言: office办公软件作为现在主流的一款办公软件,在我们的日常生活和日常工作里面几乎每天都 ...

  9. Python程序中的进程操作--—--开启多进程

    Python程序中的进程操作-----开启多进程 之前我们已经了解了很多进程相关的理论知识,了解进程是什么应该不再困难了,刚刚我们已经了解了,运行中的程序就是一个进程.所有的进程都是通过它的父进程来创 ...

随机推荐

  1. C# Server.MapPath的使用方法

    (1)WebForm中: HttpContext.Current.Server.MapPath("~/Files/car/"); (2)Mvc中: Server.MapPath() ...

  2. 前端js转换时间戳为时间类型显示

    //时间戳转换 function add0(m){return m<10?'0'+m:m } function formatDate(timestamp) { //timestamp是整数,否则 ...

  3. flask第三方插件WTForms

    在django中有ModelForm, 虽然flask原生没有提供, 但是强大的第三方也提供了这样的功能 虽然不如django的强大, 但是基本的功能还是可以有的, 下面就来使用一哈. WTForms ...

  4. 【JVM】上帝视角看JVM内存模型,分而治之论各模块详情

    1. 上帝视角 [树看JVM] [图看JVM] 2. 分而治之 2.1 堆区 构成:堆区由新生代和老年代组成,新生代中包含伊甸区(Eden).幸存者区(survivor from .survivor ...

  5. yii学习笔记(6),连接数据库,创建活动记录类

    创建数据库用于测试 配置数据库连接 打开yii的配置文件目录下的数据库配置文件config/db.php <?php return [ 'class' => 'yii\db\Connect ...

  6. Python 爬虫 (四)

    requests: 练手 雪qiu网 import requests import json import re import pymysql url = 'https://xueqiu.com/v4 ...

  7. linux静态链接库

    库 库是写好的现有的,成熟的,可以复用的代码.现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常 本质上来说库是一种可执行代码的二进制形式,可以被操作系统载 ...

  8. 顺序表删除值为 x 的元素

    思路: 不要去考虑删除的字眼,要考虑如何进行保存非 x 的值 这里提供两种解法,殊途同归: 1.将其中非 x 的元素统计并保存 2.统计为 x 的元素个数,并将非 x 的元素保存 注意事项: 注意这里 ...

  9. CORDIC算法(1):圆周旋转模式下计算三角函数和模值

    CORDIC(Coordinate Rotation Digital Computer)坐标旋转数字计算机,是数学与计算机技术交叉产生的一种机器算法,用于解决计算机的数学计算问题.发展到现在,CORD ...

  10. CSS-cascading stle sheets

    CSS-cascading stle sheets 1.      CSS 什么是CSS?CSS 指层叠样式表 (Cascading Style Sheets) 样式定义如何显示 HTML 元素 样式 ...