Memory
如何自動設置單個使用者的核心轉儲大小?
我正在執行 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
這解釋了非登錄互動式
bash
shell (konsole)。外殼,讓它執行bash
,tcsh
在登錄/註銷時讀取以下文件:~/.login -> Executes cmds at login ~/.tcshrc -> same as ~./bashrc in bash and ~./cshrc in csh ~/.logout -> at logout
因此,通過將以下行添加到
~/.tcshrc
and~/.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 身份完成,並且為了使此技巧起作用,必須/應該滿足以下條件:
- 該文件
/etc/security/limits.conf
為使用者和 root 設置了合適的硬/軟限制。如果硬限制核心轉儲大小為 2000 kB,那麼當我們修改~/.bashrc
為 3000 kB 時,核心轉儲大小限制將繼續為 2000 kB。查找limits.conf
。- 下的文件
/etc/pam.d
包含該session required pam_limits.so
行,以便進行/etc/security/limits.conf
設置。- 該文件
/etc/sysctl.conf
包含kernel.core_pattern = core.%e.%p
,這將設置生成的核心文件的格式,其中 %e 是執行檔名,%p 是 pid。