PTHREAD_ATFORK - Linux手册页

Linux程序员手册 第3部分
更新日期: 2020-08-13

语法

#include <pthread.h>

int pthread_atfork(void (*prepare)(void), void (*parent)(void),
                   void (*child)(void));

与-pthread链接。

返回值

成功时,pthread_atfork()返回零。出现错误时,它将返回错误号。线程可以多次调用pthread_atfork(),以便为每个阶段注册多个处理程序。每个阶段的处理程序都以指定的顺序调用:prepare处理程序以注册的相反顺序调用;父处理程序和子处理程序按注册顺序调用。

出版信息

这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/

说明

pthread_atfork()函数注册该线程调用fork(2)时要执行的fork处理程序。处理程序在调用fork(2)的线程的上下文中执行。

可以注册三种处理程序:

*
prepare指定在fork(2)处理开始之前执行的处理程序。
*
parent指定在fork(2)处理完成后在父进程中执行的处理程序。
*
child指定在fork(2)处理完成之后在子进程中执行的处理程序。

如果在fork(2)处理的相应阶段不需要处理程序,则三个参数中的任何一个都可以为NULL。

另外参见

fork(2),atexit(3),pthreads(7)

错误说明

ENOMEM
无法分配内存来记录表单处理程序条目。

名称

pthread_atfork-注册派生处理程序

遵循规范

POSIX.1-2001,POSIX.1-2008。

备注

在多线程进程中调用fork(2)时,只有调用线程在子进程中重复。 pthread_atfork()的初衷是允许调用线程返回到一致状态。例如,在调用fork(2)时,其他线程可能具有锁定的互斥锁,这些互斥锁在子代中重复的用户空间内存中可见。这样的互斥锁将永远不会被解锁,因为放置锁的线程不会在子进程中重复。 pthread_atfork()的目的是提供一种机制,通过该机制,应用程序(或库)可以确保互斥体以及其他进程和线程状态将恢复为一致状态。在实践中,此任务通常太难于实践。

在多线程进程中的fork(2)返回子级之后,该子级应仅调用异步信号安全函数(请参见signal-safety(7)),直到它调用execve(2)执行新程序为止。

POSIX.1指定pthread_atfork()不会因错误EINTR而失败。

日期:2019-08-20 18:01:00 来源:oir作者:oir