pthread_create b / w fork和exec

时间:2013-03-30 20:47:12

标签: c++ linux pthreads exec fork

我希望在相应的子进程使用exec系统调用更改其图像之前,在子进程中创建一个线程。但是,似乎pthread_create调用被忽略了。

    pthread_t thread;
    pthread_attr_t attribute;

    pthread_attr_init(&attribute);
    pthread_attr_setdetachstate(&attribute, PTHREAD_CREATE_DETACHED);

pid_t cid = fork();

if(cid == 0)        //CHILD Process
{
    switch(x->option)
    {
        case 1:     pthread_create(&thread, &attribute, compressShow, NULL);                
                    execl("/home/aamir/Lab/ass3/compression", "compression", source, destination, NULL); 
                    cout<<"Execution failed."<<endl; break; //This segment will execute if exec fails.
    }

else            //PARENT Process
{
    wait(0);        //Prevents termination of original main until forked exec completes execution
    pthread_cancel(thread);
}

该线程基本上只是一个用于输出'。'的进度显示。 (点)与分叉的孩子同时发生。

如果我删除了exec调用,那么线程就会执行。我在google上搜索并在某处读取你不能在fork和exec之间使用pthread_create,这与异步安全函数有关。你能帮忙吗?

1 个答案:

答案 0 :(得分:2)

exec位zapps包括线程在内的所有东西,只是启动一个新进程。这包括记忆等。

程序可能(并且通常)不会触及该位置。