Вопрос

Я пишу программу, которая должна выполнять другие внешние процессы;прямо сейчас программа запускает командные строки процессов через popen, получает любой вывод, а затем получает статус выхода через pclose.

Однако происходит то, что для быстро выполняющихся процессов (например,запущенный процесс быстро завершается с ошибками) вызову pclose не удается получить статус завершения (pclose возвращает -1, errno равно ECHILD).

Есть ли у меня способ имитировать поведение типа popen / pclose, за исключением способа, который гарантирует захват "события" завершения процесса и результирующего кода возврата?Как мне избежать неотъемлемого состояния гонки с помощью pclose и завершения запущенного процесса?

Это было полезно?

Решение

разветвление/выполнение/ожидание

popen - это просто оболочка для упрощения вызовов fork / exec.Если вы хотите получить выходные данные дочернего элемента, вам нужно будет создать канал, вызвать fork , скопировать файловые дескрипторы дочернего элемента в канал, а затем выполнить.Родительский элемент может считывать выходные данные из канала и вызывать wait, чтобы получить статус выхода дочернего элемента.

Другие советы

Вы можете использовать vfork () и execv ().

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top