#c #process #execv
#c #процесс #execv
Вопрос:
У меня это есть в моей программе:
execv (programname, (char **)argv);
Я не уверен, что команда действительно выполняется правильно. Как я могу это выяснить? Выполняется ли это в фоновом режиме?
Комментарии:
1. Это зависит от того, под какой операционной системой вы компилируете этот код, DOS или Windows?
Ответ №1:
Я настоятельно рекомендую получить книгу, которая относится к задаче, которую вы пытаетесь выполнить. Это будет действительно долгий путь, если вы будете задавать новый вопрос по SO на каждом этапе пути. Мы любим помогать, но иногда книги лучше.
Advanced UNIX Programming — отличное программное обеспечение, которое содержит полный образец оболочки, включая конвейеры. На самом деле, примеры программ доступны для бесплатного скачивания (но я все равно рекомендую приобрести копию книги).
Ответ №2:
Поскольку execv заменяет текущий процесс, команда будет выполняться в том же состоянии, что и родительский процесс.
Один из способов узнать, выполнена ли ваша команда, — заставить команду напечатать что-либо на консоли, если это возможно.
Ответ №3:
Я полагаю, что execv () должен накладывать на текущий процесс «programname». Если вы хотите запустить программу в отдельном процессе, вам нужен fork() или system() — я не верю, что последнее является «стандартным», но, похоже, оно довольно распространено.
Ответ №4:
Со страницы руководства execv.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ Если какая-либо из функций exec() возвращает значение, произойдет ошибка. Возвращаемое значение равно -1, и значение errno будет установлено для обозначения ошибки.
Итак, если вы получаете возвращаемое значение, что-то пошло не так.