De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.


bash - disown builtin

Colaboração: Rubens Queiroz de Almeida

Data de Publicação: 30 de setembro de 2014

No bash, o disown builtin é usado para remover tarefas da tabela de processos, ou para para marcar tarefas de forma a que, quando receberem um sinal SIGHUP, este não seja recebido pelo processo quando a shell pai receber este sinal. Isto ocorre quando, por exemplo, um usuário encerra sua sessão.

Vejamos mais um exemplo. Você começou uma tarefa complexa em seu notebook, e achou que esta tarefa se encerraria rapidamente. Mas isto não aconteceu e você precisa ir embora. O problema é que, se você encerrar a sua conexão, muito provavelmente a tarefa importante e complexa que você iniciou será também encerrada, com consequencias imprevisíveis.

Com o comando disown você pode conseguir escapar deste problema.

A primeira coisa a fazer é colocar o processo para rodar em background. Isto se faz pressionando as teclas <CTRL><z> e em seguida digitando bg. Pronto, o processo está rodando em background, mas você ainda não pode encerrar a sua sessão. Quando damos o comando bg o processo recebe um número, que deve ser usado em seguida para despossuir (disown) o comando.

Reproduzo a seguir uma sequencia completa de comandos ilustrando o uso do comando diswown:

$ find . >1 /dev/null
^Z
[1]+  Stopped                 find . /dev/null > 1
$ bg
[1]+ find . /dev/null > 1 &
$ jobs
[1]+  Running                 find . /dev/null > 1 &
$ disown %1
$ jobs
$ 

O comando find é deliberadamente longo, achar todos os arquivos a partir do diretório corrente. Em seguida, o processamento é interrompido (<CTRL><z>) e o processo passa a rodar em background (bg). Em seguida, executo o comando jobs para ver quais processos estão rodando em segundo plano. Vemos que o processo continua lá. Em seguida, executo o comando disown %1. Ao emitir o comando jobs novamente, vemos que o processo não mais me pertence. Posso fechar tudo e ir embora :-)

Referências

Adicionar comentário

* Campos obrigatórios
5000
Powered by Commentics

Comentários

Nenhum comentário ainda. Seja o primeiro!


Veja a relação completa dos artigos de Rubens Queiroz de Almeida