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
gdbpara adjuntar a ese procesoEn
gdbdespués cambia en este programa escribe enluego te desconectas del proceso y sales
gdbUna pequeña explicacion
577es equivalente aO_CREAT|O_WRONLY|O_TRUNC420es equivalente aS_IRUSR|S_IWUSR|S_IRGRP|S_IROTHopenabre el archivo y lo trunca a 0 bytes si existe o crea uno nuevo con los permisos de archivo correctos si no existedup2duplica el descriptor de archivo devuelto por la llamada alopendescriptor de archivo1(que esstdout)dup2duplica el descriptor de archivo1a2(que esstderr)fuente