ódigo de retorno quando o OOM killer mata um proces
Estou executando uma carga de trabalho multiprogramada (com base nos benchmarks SPEC CPU2006) em um sistema POWER7 usando o SUSE SLES 11.
s vezes, cada aplicativo na carga de trabalho consome uma quantidade significativa de memória e o espaço total de memória excede a memória disponível instalada no sistema (32 GB
Desativei a troca, pois, caso contrário, as medições poderão ser fortemente afetadas pelos processos que usam a troca. Eu sei que, ao fazer isso, o kernel, através do killer do OOM, pode matar alguns dos processos. Isso é totalmente bom. O problema é que eu esperaria que um thread morto pelo kernel saísse com uma condição de erro (por exemplo, o processo foi finalizado por um sinal
Tenho uma estrutura que inicia todos os processos e os espera usando
waitpid(pid, &status, 0);
Mesmo que um encadeamento seja morto pelo assassino do OOM (eu sei que desde que recebo uma mensagem na tela e em / var / log / messages), a chamada
WIFEXITED(status);
retorna um e a chamada
WEXITSTATUS(status);
retorna zero. Portanto, não consigo distinguir quando um processo termina corretamente e quando é eliminado pelo assassino do OOM.
Estou fazendo algo errado? Você conhece alguma maneira de detectar quando um processo foi morto pelo assassino do OOM.
Muito obrigado
Vencedo
P.S: eu encontreiesta postage fazendo praticamente a mesma pergunta. No entanto, como é um post antigo e as respostas não foram satisfatórias, decidi postar uma nova pergunta.