Как мне распечатать printf () после вызова execlp () в дочернем процессе? - PullRequest
2 голосов
/ 05 октября 2010

В настоящее время я пытаюсь напечатать сообщение от дочернего процесса после вызова execlp () внутри дочернего процесса. Тем не менее, ничего не появляется на терминале после вызова execlp (). Почему мои вызовы printf () ничего не отображают и как это можно решить?

Ответы [ 3 ]

4 голосов
/ 05 октября 2010

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

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

2 голосов
/ 05 октября 2010

Функции exec*() заменяют процесс, который вызвал их на исполняемый файл, предоставленный в качестве аргумента.

Это означает, что, если вызов execlp успешен, то дочерний элемент, которыйСделанный звонок больше не существует.Таким образом, любой оператор printf, следующий за execlp, может быть выполнен только в случае сбоя вызова execlp, что обычно означает, что запрошенная программа не существует.

1 голос
/ 05 октября 2010

«Семейство функций exec () заменяет текущий образ процесса новым образом процесса»

(От: http://linux.die.net/man/3/execlp)

Это объясняет это довольно ясно.

...