Traga o trabalho nohup para o primeiro plano

13

Considere a seguinte nohup execução:

nohup script.sh > script.out &

Existe uma maneira de fazer logoff do terminal, reconectar, trazer o processo de volta ao primeiro plano e interagir com ele usando o teclado?

    
por Adam Matan 17.08.2011 / 18:06

4 respostas

7

Se você quiser iniciar um script, executá-lo sem que a saída atrapalhe seu terminal e, em seguida, exiba-o posteriormente para interagir com ele, convém dar uma olhada em um multiplexador de terminal. Dependendo do seu sistema, eu recomendaria tmux ou screen . Você pode encontrar algumas informações sobre como usá-los nos links abaixo:

tmux:

tela:

edit: links adicionados para primers tmux

    
por Gus E 17.08.2011 / 18:16
15

nohup não desconecta um comando do terminal, ele faz seu script ignorar SIGHUP e redireciona stdout/stderr para um arquivo nohup.out , para que o comando possa continuar sendo executado em segundo plano após você logout.

nohup não coloca automaticamente o comando executado em segundo plano. É preciso fazer isso explicitamente, finalizando a linha de comando com um & .

$ nohup ./script.sh &
[1] 3390
$ nohup: ignoring input and appending output to ‘nohup.out’

jobs pode imprimir trabalhos atualmente em execução e seu status. Se o comando jobs não puder encontrá-lo, ele não será mais um processo filho desse shell.

$ jobs 
[1]+  Running                 nohup ./script.sh &

Pode-se trazer de volta um trabalho em segundo plano para o primeiro plano no bash usando fg , mesmo se ele for executado com nohup . Mas isso não alterará o redirecionamento de saída , que ainda estará indo para o arquivo nohup.out .

$ fg
nohup ./script.sh

Se você fechar o shell / terminal ou efetuar logoff, seu comando não será mais um filho desse shell. Pertence ao processo init . Se você pesquisar em pstree , verá que agora pertence ao processo 1 ( init ). Isso não pode ser trazido de volta ao primeiro plano porque o primeiro plano não existe mais.

    
por souravc 19.01.2016 / 18:42
3

Eu irei destacar o uso de um multiplexador de terminal, mas tmux , não a tela. A tela é, para todas as intenções e propósitos, não-mantida. Sua configuração é uma arte escura, provavelmente registrada pela primeira vez em um apêndice do Necronomicon. Tentar escrever sua própria configuração é como um vislumbre de Cthulu. A sério. Dê uma olhada nos arquivos .screenrc das pessoas. Para ter certeza, existem maneiras de mediar a abominação da tela de um arquivo de configuração. O Byobu faz um trabalho admirável como o véu entre os usuários mortais e o código profano. Ele vem com cores sensíveis, uma interface de menu e, talvez mais importante, uma barra de status.

Mas, como eu disse, recomendamos o tmux . Ele ainda requer alguma configuração menor, mas é bem documentado , e seu arquivo de configuração não parecerá algo sem sentido. Além disso, você começa com cores e uma barra de status. Compare meus arquivos screenrc e tmux.conf:

por djeikyb 17.08.2011 / 20:38
0

Se você está interessado em procurar um chapéu ao vivo, a saída pode ser adequada para você:

nohup script.sh 2>&1 script.out &
# later:
tail -f script.out
    
por con-f-use 17.08.2011 / 23:20