7.3 进程环境_进程终止
来源:互联网 发布:挪威慢生活 知乎 编辑:程序博客网 时间:2024/06/05 06:12
有8种方式是进程终止(termination),其中5种为正常终止,它们是:
- 从main返回;
- 调用exit;
- 调用_exit或_Exit;
- 最后一个线程从其启动例程返回;
- 最后一个线程调用pthread_exit。
异常终止有3种方式,它们是:
- 调用abort;
- 接到一个信号并终止;
- 最后一个线程对取消请求做出响应。
1. exit函数
有三个函数用于正常终止一个程序:_exit和_Exit立即进入内核,exit则先执行一些清理处理(包括调用执行各终止处理程序,关闭所有标准I/O流等),然后进入内核。
- #include <stdlib.h>
- void exit(int status);
- void _Exit(int status);
- #include <unistd.h>
- void _exit(int status);
exit函数总是执行一个标准I/O库的清理关闭操作:为所有打开流调用fclose函数。这会造成所有缓冲的输出数据都被冲洗(写到文件上)。
三个exit函数都带一个整型参数,称之为终止状态(或退出状态)。如果(a)若调用这些函数时不带终止状态,或(b)main执行了一个无返回值的return语句,或(c)main没有声明返回类型为整型,则该进程的终止状态是未定义的。但是,若main的返回类型是整型,并且main执行到最后一条语句时返回(隐式返回),那么该进程的终止状态是0。
main函数返回一整型值与用该值调用exit是等价的。于是在main函数中 exit(0); 等价于 return(0);
2. atexit函数
调用atexit函数来登记终止处理程序。
- #include <stdlib.h>
- int atexit(void (*func)(void));
返回值:成功返回0,出错返回非0值
其中,atexit的参数是一个函数地址。exit调用这些函数的顺序与它们登记时候的顺序相反。同一函数如若登记多次,则也会被调用多次。
图7.1 一个C程序是如何启动和终止的
注意,内核使程序执行的唯一方法是调用一个exec函数。进程自愿终止的唯一方法是显式或隐式地(通过调用exit)调用_exit或_Exit。进程也可以非自愿地由一个信号使其终止。
- 7.3 进程环境_进程终止
- 第七章 进程环境-进程终止
- 进程环境——终止进程
- 终止进程
- 终止进程
- 终止进程
- 终止进程
- 进程终止
- 终止进程
- 进程终止
- 终止进程
- 终止进程
- 进程终止
- 终止进程
- 进程终止
- 《unix高级环境编程》进程环境——进程终止
- 《unix高级环境编程》进程环境——进程终止
- init进程_处理子进程终止1
- [转]php中定界符<<<的作用
- JDBC 的 HelloWorld 程序, 数据库访问MySQL
- 全球可信并且唯一免费的HTTPS(SSL)证书颁发机构:StartSSL
- 两个模式窗体刷新问题
- symbian 开发常见错误代码及原因总结
- 7.3 进程环境_进程终止
- OA之死
- Add new line and delete line using javascript
- 博客开篇----->严重欢迎各位看官莅临灌水!
- 蓝牙模块
- 对象,还是对象-谈软件架构
- 教你文本聚类(参考http://www.kuqin.com/searchengine/20080511/8323.html)
- Hibernate 条件查询(转载)
- 关于软件自签名的理解提到的工具“makekeys”