Desassociando processos com disown

Publicado por Gustavo Pardellas Feijó em 24/10/2007

[ Hits: 21.326 ]

Blog: http://www.gldc.com.br

 


Desassociando processos com disown



Imagine a seguinte situação:

Você iniciou a transferência de um arquivo de 600M via scp. Para isso você acessou um servidor remoto e, a partir dele, está fazendo este upload para um outro servidor:

$ ssh servidor
$ scp arquivode600M usuario@servidor2:/destino


Como você achava que o scp demoraria pouco tempo, não utilizou o 'nohup' antes do comando (nohup scp arquivode600M usuario@servidor2:/destino).

Só que ao completar 300M você se dá conta que seu horário de expediente já terminou e você, claro, não quer fazer hora extra. Mas se interromper o upload, vai perder todo esse arquivo que já foi transferido. E também não vai deixar um shell aberto no servidor a noite toda, né?

O bash tem um comando "builtin" que pode resolver este problema. O comando é o disown, que tem por objetivo desassociar um processo filho (scp) de seu processo pai (o shell do usuário).

Sua utilização é bastante simples, bastando saber o pid do processo que se deseja desassociar.

$ pgrep scp
1234
$ disown -h -ar 1234

Com estes 2 comandos simples você desassocia o scp do seu shell, podendo fazer logoff e ir embora para casa.

Para quem quiser saber mais, segue a seção do man do bash onde é descrito o funcionamento do disown.

$ man bash

disown [-ar] [-h] [jobspec ...]
Without options, each jobspec is removed from the table of active jobs. If the -h option is given, each jobspec is not removed from the table, but is marked so that SIGHUP is not sent to the job if the shell receives a SIGHUP. If no jobspec is present, and neither the -a nor the -r option is supplied, the current job is used. If no jobspec is supplied, the -a option means to remove or mark all jobs; the -r option without a jobspec argument restricts operation to running jobs. The return value is 0 unless a jobspec does not specify a valid job.

Outras dicas deste autor

Controle de acesso por usuario no Postfix

Pegando o seu ip no Linux

Exibindo linhas anteriores e posteriores à string pesquisada no Linux

Limpando a fila do queue

Políticas personalizadas do SELinux

Leitura recomendada

Como obter explicação "mastigada" de seus comandos shell

Utilizando o SUDO para desligar ou reiniciar um PC logado com um usuário comum

Utilizando o comando scp

Enumerando linhas com o comando nl

Verificando informações detalhadas de arquivos ou diretórios

  

Comentários
[1] Comentário enviado por tenchi em 24/10/2007 - 16:26h

Legal... Mas como faço para pegar de volta um processo que foi mandado para background, que não tem mais acesso algum pelo processo atual, "voltar à tona"? Eu só tenho o seu PID, e também não quero matá-lo e reiniciá-lo.

hauhau... isso acabou de acontecer comigo... ;-)

[2] Comentário enviado por chmod000 em 25/10/2007 - 11:00h

uauahuah agora você me pegou.

Estou procurando essa resposta. Quando achar, posto aqui. Se você achar, posta aqui...

;-)



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts