Desassociando processos com disown
Dica publicada em Linux / Comandos
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.
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.
hauhau... isso acabou de acontecer comigo... ;-)