
Bash には SIGQUIT 用の特別なハンドラがなく、コア ダンプの作成プロセスには関与しません。カーネルは、コア ダンプの rlimit が十分に大きい場合にのみ、SIGQUIT の「デフォルト アクション」の一部としてコア ダンプを書き込みます。この rlimit は、limits.conf の内容に従ってログインによって確立されているか、ulimit などを使用して手動で調整されている可能性があります。
「Bash には SIGQUIT 用の特別なハンドラーがありません」というのがよくわかりません。
すべてのプロセスには、たとえ一部がデフォルトであってもシグナル ハンドラーがあり、通常、プロセスはデフォルトのシグナル ハンドラーを取得し、そこからfork()
親からシグナル ハンドラーをコピーし、execve()
シグナル ハンドラーを変更しないというのは正しいですか?
bash プロセスはデフォルトのシグナル ハンドラー/トラップをどこで取得しますか?
login
APUE では、 (またはgetty
起動シーケンス内の他のプログラム) が、デフォルトのシグナル ハンドラー (およびリンクのトピックの中心である からのリソース制限) を設定し、それをログイン シェルに渡す最初のプログラムであるかどう/etc/security/limits.conf
かがわかりません。
正しくログインすると、ログインは
• ホームディレクトリに変更する(chdir)
• 端末デバイスの所有権を変更(chown)して、所有する
• 端末デバイスのアクセス権限を変更して、読み取りと書き込みの権限を付与します。
• setgidとinitgroupsを呼び出してグループIDを設定する
• ログインが持つすべての情報(ホームディレクトリ(HOME)、シェル(SHELL)、ユーザー名(USERとLOGNAME)、デフォルトパス(PATH))を使用して環境を初期化します。
• ユーザーID(setuid)に変更し、ログインシェルを起動します。
execl("/bin/sh", "-sh", (char *)0);