7 Acabei de executar um trabalho (assuma foo.sh). ./foo.sh [Press Ctrl-Z to stop] bg # enter background E gera saída para stdout e stderr. Existe algum método para redirecionar para stdout e stderr para outro arquivo em vez da tela atual? bash zsh sh Daniel YC Lin fonte Traga-o para FG, redirecione a saída e envie-a de volta para BG. alfasin Respostas: 13 Aparentemente eu interpretei mal sua pergunta pela primeira vez, então aqui está minha resposta atualizada: Depois de enviar seu programa para o segundo plano, primeiro você precisa encontrar o PID pgrep foo.sh Então você poderia usar gdb para anexar a esse processo gdb -p <PID> Em gdb você então muda onde este programa grava p dup2(open("/path/to/file",577, 420), 1) p dup2(1, 2) então você se desconecta do processo e sai gdb detach quit Uma pequena explicação 577 é equivalente a O_CREAT|O_WRONLY|O_TRUNC 420 é equivalente a S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH Então a chamada para open abre o arquivo e trunca-o para 0 bytes se existir ou cria um novo com as permissões de arquivo corretas, se não existir A primeira chamada para dup2 duplica o descritor de arquivo retornado pela chamada para open para descritor de arquivo 1 (qual é stdout ) A segunda chamada para dup2 duplica o descritor de arquivo 1 para 2 (qual é stderr ) neocrow fonte 1 -1. Não responde a pergunta que foi feita. Especificamente, como redirecionar a saída de um fundo trabalho. Steven Monday Sim, desculpe, interpretou mal a questão e corrigiu isso agora neocrow Legal! Downvote retraído. Steven Monday
13 Aparentemente eu interpretei mal sua pergunta pela primeira vez, então aqui está minha resposta atualizada: Depois de enviar seu programa para o segundo plano, primeiro você precisa encontrar o PID pgrep foo.sh Então você poderia usar gdb para anexar a esse processo gdb -p <PID> Em gdb você então muda onde este programa grava p dup2(open("/path/to/file",577, 420), 1) p dup2(1, 2) então você se desconecta do processo e sai gdb detach quit Uma pequena explicação 577 é equivalente a O_CREAT|O_WRONLY|O_TRUNC 420 é equivalente a S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH Então a chamada para open abre o arquivo e trunca-o para 0 bytes se existir ou cria um novo com as permissões de arquivo corretas, se não existir A primeira chamada para dup2 duplica o descritor de arquivo retornado pela chamada para open para descritor de arquivo 1 (qual é stdout ) A segunda chamada para dup2 duplica o descritor de arquivo 1 para 2 (qual é stderr ) neocrow fonte 1 -1. Não responde a pergunta que foi feita. Especificamente, como redirecionar a saída de um fundo trabalho. Steven Monday Sim, desculpe, interpretou mal a questão e corrigiu isso agora neocrow Legal! Downvote retraído. Steven Monday
Respostas:
Aparentemente eu interpretei mal sua pergunta pela primeira vez, então aqui está minha resposta atualizada:
Depois de enviar seu programa para o segundo plano, primeiro você precisa encontrar o PID
Então você poderia usar
gdb
para anexar a esse processoEm
gdb
você então muda onde este programa gravaentão você se desconecta do processo e sai
gdb
Uma pequena explicação
577
é equivalente aO_CREAT|O_WRONLY|O_TRUNC
420
é equivalente aS_IRUSR|S_IWUSR|S_IRGRP|S_IROTH
open
abre o arquivo e trunca-o para 0 bytes se existir ou cria um novo com as permissões de arquivo corretas, se não existirdup2
duplica o descritor de arquivo retornado pela chamada paraopen
para descritor de arquivo1
(qual éstdout
)dup2
duplica o descritor de arquivo1
para2
(qual éstderr
)fonte