Desassociando processos com disown

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

[ Hits: 20.863 ]

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

Exibindo linhas anteriores e posteriores à string pesquisada no Linux

Limpando a fila do queue

Pegando o seu ip no Linux

Controle de acesso por usuario no Postfix

Políticas personalizadas do SELinux

Leitura recomendada

Montando pendrive automaticamente no OpenSuSE 11.1

Salvo pelo SED!

Gravador de área de trabalho nativo do Gnome 3

Usando Delta ISOs

Verificação constante de disponibilidade de serviços

  

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