05 2018 档案

摘要:信号源为目标进程产生了一个信号,然后由内核来决定是否要将该信号传递给目标进程。从信号产生到传递给目标进程的流程图如下图所示: 进程可以阻塞信号的传递。当信号源为目标进程产生了一个信号之后,内核会执行依次执行下面操作, 1. 如果目标进程设置了忽略该信号,则内核直接将该信号丢弃。 2. 如果目标进程没 阅读全文
posted @ 2018-05-31 17:09 red_leaf_412 阅读(911) 评论(0) 推荐(0) 编辑
摘要:使用alarm函数可以设置一个定时器,在将来的某个时刻该定时器超时。当定时器超时后,产生SIGALRM信号。如果忽略或不捕捉此信号,则其默认动作是终止调用该alarm函数的进程 #include<unistd,h> unsigned int alarm(unsigned int seconds); 阅读全文
posted @ 2018-05-30 11:43 red_leaf_412 阅读(4353) 评论(0) 推荐(0) 编辑
摘要:信号是软件中断,很多比较重要的应用程序都需要处理信号。并且信号提供了一种处理异步事件的方法。如终端用户键入中断键,会通过信号机制停止一个程序,或及早终止管道中的下一个程序 很多条件都可以产生信号,比如用户键入某些终端键,CTRL+C或者delete,进程调用kill(2)函数可将任意信号发送给另一个 阅读全文
posted @ 2018-05-29 22:26 red_leaf_412 阅读(568) 评论(0) 推荐(0) 编辑
摘要:前面介绍了单个.o文件的格式以及里面的内容。那么如果我们有多个目标文件,如何将它们链接成一个可执行的文件呢。多个目标文件就涉及到了链接。我们首先介绍静态链接。 有如下2个文件,test.c/test1.c test.c #include<stdlib.h> #include<stdio.h> ext 阅读全文
posted @ 2018-05-29 11:27 red_leaf_412 阅读(347) 评论(0) 推荐(0) 编辑
摘要:每一个进程除了有一个进程ID外,还属于一个进程组。 进程组是一个或多个进程的集合,通常情况下,他们是在同一作业中结合起来的,同一进程组的个进程接受来自同一终端的各种信号。 每一个进程组有一个唯一的进程ID。 组长进程 每个进程组都有一个组长进程,组长进程的进程组ID等于其进程ID。 进程组组长可以创 阅读全文
posted @ 2018-05-25 21:51 red_leaf_412 阅读(1668) 评论(0) 推荐(0) 编辑
摘要:当一个工程中有多个文件的时候,链接的本质就是要把多个不同的目标文件相互粘到一起。就想玩具积木一样整合成一个整体。为了使不同的目标文件之间能够相互粘合,这些目标文件之间必须要有固定的规则才行。比如目标文件B用到了目标文件A中的函数”foo”,那么我们就称目标文件A定义了函数foo,目标文件B引用了函数 阅读全文
posted @ 2018-05-22 22:30 red_leaf_412 阅读(4286) 评论(0) 推荐(0) 编辑
摘要:当系统中有多个进程到时候,哪个进程先执行,哪个进程后执行是由进程的优先级决定的。进程的优先级是由nice值决定的、nice值越小,优先级越高。可以看做越友好那么调度优先级越低。进程可以通过nice函数获取更改它的nice值,进程只能影响自己的nice值,不能影响其他进程的nice值 #include 阅读全文
posted @ 2018-05-21 21:18 red_leaf_412 阅读(851) 评论(0) 推荐(0) 编辑
摘要:ELF目标文件格式的最前部是ELF文件头。包含了整个文件的基本属性。比如ELF文件版本,目标机器型号,程序入口地址等。然后是ELF的各个段,其中ELF文件中与段有关的重要结构就是段表。段表描述了ELF文件包含的所有段的信息,比如每个段的段名,段的长度,在文件中的偏移,读写权限及段的其他属性。 一 文 阅读全文
posted @ 2018-05-19 07:01 red_leaf_412 阅读(2065) 评论(0) 推荐(0) 编辑
摘要:fork()函数通过系统调用创建一个与原来进程(父进程)几乎完全相同的进程(子进程是父进程的副本,它将获得父进程数据空间、堆、栈等资源的副本。注意,子进程持有的是上述存储空间的“副本”,这意味着父子进程不共享这些存储空间。linux将复制父进程的地址空间内容给子进程,因此,子进程由了独立的地址空间。 阅读全文
posted @ 2018-05-16 21:57 red_leaf_412 阅读(616) 评论(0) 推荐(0) 编辑
摘要:我们将之前的代码增加下变量来具体看下 在代码中增加了全局变量以及静态变量,还有一个简单的函数。 #include <stdio.h> int global_var=1; int global_init_var; void func1(int i){ printf("%d\n",i); } int m 阅读全文
posted @ 2018-05-15 22:08 red_leaf_412 阅读(2011) 评论(0) 推荐(0) 编辑
摘要:前面介绍了父子进程,如果当多个进程企图对共享数据进行处理。而最后的结果又取决于进程运行的顺序时,就认为发生了竞争关系。通过下面的例子来看下 在这里标准输出被设置为不带缓冲的,于是父子进程每输出一个字符就要进行一次write调用。这样做的目的是尽可能多次地在两个进程之间进行切换,以便演示竞争条件。 s 阅读全文
posted @ 2018-05-14 21:58 red_leaf_412 阅读(666) 评论(0) 推荐(0) 编辑
摘要:对于分析网页或者写爬虫的时候经常需要用到抓包工具进行网页数据的抓包。在Windows下可以安装Fiddler来抓包。在ubuntun下不能直接安装Fiddler。需要先安装mono 1 首先安装mono环境:apt-get install mono-complete 2 下载一个最新的Fidder 阅读全文
posted @ 2018-05-13 21:46 red_leaf_412 阅读(1051) 评论(0) 推荐(0) 编辑
摘要:我们在写程序的时候,windows下通过vs等编译软件,linux通过gcc命令得到程序的可执行文件。在这个过程中,其实大致经历了4个过程。1 预编译 2 编译 3 汇编 4 链接 1 预编译:主要处理那些源代码文件中的以”#”开头的预编译指令,比如”#include”,“#define”等。 2  阅读全文
posted @ 2018-05-11 22:17 red_leaf_412 阅读(2027) 评论(0) 推荐(0) 编辑
摘要:一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程, 也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。 fork调用的一个奇妙之处就是它仅仅被调用一次,却能够返回两次,它可能有三种不同的返回值: 阅读全文
posted @ 2018-05-09 10:11 red_leaf_412 阅读(624) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示