поведение системного вызова - PullRequest
1 голос
/ 30 июня 2011

Я использую системный вызов () для запуска tail -f.

Одна вещь, которую я увидел, состояла в том, что вызов tail занимает 2 процесса (я могу видеть в ps): 1) sh -c tail имя файла 2) хвостовое имя файла

Как сказано в man-странице: system () выполняет команду, указанную в команде, вызывая команду / bin / sh -c. Я думаю, процесс 1) неизбежен, правильно?

Мне просто интересно, смогу ли я сократить количество процессов с 2 до 1.

Заранее спасибо.

Ответы [ 2 ]

4 голосов
/ 01 июля 2011

Лучше использовать fork()/exec() для запуска процессов. system() вызывает оболочку, поэтому вам следует позаботиться о том, что вы ей передаете.

/* Untested code, but you get the idea */
switch ((pid = fork())) {
case -1:
    perror("fork");
    break;
case 0:
    execl("/usr/bin/tail", "tail", "-f", filename);
    perror("execl");
    exit(1);
default:
    wait(pid);
    ...
}
3 голосов
/ 30 июня 2011
Система

всегда выполняет команду sh -c. Если вам нужен только один процесс, выполните system ("exec tail -f").

...