Quando executo './command.sh &' a tarefa em segundo plano é suspensa. Como posso mantê-lo funcionando?

6

Isso é o que estou executando:

alexandma@ALEXANDMA-1-MBP ./command.sh &
[2] 30374
alexandma@ALEXANDMA-1-MBP
[2]  + suspended (tty output)  ./command.sh

Eu não quero que ele seja suspenso para começar, eu quero que ele continue sendo executado em segundo plano. Eu vou estar executando um monte deles em um loop, então eu preciso de algo que funcione dessa maneira.

Como posso mantê-lo em exibição?

    
por Matt Alexander 06.11.2014 / 22:05

4 respostas

7

Ele pára por causa da razão dada: ele tenta dar saída para tty. Você pode tentar redirecionar a saída se ./command.sh suportar isso ou executar o comando em uma janela tmux ou screen . Por exemplo,

 tmux new-window -n "window name" ./command.sh

e, em seguida, veja a lista de janelas criadas com tmux list-windows e anexe a tmux com tmux attach .

Dessa forma, o programa ainda aguardará que a entrada / saída aconteça, mas você pode facilmente fornecer entrada uma vez que você vá para a janela apropriada e a saída será apenas capturada sem qualquer atividade.

    
por 06.11.2014 / 22:13
11

Adicionando um detalhe à explicação de Anthon:

Nem sempre é o caso de um processo em segundo plano de gravação ser interrompido. Isso depende da configuração do terminal tostop .

stty tostop
stty -tostop

pode ser usado para alternar essa configuração. Portanto, se você quiser que um processo em segundo plano grave no terminal "outro processo", poderá mantê-lo em execução, mas não precisará de tmux , screen ou similar.

    
por 06.11.2014 / 23:00
3

A maneira mais fácil de fazer isso seria executar o comando da seguinte forma:

 nohup ./command.sh </dev/null &

Eu incluo o nohup no evento em que você está usando um variante SH (não o variante CSH) e terminaria sua sessão.

    
por 07.11.2014 / 01:19
2

Instale screen .

Depois de instalar a tela. Executá-lo : %código% (você terá uma tela de boas-vindas quando começar) Execute seu comando: # screen

Pressione Ctrl + a e depois d .

Vai desanexar a tela inicializada no servidor e manter seu comando em execução.

Para voltar a esta tela, digite:

command.sh

    
por 07.11.2014 / 00:57