Estou usando cpulimit
um script Bash para executar um certo comando (ffmpeg) com uso limitado de CPU, mas quero saber se o comando falha. Mas quando o comando (ffmpeg) falha com algum erro, cpulimit ainda existe com status de saída 0. O que devo fazer?
Meu comando cpulimit:cpulimit -l 300 -f -- ffmpeg ...
CPUlimit versão 3.0
SO: Ubuntu com Linux 6.8.0
Nota: cpulimit não funciona em bifurcações do comando fornecido, a menos que eu passe o sinalizador --monitor-forks, o que o manual diz ser uma má ideia, especialmente em scripts:
-m, --monitor-forks observa e limita os processos filhos do processo alvo Aviso: Geralmente é uma má ideia usar esse sinalizador, especialmente em um script de shell. Os comandos no script gerarão cada um um processo que, por sua vez, gerará mais cópias desse programa para limitá-los, sobrecarregando o sistema. Além disso, é possível que um processo filho morra e que seu PID seja atribuído a outro programa. Quando isso acontece rapidamente, pode fazer com que o cpulimit tenha como alvo o novo processo não intencional antes que as informações antigas tenham a chance de ser liberadas. Use a opção monitor-forks somente em casos específicos, de preferência em máquinas sem muitos processos novos sendo gerados.
Não use
cpulimit
em 2025. Este é um programa de 2006, que funciona enviando sinais "PARAR" e "CONTINUAR" para um processo em altas velocidades, dependendo de quanto tempo de CPU o processo controlado usa.Não foi uma ótima ideia quando o programa foi escrito, e é completamente inadequado agora com processadores multicore de escala de frequência; torna a coisa que você está fazendo desnecessariamente ineficiente no que está fazendo (levando a mais carga de CPU para a mesma carga de trabalho geral, onde você decidiu reduzir isso). (Sinceramente, não sei de onde as pessoas desenterram esse programa; deve haver lugares que o recomendam sem um grande sinal de alerta vermelho dizendo "na verdade, não use isso!" por algum motivo; isso foi recomendado a você por alguma resposta neste site? Se for esse o caso, por favor, nos avise vinculando a essa resposta!).
Então, a solução para "
cpulimit
é um programa mal escrito e absorve o código de retorno do meu programa" é "Bem, não usecpulimit
".Você está executando uma distro Linux mainstream moderna – parabéns! Boa escolha! Isso significa que você tem systemd, e isso significa que você pode executar
para iniciar a
ffmpeg
tarefa em segundo plano (você pode ver o que ela faz usandojournalctl -xef --user
), oupara executar coisas em primeiro plano.