Existe um gancho para determinar a geração do arquivo principal concluída

2

Como posso determinar que a geração de arquivos core.<pid> foi iniciada / concluída?

    
por denys 11.01.2016 / 22:28

2 respostas

1

Você pode colocar um inotify no diretório que conterá o arquivo principal. Demonstração:

/tmp$ { ulimit -c unlimited; exec sleep 9999; } &
[1] 25646
/tmp$ kill -QUIT %1                              
[1]  + 25646 quit (core dumped)  { ulimit -c unlimited; exec sleep 9999; }

E em outro terminal:

$ inotifywait -e close_write /tmp
Setting up watches.
Watches established.
/tmp/ CLOSE_WRITE,CLOSE core

Essa última linha, relatando um evento CLOSE_WRITE , é emitida quando o arquivo principal é totalmente escrito.

Como alternativa, o Linux permite personalizar a geração de arquivos principais. Essa é uma configuração de todo o sistema e requer acesso root, portanto, pode ou não se adequar ao seu cenário. Você faz isso configurando o kernel.core_pattern ioctl para apontar para um programa que receberá o conteúdo principal na saída padrão. Um programa de brinquedos poderia ser

#!/bin/sh
cat >"/var/cores/$1-$2-$3.core"
# Do whatever you want now that the core file has been written
echo "/var/cores/$1-$2-$3.core" | mail -s "$4 dumped core" denys

em /usr/local/sbin/my_core_dumper , registrado com

sysctl kernel.core_pattern='|/usr/local/sbin/my_core_dumper %t %P %e %E'
    
por 12.01.2016 / 00:41
-1

Não tenho certeza se existe um "gancho" para determinar isso, mas, a menos que seja um despejo principal do sistema operacional, isso é feito em um instante. No momento em que você vê o arquivo principal, ele é concluído, na minha experiência. Se algo está demorando muito para despejar o núcleo ou qualquer outro arquivo para esse assunto, eu normalmente verifico o tamanho do arquivo em intervalos de 5 segundos em um loop e quando ele não aumentou nas 3 ou 4 iterações, posso seguramente assumir que ele é feito.

Eu sei que isso não é o que você está procurando, mas é uma solução prática, na falta de outra solução.

    
por 11.01.2016 / 22:37