¿Cómo puedo mover un proceso a un segundo plano y también silenciar su salida?

11

Digamos que comienzo un proceso en la terminal y envía la salida al error estándar mientras se ejecuta. Quiero mover el proceso a un segundo plano y también silenciarlo al mismo tiempo.

¿Hay alguna manera de hacer esto sin detener el proceso e iniciarlo nuevamente usando &y > /dev/null 2>&1? Me pregunto si hay algún comando que se ejecute bg y también pueda cambiar los descriptores de salida del proceso de destino.

dan
fuente

Respuestas:

9

Demasiado tarde. Después de que se inicia un proceso , Shell no tiene más control sobre los descriptores de archivos de proceso , por lo que no puede silenciarlo mediante un comando de Shell.

Solo puede intentar matar a un SIGHUPen el proceso. Si su proceso lo maneja correctamente , debería separarse del control tty . Desafortunadamente, muchos programas no lo manejan correctamente y simplemente mueren.

andcoz
fuente
¿no puedes hacer CTRL + Z para poner el proceso en segundo plano? no silencia el proceso, y si cierra la sesión, creo que también mata el proceso.
Roy Rico
1
@RoyRico, matando a un SIGSTOPa un proceso (o como se dice haciendo CTRL + Z ) no silenciar un proceso. Se detiene un proceso!
andcoz
5

El proceso que se ejecuta desde una terminal tiene sus stdin, stdout y stderr vinculados a la terminal y no puede hacer nada al respecto sin recuperar el control sobre esa terminal ... Normalmente. Pero hay algunas herramientas difíciles que realmente te permiten hacerlo. Echa un vistazo a este ejemplo . Y otros programas como los rettymencionados allí.

rozcietrzewiacz
fuente
3

No estoy de acuerdo con andcoz en que es demasiado tarde para silenciar la salida.

Suponiendo que el proceso se esté ejecutando en primer plano, úselo Ctrl-Zpara suspender el proceso. Al hacerlo, se informará el número de trabajo y la ID del proceso. Puede continuar y mover el proceso a segundo plano utilizando bg %1(para el trabajo n. ° 1). Aunque esto mueve el proceso a un segundo plano, no silencia la salida. Para silenciar la salida, puede usar gdbpara redirigir toda la salida /dev/null.

Esto se ha descrito muy bien anteriormente en /programming/593724/redirect-stderr-stdout-of-a-process-after-its-been-started-using-command-lin/593764#593764 .

Mike Covington
fuente
0

Sin embargo, otra herramienta de línea de comandos es detach. La última versión admite escribir archivos pid, usar archivos para stdin, stdout y stderr, y ejecutarse en primer plano. (El sitio web de detachtambién analiza herramientas similares).

http://inglorion.net/software/detach/

Pablo
fuente