进程退出--- exit() 和 _exit()

exit() 和 _exit() 的区别

void exit(int value)

是标准库函数,在头文件 stdlib.h 中定义。具有刷新 I/O 缓冲区的作用。他的参数 value 是返回给父进程的数据(低 8 位有效)。

void _exit(int value)

是系统调用函数,在头文件 unistd.h 中定义。没有刷新 I/O 缓冲区的作用。他的参数 value 也是返回给父进程的数据(低 8 位有效)。

代码

#include 
#include 
#include 
 
int main(int argc, char *argv[])
{
    /* 注意字符串没有换行符,否则会自动刷新缓冲区 */
	printf("Heeeeeeeeeeello woooooooooooooorld!");

    /* 调用系统函数退出进程 */
    _exit(0);

    /* 调用库函数退出进程 */
    //exit(0);
    
    while(1);
	return 0;
}
[lingyun@manjaro study]$ gcc study.c 
[lingyun@manjaro study]$ ./a.out
[lingyun@manjaro study]$ 

可见没有任何输出,因为 I/O 缓冲区没有被刷新。如果把 _exit(0)注释掉,解注释 exit(0) 的话就会有输出,因为 exit() 有刷新 I/O 缓冲区的作用。如下:

[lingyun@manjaro study]$ gcc study.c 
[lingyun@manjaro study]$ ./a.out
Heeeeeeeeeeello woooooooooooooorld![lingyun@manjaro study]$ 

 

你可能感兴趣的:(Linux系统编程学习)