Existe uma sobreposição nos usos de PID e jobspec no Bash?

4

Existe uma sobreposição nos usos de PID e jobspec no Bash?

No meu script eu armazeno o PID de um comando em uma variável usando $! . Em seguida, chamo disown com o PID para remover o trabalho da tabela de trabalhos ativos do shell. Posteriormente, o script pode ou não matar o processo usando kill dependendo das circunstâncias. O objetivo disso é que as mensagens feias de 'trabalho morto' não apareçam no terminal e tornem a saída legal do meu script feia.

Funciona bem, mas estou confuso com a diferença entre PID e jobspec, porque ...

$! - the PID of the most recent background command.
disown [-ar] [-h] [jobspec ...]
kill [-s sigspec | -n signum | -sigspec] [pid | jobspec]

disown requer um jobspec, mas estou dando um PID. man bash diz que disown retorna 0 a menos que jobspec não especifique um job válido. Eu dou um PID e ele retorna 0, então tudo parece ok.

Uma pesquisa por man bash para jobspec não faz menção de que um PID pode ser usado em vez de um jobspec em geral e a entrada disown não diz que um PID pode ser usado em vez de um jobspec.

PID e jobspec não são a mesma coisa, mas existe uma sobreposição em seu uso? Se não, por que meu código funciona? É tão simples quanto disown ser capaz de pegar um PID em vez de um jobspec e isso não está documentado em man bash ?

Obrigado.

EDITAR

choroba está correta, disown sendo capaz de obter um PID em vez de um jobspec parece ser um recurso não documentado de disown . Agora eu confirmei isso com testes em duas versões diferentes do GNU Bash.

GNU bash, version 4.3.11(1)-release (x86_64-pc-linux-gnu) [On Linux Mint]
GNU bash, version 4.3.30(1)-release (x86_64-pc-linux-gnu) [On Debian]

Apesar de não ser documentado pelo GNU (até onde eu sei), ele é documentado pelo Projeto de Documentação do Linux, na terceira sentença do Comandos de Controle de Trabalho .

Eu enviei um email para o mantenedor da página man do GNU Bash, sugerindo que a entrada disown na seção de comandos internos do shell seja alterada:

From: disown [-ar] [-h] [jobspec ...]
To:   disown [-ar] [-h] [jobspec | pid] ...

Ele confirmou o erro e fez a alteração.

Espero que isso ajude.

END EDIT

    
por mattst 19.11.2015 / 12:50

1 resposta

2

Parece um recurso não documentado de disown . O Bash não pode confundir um PID com um jobspec, pois o jobspec sempre começa com % .

    
por 19.11.2015 / 13:00

Tags