Linux 进程正常终止有三种方式:
1、main函数中return;
2、调用exit;
3、调用_exit;
exit 与 _exit用于正常终止一个进程:_exit立即进入内核,exit则先执行一些处理,之后进入内核。
exit函数原型及对应的头文件:
#include
void exit(int status);
exit函数描述:
exit函数会终止进程, 并将status&0377返回给其父进程。
所有通过atexit注册的函数以及on_exit()均会被调用。所有打开的流均通过fclose关闭,tmpfile函数创建的文件会被删除。
调用exit之后,status值会被传递到父进程。如果父进程设置了SA_NOCLDWAIT,或者设置SIGCHLD的处理函数为SIG_IGN,则返回值被丢弃。如果子进程调用exit时候,父进程尚未调用wait,则子进程成为zombia,直到父进程调用wait获知子进程的退出状态。如果支持SIGCHILD,则该信号被发送至父进程。
_exit函数原型及对应头文件:
#include
void _exit(int status);
#include
void _Exit(int status);
_exit函数描述:
调用_exit会立即终止进程,所有打开的文件描述符被关闭,所有的子进程会直接过继给init,其父进程会受到SIGCHLD信号。
status会被传递给父进程。_Exit与_exit等效。
_exit 与exit函数类型,但其不会调用atexit注册的函数,至于是否执行缓存回写以及删除tmpfile创建文件等操作,则取决于具体实现。
实例验证:
19 #include
20 #include
26
27 int main(int argc,char *argv[])
28 {
29 printf("Hello exit!\r\n");
30 printf("This is just a test for exit or _exit.");
31
33 _exit(0);
34 }
执行./testext
Hello exit!
执行下面代码:
19 #include
20 #include
26
27 int main(int argc,char *argv[])
28 {
29 printf("Hello exit!\r\n");
30 printf("This is just a test for exit or _exit.");
31
32 exit(0);
34 }
执行./testexit
Hello exit!
This is just a test for exit or _exit.
阅读(980) | 评论(0) | 转发(0) |