ó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.

questionAnswers(1)

yourAnswerToTheQuestion