Existem alguns problemas com o ulimit. Aqui está uma leitura útil sobre o tema: Limitando o tempo e consumo de memória de um programa no Linux , que leva à ferramenta timeout , que permite bloquear um processo (e seus garfos) tempo ou consumo de memória.
A ferramenta de tempo limite requer o Perl 5+ e o sistema de arquivos /proc
montado. Depois disso, você copia a ferramenta para, por exemplo, /usr/local/bin
assim:
curl https://raw.githubusercontent.com/pshved/timeout/master/timeout | \
sudo tee /usr/local/bin/timeout && sudo chmod 755 /usr/local/bin/timeout
Depois disso, você pode "bloquear" seu processo pelo consumo de memória, assim como na pergunta:
timeout -m 500 pdftoppm Sample.pdf
Como alternativa, você pode usar -t <seconds>
e -x <hertz>
para limitar, respectivamente, o processo por tempo ou restrições de CPU.
A maneira como essa ferramenta funciona é verificando várias vezes por segundo se o processo gerado não tiver excedido os limites definidos. Isso significa que há, na verdade, uma pequena janela em que um processo poderia potencialmente ser superinscrito antes que o tempo limite seja percebido e elimine o processo.
Uma abordagem mais correta, portanto, provavelmente envolveria cgroups, mas isso é muito mais complicado de configurar, mesmo se você usasse o Docker ou o runC, o que, entre outras coisas, oferece uma abstração mais amigável ao usuário em relação aos cgroups. >