Redireccion de salida de programas

Carlos Manuel Duclos Vergara carlos en embedded.cl
Jue Jun 24 16:37:13 CLT 2004


> > ls -lR > archivo
> 
> No pues, ya ejecute "ls -lR" y esta en medio de toda esa salida.
> 
> El asunto es que no quiero/puedo cortar el proceso y quiero que empieze a 
> tirar la salida a otro lado.
> 

el problema es que es una imposibilidad "fisica"!
el proceso B (ls -lR en este caso) fue creado por el proceso A (bash o el 
shell correspondiente). Una vez que B esta en ejecucion A no puede acceder 
a su espacio de memoria y redireccionar la salida hacia otro lado. Si lo 
haces al momento de iniciar la ejecucion lo que hara A es cambiar antes de 
hacer un exec los descriptores de archivo para la salida o la entrada 
(segun sea lo que necesites) y despues de eso hara el exec. Fork utiliza  
los descriptores de archivo del padre (bueno, depende de si estas 
sobre linux o un bsd), entre los que se cuentan los de salida/entrada 
estandar y exec se encarga del resto de la memoria y esos detalles. Quizas 
si el shell usase vfork se lograria algo (vfork no copia nada, crea todo 
nuevo, es por eso que fork en uclinux no funciona y vfork si funciona) 
pero tambien lo veo dificil. Tu unica opcion seria acceder maliciosamente 
a la memoria y cambiar las estructuras de datos del kernel para permitir 
ese funcionamiento.


Más información sobre la lista de distribución Linux