Después de usar el command bg, ¿es posible networkingirigir la salida como nohup?

Cuando corro

apt-get -y upgrade 

Normalmente veo esta salida:

 "the following packages will be upgraded..." 

Uso ctrl + z y bg para poner el process en segundo plano, pero su salida aparece en stdout incluso si ejecuto otros commands.

¿Es posible networkingirigir el resultado de un process / command en segundo plano a un file, como lo hace nohup ?

Este método no es recomendable. No utilice. Si rompe tu sistema, puedes conservar todas las piezas.

¡Bueno! ¿Aún conmigo? Para un caso sencillo con las fcntl apropiadas ( fcntl , para open ), networkingirigir el estándar en otro lugar es (en teoría) posible:

 #include <fcntl.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> int main(void) { while (1) { printf("blat\n"); sleep(1); } exit(EXIT_SUCCESS); } 

Comstackdo y ejecutado:

 $ cc -g blat.c -o blat $ ./blat & 

Ahora en algún otro terminal (esto puede pasar por alto las políticas de security por varias razones obvias dado lo que un depurador puede hacer a un process en vivo) usando el PID emitido para el trabajo en segundo plano:

 $ gdb -q -p 3727 ... (gdb) call close(1) $1 = 0 

Después de leer close(2) determinamos que es un éxito, se ha cerrado la input estándar. Vamos a abrir un nuevo file …

 (gdb) call open("/home/userrunningblat/blat.out", O_CREAT|O_WRONLY, 0666) No symbol "O_CREAT" in current context. 

Bueno disparar ¿Cuál es el número mágico que carece de esos símbolos? En un tercer terminal, usando nuestro práctico progtwig de compilation y ejecución de algunos C :

 $ cfu 'printf("%d\n", O_CREAT|O_WRONLY)' 65 

O bien, puede profundizar en el directory /usr/include y descubrir los formattings de input y en el bit OR usted mismo, pero eso es súper molesto. (Tenga en count también que estos numbers pueden variar y varían según el sistema operativo). ¡De vuelta a gdb !

 (gdb) call open("/home/userrunningblat/blat.out", 65, 0666) $2 = 1 (gdb) quit $ tail -f blat.out 

Lo que significa que desde que cerramos el estándar ( 1 ) esta llamada open(2) ha reutilizado ese número de descriptor de file, por lo que luego de salir de gdb la salida estándar debería ir a ese file.

Este método puede no ser posible para progtwigs más complicados, puede no ser posible debido a restricciones de security, información de debugging faltante, puede causar roturas horribles, etc.