📜  fork()使用wait()从下到上执行进程

📅  最后修改于: 2021-05-30 11:40:55             🧑  作者: Mango

fork()系统调用用于创建通常称为子进程的过程,而创建该过程的进程称为父过程。现在,使用fork()创建的所有进程将同时运行。但是,如果我们希望最后创建的流程首先执行,并以这种方式自下而上执行,以使父流程最后执行,该怎么办?

这可以通过使用wait()系统调用来完成。然后,父进程可以发出wait()系统调用,该调用会在子进程执行时挂起父进程的执行,而当子进程完成执行时,它将退出状态返回给操作系统。现在,wait()暂停进程,直到其任何子进程完成执行。

注意:这是一个linux系统调用,因此必须在linux或unix变体系统上执行。

// Program to demonstrate bottom to up execution
// of processes using fork() and wait()
#include 
#include  // for wait()
#include  // for fork()
int main()
{
    // creating 4 process using 2 fork calls
    // 1 parent : 2 child : 1 grand-child
    pid_t id1 = fork();
    pid_t id2 = fork();
  
    // parent process
    if (id1 > 0 && id2 > 0) {
        wait(NULL);
        wait(NULL);
        cout << "Parent Terminated" << endl;
    }
  
    // 1st child
    else if (id1 == 0 && id2 > 0) {
  
        // sleep the process for 2 seconds
        // to ensure 2nd child executes first
        sleep(2);
        wait(NULL);
        cout << "1st child Terminated" << endl;
    }
  
    // second child
    else if (id1 > 0 && id2 == 0) {
        // sleep the process for 1 second
        sleep(1);
        cout << "2nd Child Terminated" << endl;
    }
  
    // grand child
    else {
        cout << "Grand Child Terminated" << endl;
    }
  
    return 0;
}

输出:

Grand Child Terminated
2nd Child Terminated
1st child Terminated
Parent Terminated
要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程”