- 博客(15)
- 资源 (10)
- 收藏
- 关注
原创 75-初识线程
1. 问题提出 编写程序模拟 Allen 和 Luffy 爬楼,楼层是从 1-10 层。Allen 每上一层休息 10ms,Luffy 每上一层休息 5ms. (需要注意的是 Allen 和 Luffy 是一起爬楼的,而非某个人先爬楼,爬完后接着另一个人爬楼。)对于上述问题,利用多进程编程可以很好的解答。我们可以在父进程中执行 Allen 的爬楼过程而在子进程中执行 Luffy 的爬楼过程。但
2017-02-27 13:08:22 1687 7
转载 Linux 中 pthread 线程库历史
作者:大河 链接:https://www.zhihu.com/question/35128513/answer/148038406 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 原问题:Linux下调用pthread库创建的线程是属于用户级线程还是内核级线程?求大神指教?这个事情,还真不是一句话就能回答的,因为涉及到Linux和编译器的版本关于线程的概
2017-02-27 09:53:27 3723
原创 74-守护进程(实现)
前面已经介绍了守护进程的基本概念,还介绍了一个系统为我们提供的函数 daemon 函数,通过该函数可以创建守护进程。本文主要分析 daemon 函数是如何实现的。通过前文的实验结果可以猜测,守护进程的创建步骤必定需要 fork 子进程,创建会话,关闭标准输入、标准输出和标准错误文件描述符。1. 守护进程编写规则(1) 设置 umask。 (2) 调用 fork,然后使父进程退出。这样做保证子进程
2017-02-26 19:05:30 1264 8
原创 72-孤儿进程与孤儿进程组
之前有学习过僵尸进程,它指的是“未老先衰”的子进程先于父进程去逝,而父进程未对它进行回收(wait)所产生的。本文来谈谈,另一个对立的概念——孤儿进程,以及孤儿进程组。1. 孤独进程如果一个进程,它的父进程先终止了,则该进程成为孤儿进程。此后,该进程的父进程变为 1 号 init 进程。下面的代码可以产生一个孤儿进程。int main() { pid_t pid = fork(); if (
2017-02-26 15:02:51 3307 2
原创 71-后台进程组与控制终端
本篇需要理清后台进程组与控制终端的关系。我们已经知道,如果会话有一个控制终端,只有前台作业接收终端输入。1. 问题提出如果后台进程组中的进程尝试读写控制终端,会怎么样?这里有两种情况,分别如下:读控制终端终端驱动程序会检测到此种情况,并向后台进程组中的所有进程发送一个特定信号 SIGTTIN. 默认情况下些信号导致此后台进程组停止。写控制终端终端驱动程序会检测到并向后台进程组中的所有进程发送
2017-02-25 17:28:35 1195 8
原创 70-设置前台进程组
如果一个会话有控制终端,那么该会话就有一个前台进程组。此时在终端中的输入以及终端产生的信号默认都发送给前台进程组中的所有进程。前台进程组是可以通过程序进行设置的。在同一个会话中,调用 tcsegpgrp 函数可以设置某个进程组为前台进程组。1. 目标任务1: 在 bash 中启动你的进程,然后将前台进程组设置为 bash 所在的进程组。 任务2:关闭启动你进程的终端,查看你的进程能收到什么信号。2
2017-02-25 15:07:01 1360
原创 69-控制终端、前台进程组与后台进程组
1. 控制终端一般来说,在 bash 中运行的进程,都会伴随着一个控制终端。默认情况下(没有重定向),每个进程的标准输入、标准输出和标准错误输出都指向控制终端。需要特别注意的是,控制终端是进程的属性,它保存在进程 PCB 中。而 bash 进程在启动的时候,会自动建立一个控制终端。所以由 bash 进程启动(fork)的进程都会继承控制终端。所以在同一个会话中,控制终端都是一样的。进程可以没有控制终
2017-02-24 17:56:14 2281 1
原创 68-会话(创建会话)
在掌握会话的相关概念后,本篇完成一个创建会话的实例。1. 目标创建一个新会话,该会话中只有一个进程,就是创建该会话的进程。2. 思路创建会话的一个必要条件就是创建会话的进程不能是进程组组长。 这样做的理由是:假设该进程是进程组组长,创建完该会话后,该进程成为了其它会话中的 session leader。然而,其组员(如果存在的话)仍然存在于原来的会话中,这将导致同一个进程组中的进程处在不同会话中
2017-02-24 11:19:40 2332 2
原创 67-会话
1. 会话的基本概念前面已经学过,进程组是一个或多个进程的集合。而会话(session),是一个或多个进程组的集合。创建进程组的进程,是进程组组长,而创建会话的进程,是会话长,通常我们不说会话长,而是称其为会话首进程,用英文其实更加确切——session leader.图 1 展示了一个会话。 图1 进程组和会话中的进程安排 图 1 中的会话,可以使用以下命令形成:$ cat | cat &
2017-02-23 18:53:34 1125
原创 66-进程组(实验二)
上一篇文章完成了一个有关进程扇和进程组的练习,不过在结尾处留了一个小坑,本篇也不打算继续填坑,毕竟这是作为练习留在篇末的。1. 目标本篇希望利用进程链完成一个小实验,希望达到图 1 中的效果,即将进程 0 (父进程)和进程 2 设置成一组,假设为组 1,将进程 1 和 进程 3 设置成另一个组,假设为组 2. 另外,我们希望进程 0 和进程 1 分别是这两个组的组长。 图1 将进程链分成两组
2017-02-23 16:48:33 1046 1
原创 65-进程组(实验一)
在上一节,我们仅仅对进程组做了一个简单的介绍,以及两个相关的函数 getpgid 和 setpgid,不知道你有没有完成最后那个练习。如果你遇到困难,可以在文章后面留言,或者加入讨论群 610441700。1. 目标本篇希望利用进程扇完成一个小实验。该进程扇有 1 个父进程和 3 个子进程,我们希望达到图 1 中的效果,即将进程 0 (父进程)和进程 1 设置成一组,假设为组 1,将进程 2 和 进
2017-02-23 11:02:07 1240 2
原创 64-进程组
1. 进程组概念在 linux 中,进程不但有自己的 id 号,还会有一个组 id 号。我们把拥有相同组 id 号的进程的集合称为一个进程组。信号与进程组使用 kill -n -pgid 可以将信号 n 发送到进程组 pgid 中的所有进程。例如命令 kill -9 -4115 表示杀死进程组 4115 中的所有进程。进程组的生命期从被创建开始,到其内所有进程终止或离开该组。 例如,
2017-02-22 16:58:59 1461
原创 63-进程扇与进程链
本章话题主要关注进程间关系。比如有关进程组、进程组组长、会话、前台进程组等这些概念。设计进程扇和进程链的概念,是为了方便描述进程间关系以及完成相关的实验。1. 进程扇如果有一个进程,它生成了若干个进程,这若干个进程之间都是兄弟进程,就把这种关系称为进程扇结构,这一系列进程就是一个进程扇。如图 1 所示。 图1 进程扇 1.1 进程扇构造代码// ps_swing.c#include <un
2017-02-21 17:48:12 2309
原创 C++ 实现反射机制
1. 什么是反射学过 Java 或 C# 的同学应该都知道“反射”机制,很多有名的框架都用到了反射这种特性。这是一种很牛逼的特性,简单的理解就是只根据类的名字就可以获取到该类的实例。有人会说,这不是多此一举吗?直接 new 一个出来不就行了吗?像下面这样:class Person {public: virtual void show() = 0;}class Allen : public
2017-02-20 15:35:57 11472 8
GCC 内联汇编
2018-10-28
梯度下降法VS2008_C++
2014-10-23
增强版事故树绘制与分析程序
2013-04-19
事故树绘制分析软件
2012-12-17
MFC 音乐播放器
2012-12-12
汇编_单片机_matlab_Multisim等
2010-11-24
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人