Unix环境高级编程
需积分: 0 134 浏览量
更新于2011-02-19
收藏 597KB PDF 举报
### Unix环境高级编程:进程的环境
#### 7.1 引言
在深入探讨进程控制原语之前,本章将详细介绍进程所处的环境。理解进程环境对于掌握进程的行为至关重要,尤其是对于进程如何初始化、如何与外部环境交互以及如何终止等方面。本章节将涵盖以下几个关键知识点:
1. **main函数的初始化及其参数传递机制**。
2. **存储器布局与内存管理**。
3. **环境变量的使用**。
4. **进程终止的不同方式及其区别**。
5. **longjmp与setjmp函数及它们与栈的关系**。
6. **进程资源限制的理解**。
#### 7.2 main函数
每个C程序的执行都是从`main`函数开始的。`main`函数的典型原型如下所示:
```c
int main(int argc, char *argv[]);
```
- **argc**: 表示命令行参数的数量(包括程序本身的名字)。
- **argv**: 是一个指向字符串的指针数组,每个元素对应一个命令行参数。
当内核启动一个C程序时(通常通过调用exec函数族的一个成员实现),它会先调用一个特殊的起动例程,该例程负责从内核获取命令行参数和环境变量,并做好调用`main`函数的准备。
#### 7.3 进程终止
进程可以通过以下五种方式终止:
1. **正常终止**:
- 从`main`函数返回。
- 调用`exit`函数。
- 调用`_exit`函数。
2. **异常终止**:
- 调用`abort`函数。
- 由一个信号触发终止。
其中,`exit`和`_exit`函数用于正常地终止程序。`exit`函数在终止前会执行一系列清理工作,如调用注册的终止处理函数、关闭所有标准I/O流等。而`_exit`函数则直接终止程序,不执行任何清理操作。
```c
#include <stdlib.h>
void exit(int status);
#include <unistd.h>
void _exit(int status);
```
`exit`函数是由ANSI C规定的,而`_exit`则是由POSIX.1标准定义的。通常情况下,建议使用`exit`函数,因为它能够确保资源被正确释放。
#### 7.3.1 `exit`与`_exit`函数
这两个函数都需要一个整型参数,称为**终止状态**(exit status)。这个参数可以用来指示进程正常退出还是遇到错误退出。大多数Unix shell提供了检查进程终止状态的方法。
如果`main`函数没有明确返回一个终止状态,或者使用了无返回值的`return`语句,那么进程的终止状态是未定义的。这意味着下面的经典C语言程序:
```c
#include <stdio.h>
int main() {
printf("Hello, world\n");
}
```
虽然能够运行,但没有明确返回一个终止状态,因此可能无法准确地确定其执行状态。
为了使程序更加健壮,应该在`main`函数中使用`return (0)`或者`exit(0)`来明确地返回一个终止状态,例如:
```c
#include <stdio.h>
int main() {
printf("Hello, world\n");
return 0;
}
```
或者
```c
#include <stdio.h>
#include <stdlib.h>
int main() {
printf("Hello, world\n");
exit(0);
}
```
以上就是关于Unix环境下进程的环境介绍,通过这些基础知识的学习,可以帮助开发者更好地理解和控制进程的行为。接下来的部分将更深入地探讨与进程相关的其他主题,例如命令行参数、环境变量的使用以及进程资源限制等内容。
JsenLong
- 粉丝: 40
- 资源: 27
最新资源
- 新瑞能源(储能系统解决方案提供商,东莞市新瑞能源技术有限公司)创投信息
- 《Cocos 游戏开发从入门到精通全攻略》,为你开启游戏开发的大门
- 调制信号的连续小波变换CWT时频谱图分析:二次线性Chirp调频信号、蝙蝠回声定位信号及神户地震数据的时频定位能力展示(MATLAB r2021b),调制信号的连续小波变 CWT时频谱图 程序运行环境
- 行者AI(游戏全产业链AI赋能平台,成都潜在人工智能科技有限公司)创投信息
- Java毕业设计-springboot-vue-大学生创新创业项目管理系统(源码+sql脚本+29页零基础部署图文详解+30页论文+环境工具+教程+视频+模板).zip
- Java毕业设计-springboot-vue-船运物流管理系统(源码+sql脚本+29页零基础部署图文详解+23页论文+环境工具+教程+视频+模板).zip
- Java毕业设计-springboot-vue-大学生计算机基础网络教学系统(源码+sql脚本+29页零基础部署图文详解+27页论文+环境工具+教程+视频+模板).zip
- 云骥智行(L4自动驾驶解决方案提供商,上海云骥智行智能科技有限公司)创投信息
- Java毕业设计-springboot-vue-大学生平时成绩量化管理系统(源码+sql脚本+29页零基础部署图文详解+33页论文+环境工具+教程+视频+模板).zip
- Java毕业设计-springboot-vue-大学生在线租房平台(源码+sql脚本+29页零基础部署图文详解+33页论文+环境工具+教程+视频+模板).zip
- Java毕业设计-springboot-vue-大学生就业服务平台(源码+sql脚本+29页零基础部署图文详解+40页论文+环境工具+教程+视频+模板).zip
- STM32 F103系列芯片OTA远程升级:WiFi连接下的可靠固件更新流程 升级过程包括HTTP GET指令获取服务器固件信息、版本对比、下载地址写入flash及重启更新等步骤 升级文件需进行CRC
- Java毕业设计-springboot-vue-当代中国获奖知名作家信息管理系统(源码+sql脚本+29页零基础部署图文详解+30页论文+环境工具+教程+视频+模板).zip
- Java毕业设计-springboot-vue-房屋租赁管理系统(源码+sql脚本+29页零基础部署图文详解+32页论文+环境工具+教程+视频+模板).zip
- Java毕业设计-springboot-vue-扶贫助农系统(源码+sql脚本+29页零基础部署图文详解+32页论文+环境工具+教程+视频+模板).zip
- H桥驱动circuitjs1软件仿真