UNIX进程环境及关系
来源:互联网 发布:你不知道的js pdf 编辑:程序博客网 时间:2024/06/04 21:15
进程环境
7.2main函数:
C总是从 main函数开始执行 其原型是
Int main(int argc , char *argv[]);
其中argc是命令行参数 的数目 ,argv是指 向参数的各个指针所构成的数组。
当内核执行C程序时,(使用一个exec函数) 在调用main前 先调用一个特殊的启动例程。可执行程序文件将此启动例程,指定为程序的起始地址---这是由链接编辑器设置的,而链接编辑器则由C编译器调用。启动例程从内核取得命令行参数和环境变量值。然后为按上述方式调用main函数做好安排。
7.3进程终止
5种正常终止:
1.从main 返回
2.调用exit
3.调用_exit或_Exit
4.最后一个线程从启动例程返回。
5.最后一个线程调用pthread_exit
7.6C程序的存储空间布局
·正文段:这是由cpu执行的机器指令部分,通常正文段是可共享的
·初始化数据段:通常称为数据段:包含了程序中需明确地赋初值的变量。
·为初始化数据段:bss段 :程序开始执行前,内核将此段中的数据初始化为0或空指针。
·栈:自动变量以及每次函数调用所需保存的信息都存在此段中
·堆:通常在堆中进行动态存储分配。
对于32位x86处理器上的linux正文段从0x08048000单元开始,栈底则在0xc0000000之下开始(高地址向低地址增长)
进程控制
本章介绍了UNIX系统的进程控制 : 创建新进程,执行程序和进程终止,还说明了进程属性的各种ID。8.2进程标识:
每个进程都有一个非负整形标识唯一进程ID。常用其作为其他标识符的一部分以保证其唯一性。例如:应用程序有时就把进程ID作为名字的一部分来创建一个唯一的文件 。
一些专用进程 :ID为0的进程通常是调度进程。ID为1的通常是init进程,此进程负责在自举内核后启动一个UNIX系统,init通常读取与系统有关的初始化文件。Init进程绝不会终止。
8.3fork:
由fork创建的新进程被称为子进程:被调用一次返回两次:子进程:0父进程:子进程ID;
一个进程只会有一个父进程,所以子进程总是可以调用getppid以获得其父进程的进程ID。
Fork之后,子进程是父进程的副本,例如:子进程获得父进程的数据空间,堆和栈的副本。这是子进程所拥有的副本,父子进程并不共享这些存储空间部分。 父进程和子进程共享正文段。
8.4vfork
Vfork函数用于创建一个新进程,而该新进程的目的是exec一个新程序。它并不将父进程的地址空间完全复制到子进程中,因为子进程会立即调用exec。
Vfork和fork的一个区别是:vfork保证子进程(这段时间内核会使父进程休眠) ,它在调用exec或exit之后父进程才可能被调度运行。
8.5exit
8.6wait和waitpid
一个进程正常或异常终止时,内向就向其父进程发送SIGCHILD信号。因为子进程终止是个异步事件,所以这种信号也是内核向父进程发的异步通知。
调用wait和waitpid会发生什么:
1. 如果所有子进程都还在运行,则阻塞。
2. 若一个子进程已经终止,正等待父进程获取其终止状态,则取得该子进程的终止状态立即返回。
3. 如果没有任何子进程,则立即出错返回。
两个函数的具体区别:
8.9竞争条件:
当多个进程都企图对共享数据进行某种处理,而最后结果又取决于进程运行顺序时 我们认为发生了竞争条件。
8.10exec
当进程调用一种 exec函数时,该进程执行的程序完全替换为新程序,而新程序则从其main函数开始执行。因为exec并不创建新进程,所以前后的进程ID并未改变,exec只是用磁盘上的一个新程序替换了当前进程的正文段,数据段,堆栈段。
8.11更改用户ID和组ID。
0 0
- UNIX进程环境及关系
- Unix环境高级编程—进程关系
- unix环境高级编程-进程关系
- 《UNIX环境高级编程》--9进程关系
- 《unix高级环境编程》进程关系——进程组
- 《unix高级环境编程》进程关系——进程组
- 《UNIX环境高级编程》第三部分进程之进程关系
- unix环境高级编程--进程关系与守护进程
- UNIX环境高级编程——进程关系
- 《UNIX环境高级编程》读书笔记之进程关系
- UNIX环境高级编程(第9章 进程关系)
- 《unix高级环境编程》进程关系——会话
- 《unix高级环境编程》进程关系——会话
- UNIX环境高级编程-第9章- 进程关系
- UNIX环境C语言编程(8)-进程关系
- 《unix环境高级编程》-09、进程关系-读书笔记
- UNIX环境高级编程之第9章:进程关系
- 《UNIX环境高级编程》九进程关系读书笔记
- UNIX标准IO
- c++指针实现2数交换
- 启用init_level4_pgt
- 3110: [Zjoi2013]K大数查询
- 系统限流实践 - 接入层限流----上篇学习了分布式限流(传送门),接下来学习一下接入层限流的方法对于简单的web应用,我们一般直接通过容器例如Tomcat/Jetty直接把应用暴露给外部使用
- UNIX进程环境及关系
- [openjudge] 746:Elevator Stopping Plan
- React入门指引与实战----React是Facebook公司推出的前端组件化解决方案,目的在于解决前端开发中存在的各个痛点。目前,前端框架与库层出不穷,形成了异常繁荣的局面,那么Facebook为
- 从苏宁电器到卡巴斯基----从苏宁电器离职以后,我想要重新租个房子来备考,主要是希望能够有个良好的学习环境。思前想后,决定在长春理工大学周边租个房子住,然后每天去理工大学上自习。于是我在南湖小区找了个
- 【NOIP模拟题】【线段树】2016.11.10第三题题解
- 【树上差分】【小结】
- 【模板】LCA
- Perfect Squares
- 爱不释手是JAVA----javaSE(标准版) javaEE(企业版) javaME(微型版) JDK(java开发工具包)JRE(java运行环境)IDE(集成开发环境)2、Java规