9 Acabo de ejecutar un trabajo (supongo que foo.sh). ./foo.sh [Press Ctrl-Z to stop] bg # enter background Y genera salida a stdout y stderr. ¿Hay algún método para redirigir a stdout y stderr a otro archivo en lugar de la pantalla actual? bash zsh sh Daniel YC Lin fuente Tráigalo a FG, redirija la salida y envíela de vuelta a BG. alfasin Respuestas: 16 Aparentemente leí mal su pregunta la primera vez, así que aquí está mi respuesta actualizada: Después de enviar su programa a un segundo plano, primero debe encontrar su PID pgrep foo.sh Entonces podría usar gdbpara adjuntar a ese proceso gdb -p <PID> En gdbdespués cambia en este programa escribe en p dup2(open("/path/to/file",577, 420), 1) p dup2(1, 2) luego te desconectas del proceso y sales gdb detach quit Una pequeña explicacion 577 es equivalente a O_CREAT|O_WRONLY|O_TRUNC 420 es equivalente a S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH Entonces, la llamada a openabre 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 dup2duplica el descriptor de archivo devuelto por la llamada al opendescriptor de archivo 1(que es stdout) La segunda llamada a dup2duplica el descriptor de archivo 1a 2(que es stderr) s.wagner fuente 1 -1. No responde la pregunta que se hizo. Específicamente, cómo redirigir la salida de un trabajo en segundo plano . Steven Monday 1 Sí, lo siento, leído mal la pregunta y corregido esto ahora s.wagner ¡Bueno! Voto negativo retraído. Steven lunes
16 Aparentemente leí mal su pregunta la primera vez, así que aquí está mi respuesta actualizada: Después de enviar su programa a un segundo plano, primero debe encontrar su PID pgrep foo.sh Entonces podría usar gdbpara adjuntar a ese proceso gdb -p <PID> En gdbdespués cambia en este programa escribe en p dup2(open("/path/to/file",577, 420), 1) p dup2(1, 2) luego te desconectas del proceso y sales gdb detach quit Una pequeña explicacion 577 es equivalente a O_CREAT|O_WRONLY|O_TRUNC 420 es equivalente a S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH Entonces, la llamada a openabre 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 dup2duplica el descriptor de archivo devuelto por la llamada al opendescriptor de archivo 1(que es stdout) La segunda llamada a dup2duplica el descriptor de archivo 1a 2(que es stderr) s.wagner fuente 1 -1. No responde la pregunta que se hizo. Específicamente, cómo redirigir la salida de un trabajo en segundo plano . Steven Monday 1 Sí, lo siento, leído mal la pregunta y corregido esto ahora s.wagner ¡Bueno! Voto negativo retraído. Steven lunes
Respuestas:
Aparentemente leí mal su pregunta la primera vez, así que aquí está mi respuesta actualizada:
Después de enviar su programa a un segundo plano, primero debe encontrar su PID
Entonces podría usar
gdb
para adjuntar a ese procesoEn
gdb
después cambia en este programa escribe enluego te desconectas del proceso y sales
gdb
Una pequeña explicacion
577
es equivalente aO_CREAT|O_WRONLY|O_TRUNC
420
es equivalente aS_IRUSR|S_IWUSR|S_IRGRP|S_IROTH
open
abre el archivo y lo trunca a 0 bytes si existe o crea uno nuevo con los permisos de archivo correctos si no existedup2
duplica el descriptor de archivo devuelto por la llamada alopen
descriptor de archivo1
(que esstdout
)dup2
duplica el descriptor de archivo1
a2
(que esstderr
)fuente