Cómo usar vfork desde un script bash


0

Si queremos forkcualquier cosa desde el interior de un script bash (o incluso en la línea de comando), simplemente podemos rodearlo con $ () o ticks de retroceso. Por ejemplo;

echo $(ls) - Esto bifurcará el entorno actual y ejecutará ls dentro del subshell (bifurcado)

¿Cómo podemos usar vfork( http://man7.org/linux/man-pages/man2/vfork.2.html ) en lugar de la funcionalidad estándar de la bifurcación?


1
¿Desea la funcionalidad del bloqueo principal o realmente desea utilizar la vforkfunción en sí? Si realmente le preocupan los beneficios de rendimiento, probablemente no debería usar ningún tipo de shell como lenguaje de desarrollo
Eric Renouf,

Respuestas:


0

Hacer un grep -Ri vforkcódigo fuente en bash no encuentra ningún resultado, por lo que no hay forma de usar directamente vfork desde bash.

Si solo quiere algo que invoque a un hijo y bloquee al padre, bueno, su ejemplo de subshell ya lo hace. De echolo contrario , probablemente obtendría mejores resultados incompletos.

También puede ejecutar un comando en segundo plano con &y luego usar waitpara tener el bloque primario hasta que finalice el secundario.


Sí, todos los buenos pensamientos / comentarios. Tenemos un script que hace MUCHO bifurcación y queremos hacerlo más rápido. De ahí la búsqueda en vfork. Seguramente debe haber una forma de llamar de alguna manera a vfork en lugar de fork, incluso si tenemos que escribir un pequeño contenedor de C o algo así. Sin embargo, sería bueno poder cambiar fácilmente la forkllamada real en otra cosa, por ejemplo en pseudocódigo; vork=true; echo $(ls)
Roel Van de Paar

Si el rendimiento es un problema, el script de shell probablemente no sea la solución correcta. Si solo hay una parte crítica del rendimiento, puede escribir eso en algo rápido como C y luego puede llamarlo desde bash, pero bash realmente no está hecho para la velocidad
Eric Renouf
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.