Como detectar se um processo foi eliminado pelo cgroup devido a exceder um limite?

2

Eu tenho um cgroup global definido em /etc/cgconfig.conf que limita a quantidade de memória. Toda vez que um usuário executa um comando, prefixo cgexec para adicionar o processo e seus filhos ao grupo controlado. De vez em quando, o limite entra em ação e mata o processo do usuário.

Se o código de saída não for 0 , como sei se o processo falhou por causa de alguma lógica interna ou se foi eliminado pelo mecanismo cgroup?

Está sendo executado no espaço do usuário, por isso, gostaria de evitar a análise de /var/log/syslog .

    
por Pavel 20.11.2017 / 15:17

1 resposta

0

Eu conduzi uma série de experimentos para responder a mesma pergunta que você tem há alguns anos, e meus experimentos mostraram que o processo morto sempre tem código de saída 137 (que é 128 + 9, onde 128 é o requisito POSIX para execuções terminadas e 9 é o código inteiro de SIGKILL [kill signal]). Infelizmente, não consegui encontrar uma maneira de confirmar se era realmente um SIGKILL e não apenas o código de saída relatado pelo usuário exit(137) / return 137;

    
por 17.03.2018 / 22:14