前面笔记中提到了无论子进程是 正常终止 还是 异常终止,父进程都可以通过 wait 函数或者waitpid 函数来获取到其 终止状态。但是 正常终止 和 异常终止 父进程所获得的信息是不同的,正常终止时父进程收到的是 子进程 中exit的参数,而异常终止 时父进程收到的是 导致子进程异常终止的 信号 ...
分类:
系统相关 时间:
2016-10-01 19:37:51
阅读次数:
212
当使用fork()创建了一个子进程后,通常接着会使用 exec 族函数指定新的程序来覆盖子进程的代码段、数据段、堆和栈。从而让子进程去执行一个新的程序,而不是执行父进程的副本。 exec 族函数中总共有 6 个函数: 上面 5 个函数属于库函数,这些函数都最终调用了下面的 execve 函数,这6个 ...
分类:
系统相关 时间:
2016-10-01 19:35:25
阅读次数:
299
在Linux系统中,每个进程都会属于一个进程组,而每个进程组都有一个进程组ID(pgid),这个进程组ID的值等于组长进程的进程ID。通常在shell下执行的第一个程序将成为一个组长进程,其后生成的所有与此进程有血缘关系的进程都属于此进程组(除非子进程使用setpgid函数改变自己的进程组ID)。 ...
分类:
系统相关 时间:
2016-10-01 19:20:14
阅读次数:
180
用户缓冲区: 由 fork函数创建的子进程会继承父进程的用户缓冲区。如果在父进程调用 fork 函数创建子进程之前缓冲区中仍然有数据在其中的话,那么子进程将会复制父进程的缓冲区。 文件共享: 由 fork 函数创建的子进程会继承父进程打开的所有文件描述符,而且父子进程相同的文件描述符是指向同一个文件 ...
分类:
系统相关 时间:
2016-10-01 17:19:25
阅读次数:
164
进程的终止可以分为异常终止和正常终止。 当进程是正常终止的时候,子进程会通过 exit 函数向父进程传递终止状态; 当进程是异常终止的时候,内核(而不是进程)会传递给父进程一个信号编号值。 所以说无论子进程是正常终止还是异常终止,父进程都可以通过 wait 或者 waitpid 函数来获取到子进程的 ...
分类:
系统相关 时间:
2016-10-01 17:09:40
阅读次数:
196
Linux系统提供了 fork 函数用来创建子进程。fork 函数和普通的函数相比,其特殊的地方在于 fork 函数被调用一次,但是会返回两次。一次返回时在父进程中,另一次返回值是在子进程中。 函数原型: 返回值: 调用失败时返回 -1 给父进程,而且子进程也不会被创建。 调用成功时,在父进程中返回 ...
分类:
系统相关 时间:
2016-10-01 17:03:31
阅读次数:
155
考虑下面两种情况: 第一种:父进程 先于 子进程 退出。 发生此种情况的时候,子进程便成为 孤儿进程。系统中的所有孤儿进程都会被 init 进程领养,init 进程的进程 ID 始终为 1。系统内当有进程终止的时候,内核会去检查所有的进程是否为该终止进程的子进程,如果是,则将其父进程 ID 修改为 ...
分类:
系统相关 时间:
2016-10-01 16:56:57
阅读次数:
158
vfork 函数和 fork 函数类似,也可以用来创建子进程,但是和 fork 创建的子进程有以下几点不同: fork 创建的子进程和父进程之间的执行顺序是不确定的,取决的调度算法的实现。而 vfork 函数创建的子进程 一定是先于父进程执行的,父进程会阻塞到当子进程中调用了 exec 或者 exi ...
分类:
系统相关 时间:
2016-10-01 16:52:19
阅读次数:
115
1.pid_t fork(); (1)当一个进程调用了fork 以后,系统会创建一个子进程.这个子进程和父进程不同的地方只有他的进程ID 和父进程ID,其他的都是一样.就象符进程克隆(clone)自己一样. (2)为了区分父进程和子进程,我们必须跟踪fork 的返回值. 当fork 掉用失败的时候( ...
分类:
系统相关 时间:
2016-09-30 00:57:29
阅读次数:
281
3.2.4启动Android系统服务——startSystemServer() 接下来就是启动Android的重头戏了,此时ZygoteInit的main()函数会调用startSystemServer(),该函数用于启动整个Android系统的系统服务。其大体做法是先fork一个子进程,然后在子进 ...
分类:
移动开发 时间:
2016-09-25 22:15:46
阅读次数:
362