Existe um mecanismo no Unix (ou Linux) para interromper um despejo de núcleo em andamento?

15

Digamos que um processo (muito) grande esteja travando e despejando o núcleo, e sabemos a causa de outras informações (possivelmente uma mensagem de afirmação, talvez outra coisa).

Existe uma maneira de impedir que o dump principal seja completamente gerado, pois é um desperdício nesse caso?

Por exemplo, o kill -9 de um processo de dumping de núcleo interromperia a geração do arquivo principal?

Obviamente, se soubéssemos antecipadamente que não queremos dumps principais, poderíamos definir o ulimit adequadamente ou usar os vários utilitários principais de controle de arquivos do sistema operacional.

Mas essa pergunta é sobre o estágio "core dump já em andamento" ...

(Por exemplo, imagine que eu sou o solicitante em /programming/18368242/how-to-bypass-a-2tb-core-dump-file-system-limit e não quero desperdiçar 5 -6 TB de espaço em disco :))

Mike G.
fonte
No Linux, você pode impedir que o core dump seja gerado ... poderia ser uma opção?
precisa saber é o seguinte
Não - os core dumps são necessários em geral, mas estamos apenas procurando uma maneira de pará-los nos casos em que sabemos qual é o problema sem precisar do core, para economizar tempo / espaço em disco / etc ... É claro que podemos simplesmente excluir o núcleo assim que terminar o despejo (ou até desvinculá-lo antes disso), mas não há razão para juntar alguns shows de espaço em disco se pudéssemos matar o despejo do núcleo mais cedo.
Mike G.
Você pode usar "cat / dev / null> <path_to_core>" no script que chama o programa quando uma determinada condição é atendida, desde que a entrada / proc / <pid> exista, durma a cada segundo e execute o / cópia dev / null para o arquivo principal. Isso irá zerá-lo. Não tenho certeza do contexto completo por trás da pergunta, mas isso pode funcionar.
Schrute
Schrute, isso teria o mesmo efeito que desvincular o núcleo, não teria? O espaço em disco e os recursos do sistema ainda seriam consumidos até o núcleo concluir a gravação - o tamanho do arquivo não seria visível em du ou ls.
Mike G.
Recursos sim, no entanto, este é um método comum para lidar com um arquivo grande, como arquivo de núcleo / log, e não parar o PID. Depende apenas de qual é o objetivo.
Schrute

Respostas:

8

Geralmente: não, não há como matar de forma confiável um coredump.

Dito isto, há uma possibilidade (pelo menos no Linux) de comercial * NIX provavelmente não tem como

A possibilidade reside no fato de que a série 3.x do kernel é capaz de interromper a gravação de arquivos. Uma possibilidade é encontrar o encadeamento que está fazendo o despejo e enviar repetidamente o SIGKILL até que ele seja bem-sucedido.

Esta série de patches corrige o problema em algum nível.

Outra possibilidade é usar a sintaxe alternativa para o coredump_pattern. O manual diz que desde 2.6.19, em vez de um padrão, você pode usar um pipe e um programa (com parâmetros) que lidará com o despejo. Portanto, você terá o controle de qual dump será gravado para onde (/ dev / null é o candidato óbvio para seus núcleos inúteis).

Este patch também merece um pouco de atenção: http://linux.derkeiler.com/Mailing-Lists/Kernel/2010-06/msg00918.html

zeridon
fonte
Obrigado zeridon - essa é definitivamente a melhor resposta até agora.
Mike G.
Eu acho que se você usar o mecanismo de tubulação, poderá sair sem ler os dados do tubo, se souber que não é algo que deseja manter (a menos que um tubo quebrado crie outro problema ... precisaria testar isso.)
Alexis Wilke
0

verifique este link, pode ser útil

https://publib.boulder.ibm.com/httpserv/ihsdiag/coredumps.html

Hamed Shahinnejad
fonte
Embora isso possa teoricamente responder à pergunta, seria preferível incluir aqui as partes essenciais da resposta e fornecer o link para referência.
Tom O'Connor
Graças Hamed, mas enquanto essa ligação tem um monte de informação interessante, eu não acho que isso responde a minha pergunta (a menos que eu perdi - Eu não sou tudo o que ainda :) despertar)
Mike G.
-1

Parece que você pode executar o ulimit -c (supondo que você esteja usando o bash) para limitar o tamanho do dump principal.

Consulte: /ubuntu/220905/how-to-remove-limit-on-core-dump-file-size

e

http://ss64.com/bash/ulimit.html

Kerry
fonte
1
Kerry, como eu disse no OP, "obviamente, se soubéssemos antecipadamente que não queremos dumps principais, poderíamos definir o ulimit adequadamente ou usar os vários utilitários principais de controle de arquivos do sistema operacional". Estou tentando ver se há uma maneira de parar um despejo de núcleo, uma vez que ele já começou para uma tarefa muito grande (para economizar tempo / espaço em disco / recursos).
Mike G.