поведение execl в unix - PullRequest
       23

поведение execl в unix

2 голосов
/ 30 июня 2011

В моей программе я выполняю долгоживущий хвост (с -f) через execl.Что-нибудь после этого вызова execl не выполняется.

Нужно ли вызывать / выполнять этот хвост в фоновом режиме, чтобы я мог делать другие вещи в моей программе?

Я обычно выхожу измоя программа ctrl C.

Ответы [ 3 ]

3 голосов
/ 30 июня 2011

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

Чтобы обойти это, вы можете позвонить execl() после звонка на fork(). Fork разделяет вашу программу на две части (родительскую и дочернюю), и вы сможете проверить, какой дочерний процесс, а какой родительский. В этом примере объясняется, как использовать fork - во втором примере вы поместите свой вызов execl() в дочерний раздел процесса.

2 голосов
/ 30 июня 2011

Страница man для семейства вызовов exec начинается с:

Семейство функций exec заменяет текущее изображение процесса с новый образ процесса.

Не совсем уверен, чего вы хотите достичь, но похоже, что exec не является решением. Если вы хотите, чтобы ваша первая программа оставалась в живых, вам нужно fork . Ваша первоначальная программа что-то делает с выводом tail -f?

1 голос
/ 30 июня 2011

Если ваша родительская программа хотела бы захватить вывод из tail, вы должны посмотреть функцию popen (). Это запустит хвостовой процесс, и вывод может быть прочитан из ФАЙЛА *, который он возвращает.

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

...