Могу ли я предотвратить возврат fork () к оболочке? - PullRequest
1 голос
/ 31 марта 2012

У меня есть Makefile, который выглядит примерно так:

sometarget: 
    command_one    # calls fork()
    command_two

Вот проблема, с которой я сталкиваюсь, когда делаю make sometarget:

  1. command_one запускается и в конечном итоге вызывает fork().

  2. Дочерний процесс exec что-то и завершает рано, возвращая управление к make до того, как вся обработка command_one будет завершена.

  3. command_two затем выполняется до завершения родительского процесса, что приводит к сбою последовательности (поскольку это зависит от полного завершения command_one).

Я могу изменить command_one (хотя fork () и exec () должны остаться), и я бы не стал менять Makefile, если это возможно. Есть ли способ предотвратить возврат дочернего процесса (в Linux)? Я думаю, что ответ - нет, но раньше я ошибался ...

1 Ответ

3 голосов
/ 31 марта 2012

Похоже, ваш command_one выглядит примерно так:1007 * parent's exit, он убедится, что дочерний элемент и родительский элемент завершены, прежде чем make(1) перейдет к следующей команде.Это будет выглядеть примерно так:

main() {
    pid_t child = fork();    /* ignore error for sake of example */
    if (child) {
        /* some work in the parent */
        exit;
    } else {
        /* some work in the child */
    }
    waitpid(child, &status, 0);  /* NEW LINE */
    exit(&status);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...