Linux中atfork的使用

Posted startFromWeb

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux中atfork的使用相关的知识,希望对你有一定的参考价值。

#include <pthread.h>

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

调用fork时,内部创建子进程前在父进程中会调用prepare,内部创建子进程成功后,父进程会调用parent,子进程会调用child。

看个例子

#include <stdio.h>
#include <time.h>
#include <pthread.h>
#include <unistd.h>

void prepare(void)

	printf("pid = %d prepare ...\\n", static_cast<int>(getpid()));


void parent(void)

	printf("pid = %d parent ...\\n", static_cast<int>(getpid()));


void child(void)

	printf("pid = %d child ...\\n", static_cast<int>(getpid()));



int main(void)

	printf("pid = %d Entering main ...\\n", static_cast<int>(getpid()));

	pthread_atfork(prepare, parent, child);

	fork();

	printf("pid = %d Exiting main ...\\n",static_cast<int>(getpid()));

	return 0;


运行结果
 pid = 24113 Entering main

 pid =24113 prepare...

 pid =24114 child...

 pid=24114 Exiting main....

 pid=24113 parent....

 pid=24113 Exiting main....

以上是关于Linux中atfork的使用的主要内容,如果未能解决你的问题,请参考以下文章

链接错误:Armadillo 库中的“未定义对‘pthread_atfork’的引用”

Android NDK cannot locate symbol "__register_atfork"的一次经典定位分析~

Android NDK cannot locate symbol "__register_atfork"的一次经典定位分析~

pthread_create的介绍

谨慎使用多线程中的fork

PyCrypto已放弃维护 请使用PyCryptodome