Popen crea un proceso sh adicional

Estoy tratando de ejecutar (descifrar) un comando con Popen y lo que veo es que hay un sh -c "my_command process" extra sh -c "my_command process" también está ahí.

Quiero minimizar el número de procesos, ¿es posible deshacerse de él?

salida 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 

Después de leer la página del manual, sé que así es como funciona popen ().

La respuesta al problema anterior fue proporcionada por @R ..

Mi requerimiento es como tal, necesito volcar el resultado del comando en un archivo y leer ese archivo línea por línea y procesar el resultado. Es por eso que estoy usando popen porque, devuelve la salida en un archivo. ¿Puedo lograr eso a través de cualquier llamada ejecutiva?

Debes escuchar a las buenas personas que te aconsejan que no uses popen . Es malo. Pero hay una solución simple para el problema que has encontrado: agrega exec al comienzo de la línea de comandos que pasas a popen . Es decir, en lugar de:

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

utilizar:

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

popen usa sh para generar el proceso hijo, como hace el system en sistemas POSIX.

Si desea evitarlo, simplemente use fork , close , mkpipe y exec (que es más o menos lo que hace popen internamente). Si no necesita el tubo, puede simplemente fork y exec .

En lo que se refiere a popen, se supone que invoca el shell (lea la página del manual)

Para omitir el proceso de shell, puede hacer un fork / exec