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

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

12
задан helpermethod 18 February 2010 в 14:38
поделиться

3 ответа

Что ж, остальные ответы в основном верны.

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

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

int i = fork();
if ( i != 0 ) {
    exec*(...); // whichever flavor fits the bill
} else {
    wait(); // or something more sophisticated
}
10
ответ дан 2 December 2019 в 06:26
поделиться

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

6
ответ дан 2 December 2019 в 06:26
поделиться

Просто нажмите Ctrl + нажмите левую кнопку мыши на Person в среде IDE и/или прочитайте ее источник и/или javadoc.

Если вы еще не используете среду IDE, я могу порекомендовать Eclipse или IntelliJ IDEA . Если вы используете Java EE (JSP/Servlet и подобные материалы), либо возьмите Eclipse для Java EE , либо оплатите издание IDEA Ultimate .

-121--4154788-

Тим прав, и Шейн пропустил. Вот дополнительные примеры:

R> df <- data.frame(a = as.character(10:15))
R> df <- data.frame(df, num = as.numeric(df$a), 
                        numchr = as.numeric(as.character(df$a)))
R> df
   a num numchr
1 10   1     10
2 11   2     11
3 12   3     12
4 13   4     13
5 14   5     14
6 15   6     15
R> summary(df)
  a          num           numchr    
 10:1   Min.   :1.00   Min.   :10.0  
 11:1   1st Qu.:2.25   1st Qu.:11.2  
 12:1   Median :3.50   Median :12.5  
 13:1   Mean   :3.50   Mean   :12.5  
 14:1   3rd Qu.:4.75   3rd Qu.:13.8  
 15:1   Max.   :6.00   Max.   :15.0  
R> 

Наш data.frame теперь содержит сводку по столбцам коэффициентов (счетчикам) и числовым суммам as.numeric () --- что неверно , поскольку он получил числовые уровни коэффициентов --- и (правильную) сводку as.numeric (as.acter char())

-121--584045-

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

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

8
ответ дан 2 December 2019 в 06:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: