Memory

如何自動設置單個使用者的核心轉儲大小?

  • March 26, 2018

我正在執行 OpenSUSE。我通常使用互動式非登錄shell打開控制台bash,並在登錄後經常使用tcsh。我正在編寫一些C程式碼,使用 編譯gcc,並且我希望在執行檔失敗時創建核心轉儲文件。

我知道我可以手動選擇核心轉儲大小不受限制,但我不想輸入

limits coredumpsize unlimited

tcsh

ulimit -c unlimited

bash每次我以我的使用者身份登錄時,都在預設 shell中。

有沒有辦法在我以使用者身份登錄bash和/或時自動設置核心轉儲大小tcsh

經過一番研究,我可能已經解決了這個問題。一旦我登錄到 UNIX 機器,它會home根據選擇的 shell 從文件中系統上可用的 shell 將我重定向到目錄,\etc\passwd如下所示:

alandella:x:1000:100:alandella:/home/alandella:/bin/bash

這解釋了非登錄互動式bashshell (konsole)。外殼,讓它執行bashtcsh在登錄/註銷時讀取以下文件:

~/.login  -> Executes cmds at login
~/.tcshrc ->               same as ~./bashrc in bash and ~./cshrc in csh
~/.logout ->               at logout

因此,通過將以下行添加到~/.tcshrcand~/.bashrc文件中:

~/.bashrc -> ulimit -Sc X
~/.tcshrc -> limit coredumpsize X

哪裡X是一個值(kB)或unlimited,它應該可以解決問題。

有時,它被告知還要編輯~/.profile文件。我沒有編輯它,即使我bash的 shell 在登錄時獲取它。*為什麼它沒有區別?因為我總是使用非登錄 shell,所以我點兩下 konsole 打開終端。*該~/.profile文件在啟動時僅在登錄 shell 中獲取(通常sh,我不使用)。我bash按順序查看以下文件:

.bash_profile -> .bash_login -> .profile

在我的情況下,前兩個文件不存在,所以如果我使用登錄 shell 則bash來源。.profile

**筆記。**此操作必須以 root 身份完成,並且為了使此技巧起作用,必須/應該滿足以下條件:

  1. 該文件/etc/security/limits.conf為使用者和 root 設置了合適的硬/軟限制。如果硬限制核心轉儲大小為 2000 kB,那麼當我們修改~/.bashrc為 3000 kB 時,核心轉儲大小限制將繼續為 2000 kB。查找 limits.conf
  2. 下的文件/etc/pam.d包含該session required pam_limits.so行,以便進行/etc/security/limits.conf設置。
  3. 該文件/etc/sysctl.conf包含kernel.core_pattern = core.%e.%p,這將設置生成的核心文件的格式,其中 %e 是執行檔名,%p 是 pid。

引用自:https://unix.stackexchange.com/questions/432978