子进程等待父进程然后执行,然后在C linux中反之亦然

时间:2013-02-19 22:31:15

标签: c linux ubuntu parent-child shared-memory

我正在用C创建一个父子进程,这些进程使用一个字符数组作为共享内存,我希望执行按此顺序执行

父 - >儿童安全>父 - >儿童安全>父 - >儿童

 ....依此类推,我在父母中使用Wait(NULL),但执行顺序为

parent-> child-> parent-> parent-> parent ....

我试图在没有信号量或其他任何事情的情况下做这个仍然是新手Linux程序员

int main(void)
{
    if (fork( ) == 0)
    { //child
        if( (id = shmget(key, sizeof(char[n]), 0)) == -1 )
        {
            exit(1);
        }
        shm = shmat(id, 0, 0);
        if (shm == (char *) -1)
            exit(2);
        .......................//some work
        ..........................
    }
    else //parent
    {
            if( (id = shmget(key, sizeof(char[n]), 0666 | IPC_CREAT)) == -1 )
            {
                exit(1);
            }
            shm = shmat(id, 0, 0); //attach shared memory to pointer
            if (shm == (char *) -1)
                exit(2); //error while atatching
                        ....
                        .....
        do
        {
            //parent turn here
            wait(NULL);
                        ....................................
                        //some work ..................
        }
        while(done!=1);
        shmdt(NULL);
        if( shmctl(id, IPC_RMID, NULL) == -1 )//delete the shared memory
        {
            perror("shmctl");
            exit(-1);
        }
    }
    exit(0);
}

1 个答案:

答案 0 :(得分:1)

  1. 您可能希望在调用fork()之前调用shmget(IPC_CREAT),因为POSIX在调用之后不保证执行的顺序,因此子进程中的shmget()可能会失败,因为父进程没有没有机会创建共享段。

  2. wait()等待子进程结束。它不用于在父进程和子进程之间进行计划。

  3. 你究竟想做什么?