Estou fazendo algumas execuções de teste de scripts de migração de dados de longa execução, sobre SSH. Digamos que eu comece a executar um script por volta das 16h; agora, 18:00, e eu estou me xingando por não fazer isso tudo screen
.
Existe alguma maneira de "retroativamente" nohup
um processo ou preciso deixar meu computador online a noite toda? Se não é possível anexar screen
a / nohup
um processo que eu já iniciei, por que? Algo a ver com a interação entre pai e filho? (Não aceitarei uma resposta "não" que não atenda ao menos a pergunta 'por que' - desculpe;)
disown
. blogs.oracle.com/ksplice/entry/disown_zombie_children_and_theRespostas:
Se você estiver usando o Bash, poderá executar
disown -h job
fonte
disown %1
se 1 é o jobspec, ao contrário fg ou bg em que você acabou de usarbg 1
serverwatch.com/tutorials/article.php/3935306/...Use reptyr
No README:
Algumas postagens de blog de seu autor:
fonte
Para roubar um processo de um tty para o tty atual, convém tentar este hack:
http://www.ucc.asn.au/~dagobah/things/grab.c
Ele precisa de reformatação para compilar as versões atuais do Linux / glibc, mas ainda funciona.
fonte
Quando um processo é iniciado, STDIN, STDOUT e STDERR são conectados a alguma coisa . Geralmente você não pode mudar isso depois que o comando é iniciado. No caso que você está descrevendo, provavelmente é um tty associado à sessão ssh. nohup praticamente só faz ...
Ou seja, define STDIN como / dev / null, STDOUT como um arquivo e STDERR como STDOUT. A tela faz coisas muito mais sofisticadas, envolvendo a configuração de ttys que se dirigem a si mesma.
Não conheço nenhuma maneira de retroceder retroativamente ou rastrear um processo em execução. Se você cd para / proc / $ pid / fd e vê o que 0, 1 e 2 apontam.
Você pode ter alguma sorte com rejeição, mas não se o processo tentar fazer algo com STDIN, STDOUT ou STDERR.
fonte
Cryopid é um desenvolvimento adicional do autor do grab.c que congela um processo em um arquivo, que você executa (dentro da tela) para retomar o processo.
fonte
Só posso lhe dar um simples "Não" sem o porquê da parte da tela, eu estaria interessado na razão de você.
No entanto, você tentou
disown
(um bash embutido)fonte
nohup no Solaris / OpenSolaris possui um sinalizador -p para nohup um processo em execução - por exemplo, consulte a página do manual Solaris 10 nohup .
fonte
Recentemente, vi um link para o neercs , que é um utilitário semelhante a uma tela criado usando a libcaca, uma biblioteca de arte ascii colorida. Entre outros recursos, ele possui a capacidade de capturar um processo existente e reimplantá-lo dentro de sua sessão neercs (tela).
No entanto, eu não o usei, portanto não posso comentar se funciona ou não.
fonte
Provavelmente estou pensando mal, então sinta-se à vontade para me corrigir (eu já aprendi sobre renúncia!) ... Um ctrl-Z e "bg" não funcionariam para pelo menos colocar o processo em execução em segundo plano? Ou é o principal problema que você ainda deseja ver STDOUT enquanto é executado?
fonte
Se você consegue viver sem conseguir interagir com o processo e não se opõe ao carregamento de módulos aleatórios do kernel, pode fazer pior do que olhar para o Snoop . Como alternativa, existem alguns outros projetos. Aqui está uma chamada de injcode, que pode fazer principalmente o que você deseja fazer.
fonte
Você pode redirecionar a saída do processo para o arquivo com gdb
https://blog-en.openalfa.com/how-to-detach-from-the-terminal-a-running-process-in-linux
e depois nega
Upd: Eu tive que executar o gdb com o sudo e o comando gdb ligeiramente diferente no Ubuntu 18.04:
p (int)dup2(open("/tmp/test.stdout", 1), 1)
fonte
Eu queria usar
nohup
(ou semelhante) para iniciar olinks
navegador de linha de comando e anexá-lo a ele depois de baixar um arquivo do site ASP.NET com um processo de autenticação complicado e muito estado de exibição oculta que dificultava o trabalho. comcurl
/wget
.Finalmente acabei usando o
tmux
que resolveu o trabalho simplesmente ótimo:tmux
links
no meu caso) e deixe em execuçãotmux attach
para trazer o aplicativo de volta à telafonte
Você está preocupado com o tempo limite da sessão? Nesse caso, você pode pressionar Ctrl-z e alterar o processo e, em seguida, colocar algo para manter a sessão ativa como um "ping-t localhost" ou "top".
Se você deseja fazer logout, receio que não possa adicionar outros comentários.
fonte