GNU/Linux >> Znalost Linux >  >> Linux

Vypsáno jádro, ale soubor jádra není v aktuálním adresáři?

Přečtěte si /usr/src/linux/Documentation/sysctl/kernel.txt.

core_pattern se používá k určení názvu vzoru souboru výpisu jádra.

  • Pokud je prvním znakem vzoru '|', bude jádro považovat zbytek vzoru za příkaz ke spuštění. Výpis jádra bude přepsán na standardní vstup tohoto programu namísto do souboru.

Místo zápisu výpisu jádra na disk je váš systém nakonfigurován tak, aby jej posílal do abrt (to znamená:Automated Bug Reporting Tool, ne místo toho program "přerušit". Automatizovaný nástroj pro hlášení chyb možná není tak zdokumentován, jak by měl být...

V každém případě, rychlá odpověď je, že byste měli být schopni najít svůj základní soubor v /var/cache/abrt , kde abrt po vyvolání jej uloží. Podobně mohou jiné systémy používající Apport oddálit jádra v /var/crash , a tak dále.


Na nedávném Ubuntu (v mém případě 12.04) je možné vytisknout „Segmentation fault (core dumped)“, ale nevytvoří se žádný soubor jádra tam, kde byste jej očekávali (například pro lokálně zkompilovaný program).

To se může stát, pokud máte základní velikost souboru ulimit 0 (neudělali jste ulimit -c unlimited ) -- toto je výchozí nastavení na Ubuntu. Normálně by to potlačilo "(core dumpinged)", čímž by vás navedlo na vaši chybu, ale na Ubuntu jsou soubory corefiles odesílány do Apport (systém hlášení pádů Ubuntu) přes /proc/sys/kernel/core_pattern , a zdá se, že to způsobuje zavádějící zprávu.

Pokud Apport zjistí, že dotyčný program není jedním z nich, měl by hlásit selhání (což můžete vidět v /var/log/apport.log ), vrací se k simulaci výchozího chování jádra při vkládání souboru jádra do cwd (to se provádí ve skriptu /usr/share/apport/apport ). To zahrnuje ctění ulimit, v takovém případě nedělá nic. Ale (předpokládám), že pokud jde o jádro, byl vygenerován soubor corefile (a přenesen do aportu), odtud zpráva "Segmentation fault (core dumped)".

Nakonec PEBKAC za to, že zapomněl nastavit ulimit, ale zavádějící zpráva mě přiměla k tomu, že jsem si chvíli myslel, že se zblázním a přemýšlel, co žere moje corefiles.

(Obecně také manuálová stránka core(5) -- man 5 core -- je dobrým odkazem na to, kde končí váš základní soubor a proč nemusí být zapsán.)


Linux
  1. Jak najít nejstarší soubor ve stromu adresářů v Linuxu

  2. Porovnat adresáře, ale ne obsah souborů?

  3. Jak vytvořit nové okno v aktuálním adresáři v Tmux?

  1. Vysvětlení adresáře /etc/sysconfig

  2. SVN kontroluje obsah složky, nikoli složku samotnou

  3. jak najít vlastníka souboru nebo adresáře v pythonu

  1. file_put_contents nevytváří soubor txt

  2. Jak získám absolutní adresář souboru v bash?

  3. Jak ukončit průzkumníka souborů Ranger zpět do příkazového řádku, ale zachovat aktuální adresář?