bash 進程從哪裡取得其預設訊號處理程序/陷阱?

bash 進程從哪裡取得其預設訊號處理程序/陷阱?

https://stackoverflow.com/questions/50606753/do-getrlimit-and-setrlimit-work-by-reading-from-and-writing-to-etc-sec#comment88227414_50607042

Bash 沒有針對 SIGQUIT 的特殊處理程序,也不參與創建核心轉儲的過程。當且僅當核心轉儲的 rlimit 夠大時,核心才會將核心轉儲寫入為 SIGQUIT 的「預設運算」的一部分;該 rlimit 可能是透過登入根據 limit.conf 中的內容建立的,也可能是使用 ulimit 等手動調整的。

我不太明白「Bash 沒有特殊的 SIGQUIT 處理程序」。

每個進程都有信號處理程序,即使其中一些是預設的,並且通常一個進程獲取其預設信號處理程序,並從中fork()複製其父進程的信號處理程序,並且execve()不更改信號處理程序,這是否正確?

bash 進程從哪裡取得其預設訊號處理程序/陷阱?

在 APUE 中,我無法找到login(或getty啟動序列中的其他程式)是否是第一個設定預設訊號處理程序(以及來自 的資源限制/etc/security/limits.conf,這是連結中主題的中心)並透過它們一直到登入 shell:

如果我們正確登錄,就會登入

• 改變到我們的主目錄(chdir)

• 更改我們的終端設備的所有權 (chown),以便我們擁有它

• 更改終端設備的存取權限,以便我們有權讀取和寫入它

• 透過呼叫setgid 和initgroups 設定我們的群組ID

• 使用登入擁有的所有資訊初始化環境:我們的主目錄 (HOME)、外殼 (SHELL)、使用者名稱(USER 和 LOGNAME)以及預設路徑 (PATH)

• 變更為我們的使用者 ID (setuid) 並呼叫我們的登入 shell,如下所示

execl("/bin/sh", "-sh", (char *)0);

相關內容