popen создает дополнительный процесс sh - PullRequest
2 голосов
/ 19 июля 2011

Я пытаюсь выполнить (отключить) команду с помощью popen, и то, что я вижу, есть также дополнительная sh -c "my_command process".

Я хочу минимизировать количество процессов, чтобы это было возможночтобы избавиться от этого?

ps output:

root@home% ps awux | grep my_command
root 638  0.0  0.1  040  1424  ??  I    10:12PM   0:00.00 sh -c my_command /home/war
root 639  0.0  0.0  608   932  ??  S    10:12PM   0:00.01 my_command /home/war

После прочтения man-страницы я знаю, как работает popen ().

Ответ на проблему выше предоставил @R ..

Мое требование таково: мне нужно вывести вывод команды в файл и прочитать этот файл построчно и обработатьвыход.Вот почему я использую popen, потому что он возвращает вывод в файл.Могу ли я добиться этого с помощью любого вызова exec?

Ответы [ 3 ]

2 голосов
/ 19 июля 2011

Вы должны слушать хороших людей, которые советуют вам не использовать popen - это плохо.Но есть простое решение проблемы, с которой вы столкнулись - добавьте exec в начало командной строки, которую вы передаете popen.То есть вместо:

popen("my_command /home/war", ...

используйте:

popen("exec my_command /home/war", ...
2 голосов
/ 19 июля 2011

popen использует sh для порождения дочернего процесса, как system в системах POSIX.

Если вы хотите избежать этого, просто используйте fork, close, mkpipe и exec (что более или менее то, что popen делает внутри).Если вам не нужна труба, вы можете просто fork и exec.

1 голос
/ 19 июля 2011

Что касается popen, он должен вызывать оболочку (читайте man-страницу)

Чтобы пропустить процесс оболочки, вы можете сделать fork / exec

...