Подтвердить что ты не робот

Когда использовать system() и когда использовать execv *()?

Мне нужно выполнить команду unix с разными аргументами в цикле. Теперь я задаюсь вопросом, следует ли мне использовать execvp(), передавая в cmd и args или использовать систему, строя строку, состоящую из cmd + args?

4b9b3361

Ответ 1

Ну, другие ответы в основном верны.

Система, а не только fork, а затем exec s, она не выполняет exec ваш процесс, она запускает оболочку по умолчанию, передавая вашу программу в качестве аргумента.

Итак, если вы действительно не хотите оболочку (для разбора параметров и т.п.), гораздо эффективнее сделать что-то вроде:

int i = fork();
if ( i != 0 ) {
    exec*(...); // whichever flavor fits the bill
} else {
    wait(); // or something more sophisticated
}

Ответ 2

Семейство функций exec заменит текущий процесс новым, в то время как system откажется от нового процесса, а затем дождитесь его завершения. Какой из них зависит от того, что вы хотите.

Поскольку вы делаете это в цикле, я думаю, вы не хотите заменять исходный процесс. Поэтому я предлагаю вам попробовать с system.

Ответ 3

Я бы использовал execvp только в том случае, если не могу добиться того, чего хочу с системой. Обратите внимание, что для получения эквивалента системы вам понадобятся execvp, fork и некоторая обработка сигналов.