Silenciosamente o comando timeout no zsh

2

Esta é uma pergunta frequente:

Desta vez, estou adicionando uma torção. Eu preciso fazer isso em zsh . Além disso, a solução:

  • Deve ficar em silêncio (ou seja, sem mensagens de controle de trabalho)
  • Deve ser portável (ou seja, o mais próximo possível de% purezsh. Assumir que não há coreutils )
  • Deve estar correto (ver notas)
  • Deve se comportar como o GNU timeout

Na correção:

Iniciar um processo, esperar um pouco e matar seu PID está errado. Está errado porque é possível para o processo que estamos cronometrando morrer e um novo processo para começar com o mesmo PID mais tarde, se o tempo limite for log, ou o sistema estiver com pouco PIDs. Na prática, isso raramente acontece, mas seria bom se houvesse uma maneira mais clara de rastrear quando o processo foi encerrado e apenas matá-lo se não o tiver feito.

    
por PythonNut 25.08.2015 / 20:28

1 resposta

1

Primeiro, o que me vem à mente é obter o PID após a criação do processo. Use a ferramenta zstat (consulte man zshmodules ) para obter o carimbo de data e hora do processo, por exemplo, zstat '+mtime' /proc/PID e após o tempo desejado, verifique se o registro de data e hora para o dado /proc/PID não foi alterado - se sim, elimine o trabalho.

    
por 25.08.2015 / 22:30