Desativando core dumps para um determinado usuário ou sessão de shell sem raiz

0

Estou trabalhando em um grande projeto C ++. Ao testá-lo, frequentemente recebo um núcleo do processo principal. Isso produz muitos despejos de núcleo desinteressantes salvos em systemd e ocupa espaço em disco útil.

É possível no Linux rodar systemd para desabilitar o core-dumps de ser gravado apenas temporariamente para um determinado usuário ou talvez até melhor apenas em uma determinada tty ou em uma determinada sessão do shell?

Parece-me razoável que um usuário tenha a opção de desabilitar as gravações de core-dumps se estiver prestes a executar um programa que despeja um núcleo com freqüência e ele não deseja preencher o espaço em disco, sem o intervenção da raiz.

    
por Doron Behar 22.07.2018 / 11:27

1 resposta

5

Você tentou editar /etc/profile e adicionar uma linha:

ulimit -c 0

para isso? Se você não é root, você pode dizer às pessoas para executar este comando manualmente.

BTW: a maioria das distribuições Linux faz com que um limite de 0 seja o valor padrão, então a depuração em um sistema típico do Lnux não funciona a menos que você digite

ulimit -c unlimited

no seu shell.

O comando ulimit chama internamente o setrlimit() syscall que define as configurações no processo que são herdadas por todos os filhos. Qualquer programa pode chamar setrlimit() , não apenas o shell.

Qualquer uma das crianças, em teoria, pode alterar essas configurações e criar uma nova linha de herança. Então, certifique-se de que, e. nenhum shell é chamado no meio que altera o valor novamente. Isto pode, e. acontecer caso uma chamada para ulimit esteja em um dos scripts de inicialização do shell.

    
por 22.07.2018 / 12:37