Suponha que eu execute um comando em uma sessão de shell, por exemplo bash -c 'apt-get update && apt-get upgrade'
. Cinco minutos depois, decido sair para um lanche e percebo que esqueci de adicionar algum tipo de mecanismo de notificação para saber se a saída foi bem-sucedida ou falha.
Bem, o que eu faço agora? Se ao menos eu pudesse consultar em outro terminal o status de saída desse outro comando (ou especificamente, esse PID), talvez eu pudesse exibir algum tipo de pop-up. Portanto, a pergunta é: como posso consultar o status de saída de um processo já em execução de outro terminal?
Em outras palavras,
Dado que eu tenho um processo em execução no terminal A E seu PID é conhecido
QUANDO executo algum comando no terminal B
ENTÃO, devo saber se o processo no terminal A termina com o status de saída 0 ou com o status de saída> 1.
fonte
wait
para obter o código de um processo em segundo plano no shell atual, após o término, mas não foi possível encontrar nada que permitisse consultar outros shells. Simplesmente monitorar se um processo ainda está em execução e emitir um alerta após a saída também é trivial novamente, mas não é possível descobrir seu código de saída. A única maneira que eu poderia pensar seria em preparar os shellPROMPT_COMMAND
para armazenar o último código de saída em um arquivo temporário ou local acessível semelhante. Isso seria uma opção?Respostas:
Use da
strace
seguinte maneira:Nem as chamadas nem os sinais do sistema são de interesse aqui, por isso dizemos
strace
para ignorá-los com as-e
expressões e suprimir uma mensagem de status com-q
.strace
anexa ao processo com o PID$PID
, aguarda que ele saia normalmente e gera seu status de saída assim:Uma
if
expressão simples para chamar qualquer tipo de notificação pode ser:Exemplo de execução
A maior parte do crédito vai para esta resposta no U&L ; deixe um voto positivo lá se você achar isso útil.
fonte