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:
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.
[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.