.ad
.SH 説明
\fBsigaltstack\fP() を使うと、 プロセスは新しい代替シグナルスタックを定義したり、 既存の代替シグナルスタックの状態を取得できる。
-シグナルハンドラが代替シグナルスタックを要求するように設定されていると (\fBsigaction\fP(2)
-参照)、ハンドラの実行中はそのシグナルスタックが使われる。
+ã\82·ã\82°ã\83\8aã\83«ã\83\8fã\83³ã\83\89ã\83©ã\83¼ã\81\8c代æ\9b¿ã\82·ã\82°ã\83\8aã\83«ã\82¹ã\82¿ã\83\83ã\82¯ã\82\92è¦\81æ±\82ã\81\99ã\82\8bã\82\88ã\81\86ã\81«è¨å®\9aã\81\95ã\82\8cã\81¦ã\81\84ã\82\8bã\81¨ (\fBsigaction\fP(2)
+å\8f\82ç\85§)ã\80\81ã\83\8fã\83³ã\83\89ã\83©ã\83¼ã\81®å®\9fè¡\8cä¸ã\81¯ã\81\9dã\81®ã\82·ã\82°ã\83\8aã\83«ã\82¹ã\82¿ã\83\83ã\82¯ã\81\8c使ã\82\8fã\82\8cã\82\8bã\80\82
代替シグナルスタックを使う際の一般的な手順は、以下の通りである:
.TP 3
1.
-代替シグナルスタックで使うメモリ領域を確保する。
+代替シグナルスタックで使うメモリー領域を確保する。
.TP
2.
\fBsigaltstack\fP() を使って、 代替シグナルスタックの存在と場所をシステムに知らせる。
.TP
3.
-\fBsigaction\fP(2) を使ってシグナルハンドラを確立する際、 \fBSA_ONSTACK\fP フラグを指定することにより、
-そのシグナルハンドラを代替シグナルスタック上で実行することを システムに知らせる。
+\fBsigaction\fP(2) ã\82\92使ã\81£ã\81¦ã\82·ã\82°ã\83\8aã\83«ã\83\8fã\83³ã\83\89ã\83©ã\83¼ã\82\92確ç«\8bã\81\99ã\82\8bé\9a\9bã\80\81 \fBSA_ONSTACK\fP ã\83\95ã\83©ã\82°ã\82\92æ\8c\87å®\9aã\81\99ã\82\8bã\81\93ã\81¨ã\81«ã\82\88ã\82\8aã\80\81
+ã\81\9dã\81®ã\82·ã\82°ã\83\8aã\83«ã\83\8fã\83³ã\83\89ã\83©ã\83¼ã\82\92代æ\9b¿ã\82·ã\82°ã\83\8aã\83«ã\82¹ã\82¿ã\83\83ã\82¯ä¸\8aã\81§å®\9fè¡\8cã\81\99ã\82\8bã\81\93ã\81¨ã\82\92 ã\82·ã\82¹ã\83\86ã\83 ã\81«ç\9f¥ã\82\89ã\81\9bã\82\8bã\80\82
.P
\fIss\fP 引き数は、新しいシグナルスタックを指定するために使う。 また \fIoss\fP 引き数は、現在確立されている
シグナルスタックの情報を取得するために使う。 この操作のうち 1 つだけを実行させるには、 使用しない引き数を NULL に指定すればよい。
新規の代替シグナルスタックを確立するには、 \fIss.ss_flags\fP を 0 に設定し、 \fIss.ss_sp\fP と \fIss.ss_size\fP に
スタックの開始アドレスとスタックサイズを指定する。 定数 \fBSIGSTKSZ\fP は、代替シグナルスタックが通常必要する
-サイズよりも充分大きく定義されている。 また定数 \fBMINSIGSTKSZ\fP は、 シグナルハンドラの実行に必要な最小サイズに定義されている。
+ã\82µã\82¤ã\82ºã\82\88ã\82\8aã\82\82å\85\85å\88\86大ã\81\8dã\81\8få®\9a義ã\81\95ã\82\8cã\81¦ã\81\84ã\82\8bã\80\82 ã\81¾ã\81\9få®\9aæ\95° \fBMINSIGSTKSZ\fP ã\81¯ã\80\81 ã\82·ã\82°ã\83\8aã\83«ã\83\8fã\83³ã\83\89ã\83©ã\83¼ã\81®å®\9fè¡\8cã\81«å¿\85è¦\81ã\81ªæ\9c\80å°\8fã\82µã\82¤ã\82ºã\81«å®\9a義ã\81\95ã\82\8cã\81¦ã\81\84ã\82\8bã\80\82
-代替スタックでシグナルハンドラが起動された場合には、 カーネルにより自動的に、\fIss.ss_sp\fP で指定されたアドレスは
-動作しているハードウェアアーキテクチャに適したアドレス境界に 調整される。
+代æ\9b¿ã\82¹ã\82¿ã\83\83ã\82¯ã\81§ã\82·ã\82°ã\83\8aã\83«ã\83\8fã\83³ã\83\89ã\83©ã\83¼ã\81\8cèµ·å\8b\95ã\81\95ã\82\8cã\81\9få ´å\90\88ã\81«ã\81¯ã\80\81 ã\82«ã\83¼ã\83\8dã\83«ã\81«ã\82\88ã\82\8aè\87ªå\8b\95ç\9a\84ã\81«ã\80\81\fIss.ss_sp\fP ã\81§æ\8c\87å®\9aã\81\95ã\82\8cã\81\9fã\82¢ã\83\89ã\83¬ã\82¹ã\81¯
+å\8b\95ä½\9cã\81\97ã\81¦ã\81\84ã\82\8bã\83\8fã\83¼ã\83\89ã\82¦ã\82§ã\82¢ã\82¢ã\83¼ã\82ã\83\86ã\82¯ã\83\81ã\83£ã\83¼ã\81«é\81©ã\81\97ã\81\9fã\82¢ã\83\89ã\83¬ã\82¹å¢\83ç\95\8cã\81« 調æ\95´ã\81\95ã\82\8cã\82\8bã\80\82
既存のスタックを無効にするには、 \fIss.ss_flags\fP を \fBSS_DISABLE\fP に指定する。 この場合、\fIss\fP
の他のフィールドは無視される。
.SH 注意
代替シグナルスタックを使用する最もよくある場面は、 \fBSIGSEGV\fP シグナルを扱うときである。 \fBSIGSEGV\fP
はプロセスの通常のスタックが利用できる空間が使い果たされた際に 生成されるシグナルである。この場合には、 \fBSIGSEGV\fP
-用のシグナルハンドラをプロセスのスタック上では起動することができない。 そのため、このシグナルを扱おうとする場合には、
+ç\94¨ã\81®ã\82·ã\82°ã\83\8aã\83«ã\83\8fã\83³ã\83\89ã\83©ã\83¼ã\82\92ã\83\97ã\83ã\82»ã\82¹ã\81®ã\82¹ã\82¿ã\83\83ã\82¯ä¸\8aã\81§ã\81¯èµ·å\8b\95ã\81\99ã\82\8bã\81\93ã\81¨ã\81\8cã\81§ã\81\8dã\81ªã\81\84ã\80\82 ã\81\9dã\81®ã\81\9fã\82\81ã\80\81ã\81\93ã\81®ã\82·ã\82°ã\83\8aã\83«ã\82\92æ\89±ã\81\8aã\81\86ã\81¨ã\81\99ã\82\8bå ´å\90\88ã\81«ã\81¯ã\80\81
代替シグナルスタックを使用しなければならない。
.P
プロセスが標準のシグナルスタックを使い果たすことが予想される場合は、 代替シグナルスタックを確立すると便利である。 例えば、スタックが最上位アドレスから
標準のスタックを使い果たしてしまうと、 カーネルはプロセスに \fBSIGSEGV\fP シグナルを送る。
このような状況では、代替シグナルスタック上でしかシグナルをキャッチできない。
.P
-Linux がサポートする多くのハードウェアアーキテクチャでは、 スタックは下位アドレス方向に積まれる。 \fBsigaltstack\fP()
+Linux ã\81\8cã\82µã\83\9dã\83¼ã\83\88ã\81\99ã\82\8bå¤\9aã\81\8fã\81®ã\83\8fã\83¼ã\83\89ã\82¦ã\82§ã\82¢ã\82¢ã\83¼ã\82ã\83\86ã\82¯ã\83\81ã\83£ã\83¼ã\81§ã\81¯ã\80\81 ã\82¹ã\82¿ã\83\83ã\82¯ã\81¯ä¸\8bä½\8dã\82¢ã\83\89ã\83¬ã\82¹æ\96¹å\90\91ã\81«ç©\8dã\81¾ã\82\8cã\82\8bã\80\82 \fBsigaltstack\fP()
はスタックが積まれる方向を自動的に決定する。
.P
-代æ\9b¿ã\82·ã\82°ã\83\8aã\83«ã\82¹ã\82¿ã\83\83ã\82¯ä¸\8aã\81§å®\9fè¡\8cã\81\95ã\82\8cã\81¦ã\81\84ã\82\8b ã\82·ã\82°ã\83\8aã\83«ã\83\8fã\83³ã\83\89ã\83©ã\81\8bã\82\89å\91¼ã\81°ã\82\8cã\82\8bé\96¢æ\95°ã\82\82ã\80\81代æ\9b¿ã\82·ã\82°ã\83\8aã\83«ã\83\8fã\83³ã\83\89ã\83©を使う
-(ã\83\97ã\83ã\82»ã\82¹ã\81\8c代æ\9b¿ã\82·ã\82°ã\83\8aã\83«ã\82¹ã\82¿ã\83\83ã\82¯ä¸\8aã\81§å®\9fè¡\8cã\81\95ã\82\8cã\81¦ã\81\84ã\82\8bå ´å\90\88ã\80\81 ä»\96ã\81®ã\82·ã\82°ã\83\8aã\83«ã\81§å\91¼ã\81³å\87ºã\81\95ã\82\8cã\82\8bã\83\8fã\83³ã\83\89ã\83©ã\82\82ã\81\93ã\81®ä»£æ\9b¿ã\82·ã\82°ã\83\8aã\83«ã\83\8fã\83³ã\83\89ã\83©を使う)。
+代æ\9b¿ã\82·ã\82°ã\83\8aã\83«ã\82¹ã\82¿ã\83\83ã\82¯ä¸\8aã\81§å®\9fè¡\8cã\81\95ã\82\8cã\81¦ã\81\84ã\82\8b ã\82·ã\82°ã\83\8aã\83«ã\83\8fã\83³ã\83\89ã\83©ã\83¼ã\81\8bã\82\89å\91¼ã\81°ã\82\8cã\82\8bé\96¢æ\95°ã\82\82ã\80\81代æ\9b¿ã\82·ã\82°ã\83\8aã\83«ã\83\8fã\83³ã\83\89ã\83©ã\83¼を使う
+(ã\83\97ã\83ã\82»ã\82¹ã\81\8c代æ\9b¿ã\82·ã\82°ã\83\8aã\83«ã\82¹ã\82¿ã\83\83ã\82¯ä¸\8aã\81§å®\9fè¡\8cã\81\95ã\82\8cã\81¦ã\81\84ã\82\8bå ´å\90\88ã\80\81 ä»\96ã\81®ã\82·ã\82°ã\83\8aã\83«ã\81§å\91¼ã\81³å\87ºã\81\95ã\82\8cã\82\8bã\83\8fã\83³ã\83\89ã\83©ã\83¼ã\82\82ã\81\93ã\81®ä»£æ\9b¿ã\82·ã\82°ã\83\8aã\83«ã\83\8fã\83³ã\83\89ã\83©ã\83¼を使う)。
標準のスタックとは異なり、 システムは代替シグナルスタックを自動的に拡張しない。 代替シグナルスタック用に確保したサイズを越えた場合、
結果は予想できない。
.P