求助:pthread_atfork例子输出不解 《unix 环境高级编程》

软件和网站开发以及相关技术探讨
回复
头像
dtczhl
帖子: 70
注册时间: 2011-04-17 11:44

求助:pthread_atfork例子输出不解 《unix 环境高级编程》

#1

帖子 dtczhl » 2012-01-07 18:22

代码: 全选

#include "apue.h"
#include <pthread.h>

pthread_mutex_t lock1 = PTHREAD_MUTEX_INITIALIZER;
pthread_mutex_t lock2 = PTHREAD_MUTEX_INITIALIZER;

void
prepare(void)
{
	printf("preparing locks ...\n");
	pthread_mutex_lock(&lock1);
	pthread_mutex_lock(&lock2);
}

void
parent(void)
{
	printf("parent unlocking locks...\n");
	pthread_mutex_unlock(&lock1);
	pthread_mutex_unlock(&lock2);
}

void
child(void)
{
	printf("child unlocking locks...\n");
	pthread_mutex_unlock(&lock1);
	pthread_mutex_unlock(&lock2);
}

void *
thr_fn(void *arg)
{
	printf("thread started...\n");
	pause();
	return 0;
}

int
main(void)
{
	int err;
	pid_t pid;
	pthread_t tid;

	if ((err = pthread_atfork(prepare, parent, child)) != 0)
		err_exit(err, "can't install fork handlers");
	err = pthread_create(&tid, NULL, thr_fn, 0);
	if (err != 0)
		err_exit(err, "can't create thread");
	sleep(2);
	printf("parent about to fork...\n");
	if ((pid = fork() < 0))
		err_quit("fork failed");
	else if (pid == 0)
		printf("child returned from fork\n");
	else 
		printf("parent returned from fork\n");

	exit(0);
}
输出如下:
Screenshot.png
为什么会输出2次child returned form fork
却没有一次parent
cynron
帖子: 5
注册时间: 2013-08-24 3:07
系统: ubuntu

Re: 求助:pthread_atfork例子输出不解 《unix 环境高级编程》

#2

帖子 cynron » 2014-05-09 18:07

if ((pid = fork() < 0))

->

if((pid = fork()) < 0)
回复