_exit()函数使用说明

摘要:本文描述的是Linux手册页中_exit()函数的使用说明,使用_exit()函数终止进程.原文来自:http://www.kernel.org/doc/man-pages/.
NAME
    _exit(),_Exit() - 终止进程.
SYNOPSIS
       #include <unistd.h>
       void  _exit(int status);
       #include <stdlib.h>
       void  _Exit(int status);
   Feature Test Macro Requirements for glibc (see feature_test_macros(7)):
       _Exit():
           _XOPEN_SOURCE >= 600 || _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L;
           or cc -std=c99
DESCRIPTION
    调用_exit()函数会立即终止进程,属于该进程的所有打开的文件描述符都会关闭,进程的子进程会归属到init进程,成为init的子进程,并向其父进程发送SIGCHLD信号.
    终止状态status传递返回给父进程,根据子进程的终止状态,父进程可以调用wait()函数处理该子进程.
    函数_Exit()等价于函数_exit().
RETURN VALUE
   _exit()和_Exit()函数没有返回值.
CONFORMING TO
   SVr4, POSIX.1-2001, 4.3BSD.  The function _Exit() was introduced by C99.
NOTES
    讨论终止进程的作用,终止状态的传递,僵死进程,信号发送等等,详细请查看exit()函数.
    函数_exit()类似于exit(),但_exit()函数不会调用由atexit()和on_exit()函数注册的终止处理程序.它是否清理IO缓冲区和删除临时文件是依实作(情况)而定的.在另一方面,调用_exit()函数时,关闭文件描述符可能会导致一个未知的延时,并等待输出完成.如果不希望出现延时,可以在调用_exit()函数之前先调用tcflush()函数,进程是否取消等待IO是依实作(情况)而定的.
    在glibc 2.3版本前,库函数_exit()与内核系统调用同名,从glibc 2.3版本后,库函数调用exit_group()来终止进程中的所有线程.
END

笔者:个人能力有限,只是学习参考...读者若发现文中错误,敬请提出.

-- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------勿在浮沙筑高台,静下心来,慢慢地沉淀---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

### pthread_exit 函数的用法及 C 语言多线程编程 `pthread_exit` 是 POSIX 线程库中的一个函数,用于终止调用它的线程,并返回一个值给与该线程关联的 `pthread_join` 调用。以下是关于 `pthread_exit` 的详细说明使用方法。 #### 函数原型 ```c void pthread_exit(void *retval); ``` - 参数 `retval` 是一个指针,指向要返回给与该线程关联的 `pthread_join` 调用的值。 - 该函数不会返回到调用它的线程,而是直接终止该线程[^3]。 #### 特点 1. **终止当前线程**:当线程调用 `pthread_exit` 时,该线程会立即终止,而不会继续执行后续代码。 2. **返回值传递**:通过 `retval` 参数,可以将一个值传递给等待该线程结束的其他线程(通过 `pthread_join` 获取)。 3. **资源清理**:调用 `pthread_exit` 后,线程的资源会被自动释放,但需要确保手动释放动态分配的内存等资源。 #### 示例代码 以下是一个使用 `pthread_exit` 的完整示例: ```c #include <stdio.h> #include <pthread.h> void *func(void *arg) { int *parg = arg; printf("Thread argument is %d, my thread ID is %lx\n", *parg, (unsigned long)pthread_self()); pthread_exit((void *)42); // 终止线程并返回值 42 } int main() { int arg = 10; pthread_t threadId; pthread_create(&threadId, NULL, func, &arg); void *retval; pthread_join(threadId, &retval); // 等待线程结束并获取返回值 printf("Thread returned value: %ld\n", (long)retval); return 0; } ``` 在上述代码中: - 线程函数 `func` 使用 `pthread_exit` 终止线程,并返回值 `42`。 - 主线程通过 `pthread_join` 等待子线程结束,并获取其返回值[^1]。 #### 注意事项 1. 如果线程正常返回(即通过 `return` 结束),则其返回值也可以通过 `pthread_join` 获取,但需要确保返回值类型与 `pthread_join` 的参数类型匹配。 2. 调用 `pthread_exit` 的线程不会执行后续代码,因此应确保在调用前完成所有必要的清理工作。 3. 主线程调用 `pthread_exit` 不会终止整个进程,只有显式调用 `exit` 或从 `main` 函数返回时才会终止进程。 #### 与 `return` 和 `exit` 的区别 - **`return`**:线程函数通过 `return` 正常退出时,其行为类似于调用 `pthread_exit`,但仅限于线程函数的上下文。 - **`pthread_exit`**:显式终止线程,无论是否在线程函数的末尾调用。 - **`exit`**:终止整个进程,包括所有线程[^3]。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值