Получение возвращаемого значения exec процесса - PullRequest
2 голосов
/ 23 февраля 2010

Я хочу, чтобы процесс выполнялся. Когда выполнение команды exec завершается, я хочу, чтобы процесс, вызвавший процесс, вызывающий exec, получил в качестве возвращаемого значения значение, возвращенное функцией, вызванной exec. Как это возможно?

Прости. Я понимаю, что процесс немного сбивает с толку. Итак, позвольте мне привести пример, я нахожусь в сценарии bash, назовите его b_scr.

В b_scr я вызываю программу foo. В свою очередь foo вызывает exec, которая выполняет панель. Я хочу, чтобы b_scr получило в качестве возвращаемого значения foo возвращаемое значение бара.

Так в b_scr:

# Call foo
foo
# print return value of foo.
echo $?

bar
# should be the same value as printed before.
echo $?

Foo

... int main () { ...

 exec("bar",0);

}

1 Ответ

3 голосов
/ 23 февраля 2010

Извините, ваш вопрос все еще не очень ясен. Вы хотите, чтобы foo имел тот же код выхода, что и bar? Должен ли foo делать что-либо после выхода из бара?

exec() полностью заменит запущенный процесс, поэтому, если вы вызовете exec() без предварительного вызова fork(), то foo будет заменен на bar, и поэтому кодом выхода будет любой бар, возвращаемый.

Если вы хотите, чтобы foo вызывал bar, и после выхода из bar сделайте что-нибудь, вам нужно будет fork(), а затем wait():

int main() {
  int status;
  if (fork()) {
    wait(&status);
  } else {
    exec("bar", 0);
  }
  // do whatever else here
  return status;
}
...