popen создает дополнительный sh-процесс

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

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

ps выход:

 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?

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

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

    использовать:

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

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

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

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

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