после Fork (), как остаться в родительском процессе? - PullRequest
0 голосов
/ 02 апреля 2012

У меня есть пример:

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 () управление переходит к дочернему процессу.Как я могу держать в родительском процессе, делать вещи.Вместо того, чтобы сразу прыгнуть к ребенку?

Спасибо

Ответы [ 3 ]

4 голосов
/ 02 апреля 2012

Ребенок всегда будет ребенком.Родитель всегда будет родителем.fork() создает новый процесс , и каждый из них запускается отдельно.Если вы хотите что-то сделать в родительском, то делайте это в родительском.

0 голосов
/ 29 апреля 2013

Когда выполняется fork (), создаются два отдельных процесса ОС.Таким образом, планировщик ОС будет решать, когда каждый из них будет запущен, вы не можете решить это.

0 голосов
/ 02 апреля 2012

После вызова fork планировщик решает, будет ли родитель или потомок запускаться первым.Они могут даже работать параллельно: в настоящее время часто используются несколько процессоров и ядер.

Если есть какое-то действие, которое родитель должен выполнить до запуска дочернего процесса, то вы должны поместить это действие перед fork.В противном случае родитель и ребенок должны как-то синхронизироваться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...