Acabo de ejecutar un trabajo (supongamos foo.sh).
./foo.sh
[Press Ctrl-Z to stop]
bg # enter background
Y genera resultados para stdout y stderr. ¿Existe algún método para redirigir a stdout y stderr a otro archivo en lugar de la pantalla actual?
Respuesta1
Aparentemente leí mal tu pregunta la primera vez, así que aquí está mi respuesta actualizada:
Después de enviar su programa a segundo plano, primero debe encontrar su PID
pgrep foo.sh
Entonces podrías usar gdb
para adjuntar a ese proceso.
gdb -p <PID>
Luego gdb
cambia dónde escribe este programa.
p dup2(open("/path/to/file",577, 420), 1)
p dup2(1, 2)
luego te desconectas del proceso y salesgdb
detach
quit
una pequeña explicación
577
es equivalente aO_CREAT|O_WRONLY|O_TRUNC
420
es equivalente aS_IRUSR|S_IWUSR|S_IRGRP|S_IROTH
- Entonces, la llamada a
open
abre el archivo y lo trunca a 0 bytes si existe o crea uno nuevo con los permisos de archivo correctos si no existe. - La primera llamada a
dup2
duplica el descriptor de archivo devuelto por la llamada aopen
al descriptor de archivo1
(que esstdout
) - La segunda llamada a
dup2
duplica el descriptor del archivo1
(2
que esstderr
)