linux 进程编程:进程终止

来源:互联网 发布:网络培训价格是多少 编辑:程序博客网 时间:2024/06/10 19:44

今天写一下进程终止的内容,终止一个进程可以有以下方式:

正常终止

1、从main返回;

2、调用exit;

3、调用_exit或者_Exit;

4、最后一个线程从其启动例程返回;

5、从最后一个线程调用pthread_exit。

异常终止

1、调用abort;

2、接收到一个信号;

3、最后一个线程对取消信号做出反应。

我们可以注册一些函数,当进程终止时,对资源进行回收,注册函数:

int atexit(void (*func) (void));

该函数与线程中的

void pthread_cleanup_push(void (*routine) (void  *),  void *arg);
void pthread_cleanup_pop(int execute);
作用类似,在进程、线程终止时,会自动调用。

相关函数
#include <stdlib.h>
void exit(int status);
void _Exit(int status);
int atexit(void (*func) (void)); //注册函数.
#include <unistd.h>
void _exit(int status);
测试代码

#include <stdio.h>#include <stdlib.h>#include <unistd.h>void exit_func_1(void);void exit_func_2(void);int main(int argc, char **argv){int ret = -1;ret = atexit(exit_func_1);if(0 != ret){printf("[%s:%d] register exit func fail\n", __func__, __LINE__);}ret = atexit(exit_func_2);if(0 != ret){printf("[%s:%d] register exit func fail\n", __func__, __LINE__);}//abort();//_Exit(0);//_exit(0);//exit(0);return 0;}void exit_func_1(void){printf("[%s:%d] exit fun1 ok\n", __func__, __LINE__);}void exit_func_2(void){printf("[%s:%d] exit fun2 ok\n", __func__, __LINE__);}

运行结果

[exit_func_2:38] exit fun2 ok
[exit_func_1:33] exit fun1 ok


0 0
原创粉丝点击