NPTL, Exec-Shield e outros palavrões que fazem seus programas crasharem
O que são NPTL, Exec-Shield e porque meus programas de uma hora para outra crasham adoidamente? Se você usa RedHat 9, Fedora Core 1, kernel 2.6 e/ou kernel 2.4 patcheado, seus problemas podem se resolver após a leitura deste artigo.
NPTL
NPTL, também conhecido como Native POSIX Thread Library, é
o novo sistema de threading do kernel 2.6. O NPTL promete melhor
compatibilidade com o padrão POSIX, maior escalabilidade e maior
desempenho na criação e destruição de threads, colocando o Linux
em pé de igualdade com os Unix comerciais em termos de alto
desempenho (e custando muuuuuuuuito menos! :-)
Para os chegados em tecnicalidades ou estudiosos de sistemas
operacionais, vale a leitura do paper descritivo da
biblioteca em:
A RedHat vem implementando um backport do NPTL para os seus kernels
2.4 desde o RedHat 9 e o kernel do Fedora Core 1 tem o mesmo patch.
Só que alguns programas podem crashar alegremente, deixando você com um segfault na mão e uma cara de tacho. Exemplos clássicos são o IBM JRE e o Sun JVM (antes do 1.4.1, bem, você deveria estar utilizando o 1.4.2 mesmo...). Neste caso, LD_ASSUME_KERNEL é seu amigo.
LD_ASSUME_KERNEL é uma variável de ambiente que diz ao kernel para utilizar o velho LinuxThreads em vez do NPTL, com isso deixando o programa problemático mais feliz. Pode assumir os valores 2.2.5, 2.4.1 ou 2.4.19 (ou seja, emulação do comportamento de kernels específicos). Uma boa política é utilizar um alias do shell para o programa crashento, por exemplo:
Só que alguns programas podem crashar alegremente, deixando você com um segfault na mão e uma cara de tacho. Exemplos clássicos são o IBM JRE e o Sun JVM (antes do 1.4.1, bem, você deveria estar utilizando o 1.4.2 mesmo...). Neste caso, LD_ASSUME_KERNEL é seu amigo.
LD_ASSUME_KERNEL é uma variável de ambiente que diz ao kernel para utilizar o velho LinuxThreads em vez do NPTL, com isso deixando o programa problemático mais feliz. Pode assumir os valores 2.2.5, 2.4.1 ou 2.4.19 (ou seja, emulação do comportamento de kernels específicos). Uma boa política é utilizar um alias do shell para o programa crashento, por exemplo:
alias programa_crashento="LD_ASSUME_KERNEL=2.4.1 programa_crashento"
qualquer coisa vou te encomodar!