Suponho que você atualmente verifique a temperatura da CPU com sensors
de algum outro utilitário de linha de comando?
Nesse caso, você pode escrever um script pequeno que, constantemente (com um intervalo de, digamos, 2 segundos), verifica essa saída.
Isso pode ser feito em php usando o seguinte script:
<?php
$threshold = 78; //The value at which you will start killing processes
$processes = array( //All the processes to be killed when threshold is reached
'sampleprocess',
'anotherveryintensiveprocess',
);
while (true)
{
exec('sensors', $output);
$temperature = 0;
$div = 0;
foreach ($output as $line)
{
preg_match('@\+[0-9]+\.[0-9]°C@', $line, $match);
if (count($match) <> 1) continue;
$temperature+= substr($match[0], 1, -2);
$div++;
}
if ($div == 0)
exit;
$temperature/= $div;
if ($temperature >= $threshold)
foreach ($processes as $proc)
passthru("killall -9 \"$proc\""); //You can also forget about the '-9'
sleep(2); //polling interval
}
?>
Observe que esse script espera o formulário de saída sensors
em um formulário em que a primeira sequência de +<number>.<number>°C
representa a temperatura. Para essa saída, isso funciona como esperado:
coretemp-isa-0000
Adapter: ISA adapter
Core 0: +40.0°C (high = +78.0°C, crit = +100.0°C)
Core 1: +38.0°C (high = +78.0°C, crit = +100.0°C)
O -9
no comando killall não é estritamente necessário, ele está lá apenas para enviar SIGKILL, em vez de SIGTERM. Para enviar outros sinais (como SIGUSR1) você pode tentar killall -SIGUSR1
.
Espero que ajude.