【问题标题】:after Fork(), how to stay in parent process?在 Fork() 之后,如何留在父进程中?
【发布时间】:2012-04-02 17:31:25
【问题描述】:

我这里有一个例子:

int runcmd(char *cmd)
{
  char* argv[MAX_ARGS];
  pid_t child_pid;
  int child_status;

  parsecmd(cmd,argv);
  child_pid = fork();
  if(child_pid == 0) {
    /* This is done by the child process. */

    execvp(argv[0], argv);

    /* If execvp returns, it must have failed. */

    printf("Unknown command\n");
    exit(0);
  }
  else {
     /* This is run by the parent.  Wait for the child
        to terminate. */

     do {
       pid_t tpid = wait(&child_status);
       if(tpid != child_pid) process_terminated(tpid);
     } while(tpid != child_pid);

     return child_status;
  }
}

这是一个经典的fork()例子 在 fork() 之后,控制权转到子进程。 我怎样才能保留在父进程中,做一些事情。而不是立即跳到孩子身上?

谢谢

【问题讨论】:

  • 我想你误会了。 fork() 返回子进程和父进程。 if 部分在子进程中执行,else 部分在父进程中运行。

标签: c linux unix pthreads


【解决方案1】:

孩子永远是孩子。父母永远是父母。 fork() 创建一个新进程,每个进程单独运行。如果您想在父级中执行某些操作,请在父级中执行。

【讨论】:

    【解决方案2】:

    调用fork 后,调度程序将决定是父级还是子级先运行。它们甚至可以并行运行:现在多 CPU 和内核很常见。

    如果在孩子跑步之前父母必须采取一些行动,那么你应该 将该操作放在fork 之前。否则父母和孩子必须以某种方式同步。

    【讨论】:

      【解决方案3】:

      执行 fork() 时,会创建两个独立的操作系统进程。因此,操作系统调度程序将决定何时运行,您无法决定。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-19
        • 2020-08-08
        • 2017-11-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多