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/。
错误说明
- 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