exit()和exit_group()之间有什么区别.任何具有多个线程的进程都应该使用exit_group而不是exit?
要回答这个问题why do you ask- 我们的流程大约有40个线程.当一个线程被锁定时,我们会自动退出该进程,然后重新启动该进程.然后我们打印被锁定的线程的回溯.我们想知道在这种情况下调用exit是否与exit_group有任何不同.
From the docs: This system call is equivalent to exit(2) except that it terminates not only the calling thread, but all threads in the calling process's thread group - 但是,退出进程和退出所有线程之间的区别是什么.是不退出进程==退出所有线程.
我知道的所有线程库(例如最近的glibc或musl-libc)都使用低级clone(2) 系统调用来实现它们的线程(有些 C 库甚至clone用于fork进程)。
clone是一个困难的 Linux 系统调用。除非你是线程库的实现者,否则你不应该直接使用它,而只能通过库函数(例如pthread_create(3));另见pthread_mutex函数中使用的futex(7)*
该clone系统调用是用于创建任务:要么线程(在多线程进程共享地址空间)或过程。
该exit_group系统调用是与退出这些任务。
简而言之,您永远不会直接 使用exit_group或clone. 你的 libc 正在为你做这件事。所以不要在意exit_group或_Exit; 您应该只使用标准库函数exit(3),它主要处理atexit(3)和on_exit(3)注册处理程序并刷新<stdio.h>缓冲区。在极少数情况下您不希望发生这种情况,请使用_exit(2)(但您可能不需要它)。
当然,如果您是libc从头开始重新实现自己的,则需要关心exit_group& clone; 但除此之外你不关心他们。.
如果您关心血腥的实现细节,请深入研究您的libc. 详细信息可能是libc-version、内核-version 和编译器特定的!
| 归档时间: |
|
| 查看次数: |
3925 次 |
| 最近记录: |