Atribui o número do trabalho ao processo em segundo plano à mão

3

Digamos que eu envie dois trabalhos para segundo plano.

$ sleep 77 &
$ sleep 99 &

Então eu verifico meus trabalhos

$ jobs
> [1]  - running    sleep 77
> [2]  + running    sleep 99

Posso controlar qual número de trabalho é atribuído a esses trabalhos? Não tenho certeza se estou usando a terminologia correta aqui, estou falando sobre os números indicados como [1] e [2] no exemplo anterior.

O caso de uso é o seguinte: Eu preciso de um trabalho que renove minhas credenciais de vez em quando, mas na maioria das vezes ele está adormecido. Eu escrevi uma função que é enviada automaticamente para o segundo plano, se chamado. Eu faço isso deliberadamente, pois quero ter controle sobre esse processo, ou seja, quero explicitamente tê-lo como um trabalho.

quando eu chamo a função e não há outros trabalhos, fica o número do trabalho [2] . (Eu assumo [1] seria o subprocesso chamando a função.) Isso é confuso, pois quando eu posteriormente enviar job1 para o segundo plano, ele obtém o número do trabalho [1] , mas job2 obtém o número do trabalho [3] . Eu preferiria que eu pudesse atribuir um grande número à minha função de dormir à mão, por ex. algo como [99] . Isso é possível? Em bash ou zsh ?

    
por pfnuesel 01.01.2018 / 18:38

1 resposta

0

Não, você não pode especificar o número do trabalho atribuído a um processo em segundo plano.

Você pode, no entanto, obter o PID do processo de segundo plano mais recente com $! - o que é muito mais útil.

por exemplo,

$ sleep 77 &
[5] 21959
$ job1=$!

$ sleep 99 &
[6] 21960
$ job2=$!

$ echo job1=$job1 job2=$job2
job1=21959 job2=21960

e, mais tarde (mas antes do primeiro trabalho terminar):

$ kill "$job1"
[1]-  Terminated              sleep 77

veja man bash e procure por JOB CONTROL para mais detalhes sobre trabalhos em segundo plano.

(nota: o controle do job é praticamente o mesmo em todos os shells no estilo bourne - mas bash tem, de longe, a melhor documentação de manual sobre ele)

    
por 02.01.2018 / 06:22