Python não despeja arquivos principais

2

Eu tenho um problema em que um processo Python está atingindo uma falha de segmentação, mas não produzindo um arquivo principal.

O seguinte é um exemplo de brinquedo que não produz um arquivo principal nas seguintes distribuições:

  • Ubuntu 12.10
  • Fedora 18

mas produz arquivos principais nas seguintes distros:

  • Scientific Linux 6
  • Mac OS X

A reprodução:

$ python -c 'import time; time.sleep(120)'&    
$ kill -abrt $!   [1]+   
Aborted                 python -c 'import time; time.sleep(120)'  
$ ls core*   ls: cannot access core*: No such file or directory  

No entanto, se eu enviar um sinal semelhante para uma instância sleep , recebo um arquivo principal:

$ sleep 120 &  
$ kill -abrt $!  
[1]+  Aborted                 (core dumped) sleep 120  
$ ls core*  
core.8603  

Na minha caixa do Fedora 18, aqui está o meu /proc/sys/kernel/core_pattern :

$ cat /proc/sys/kernel/core_pattern   
core

E eu defini o seguinte:

$ ulimit -c  
unlimited

Isso é reproduzível independentemente de o serviço abrtd estar em execução ou não.

Tenho certeza de que perdi algumas configurações básicas, mas não sei o quê. Obrigado!

EDITAR : isso pode ser resolvido executando:

$ echo 1 >/proc/sys/fs/suid_dumpable
    
por Asim Ihsan 19.07.2013 / 19:06

1 resposta

1

tl; dr

$ echo 1 >/proc/sys/fs/suid_dumpable

(ou o equivalente em /etc/sysctl.conf para persistir a mudança nas reinicializações)

mais longo

No meu cenário, eu estava usando setcap para definir determinados recursos no meu processo Python, por exemplo permitir o uso de soquetes brutos sem ter que ser raiz. Com isso habilitado, você precisa ser root para obter um dump principal ou usar o comando acima para informar explicitamente ao kernel que está tudo bem para os usuários não-root obterem os core dumps que eles mesmos podem acessar.

(a configuração 2 ainda permitiria os core dumps nessa situação, mas os dumps principais só seriam acessíveis pelo usuário root).

    
por 24.07.2013 / 22:48