Acabei de executar um trabalho (suponha 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?
Responder1
Aparentemente, interpretei mal sua pergunta na primeira vez, então aqui está minha resposta atualizada:
Depois de enviar seu programa para segundo plano, primeiro você precisa encontrar seu PID
pgrep foo.sh
Então você poderia usar gdb
para anexar a esse processo
gdb -p <PID>
Em gdb
você, então, mude para onde este programa grava
p dup2(open("/path/to/file",577, 420), 1)
p dup2(1, 2)
então você se desliga do processo e saigdb
detach
quit
Uma pequena explicação
577
é equivalente aO_CREAT|O_WRONLY|O_TRUNC
420
é equivalente aS_IRUSR|S_IWUSR|S_IRGRP|S_IROTH
- Portanto, a chamada para
open
abre o arquivo e o trunca 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 paraopen
o descritor de arquivo1
(que éstdout
) - A segunda chamada para
dup2
duplicar o descritor de arquivo1
para2
(que éstderr
)