Используйте exec / fork для запуска внешнего процесса

#c #exec #fork

#c #exec #fork

Вопрос:

Я использую C и пытаюсь запустить команду оболочки во внешнем процессе. Вот код, который у меня есть до сих пор:

 pid_t pid;
pid = fork();
if(pid == 0){ 
    execv(args[0],args);
} else {
    wait();
}
  

Моя первая проблема заключается в том, что мне нужно получить вывод из команды оболочки, переданной exec, и я не знаю, как это сделать. После выполнения приведенного выше кода основная программа также дублирует себя, и я не уверен, почему.

Комментарии:

1. Вы также должны обработать случай, когда pid == -1 . Даже если просто напечатать сообщение об ошибке и выйти.

2. У вас должно быть exit(1); и, вероятно, печатное сообщение после execv() . Вероятно, ваше «дублирует себя» происходит потому argv[0] , что is "ls" , а не "/bin/ls" и execv() не выполняет поиск с использованием PATH . Следовательно, execv() сбой завершается, и дочерний элемент продолжает выполнять более или менее то, что сделал бы родитель.

Ответ №1:

args[0] предположительно, это имя запущенной программы, поэтому она будет разветвляться, а затем сама исполняется.

Чтобы собрать выходные данные, вам нужно будет организовать их явную передачу. Для pipe() этого часто используется вызов Unix.

Комментарии:

1. аргументы [0] не являются именем запущенной программы. В моем примере программы это ‘ls’