OSDN Git Service

(split) Apply minor changes from v3.32 to v3.35 in the upstream.
[linuxjm/LDP_man-pages.git] / release / man2 / signalfd.2
1 .\" Copyright (C) 2008 Michael Kerrisk <mtk.manpages@gmail.com>
2 .\" starting from a version by Davide Libenzi <davidel@xmailserver.org>
3 .\"
4 .\" This program is free software; you can redistribute it and/or modify
5 .\" it under the terms of the GNU General Public License as published by
6 .\" the Free Software Foundation; either version 2 of the License, or
7 .\" (at your option) any later version.
8 .\"
9 .\" This program is distributed in the hope that it will be useful,
10 .\" but WITHOUT ANY WARRANTY; without even the implied warranty of
11 .\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 .\" GNU General Public License for more details.
13 .\"
14 .\" You should have received a copy of the GNU General Public License
15 .\" along with this program; if not, write to the Free Software
16 .\" Foundation, Inc., 59 Temple Place, Suite 330, Boston,
17 .\" MA  02111-1307  USA
18 .\"
19 .\" Japanese Version Copyright (c) 2008  Akihiro MOTOKI
20 .\"         all rights reserved.
21 .\" Translated 2008-04-06, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>, LDP v2.79
22 .\" Updated 2008-11-10, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>, LDP v3.13
23 .\" Updated 2009-02-23, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>, LDP v3.18
24 .\" 
25 .TH SIGNALFD 2 2009-01-13 Linux "Linux Programmer's Manual"
26 .SH Ì¾Á°
27 signalfd \- ¥·¥°¥Ê¥ë¼õ¤±ÉÕ¤±ÍѤΥե¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤òÀ¸À®¤¹¤ë
28 .SH ½ñ¼°
29 .B #include <sys/signalfd.h>
30 .sp
31 .BI "int signalfd(int " fd ", const sigset_t *" mask ", int " flags );
32 .SH ÀâÌÀ
33 .BR signalfd ()
34 ¤Ï¡¢¸Æ¤Ó½Ð¤·¸µ°¸¤Æ¤Î¥·¥°¥Ê¥ë¤ò¼õ¤±ÉÕ¤±¤ë¤¿¤á¤Ë»ÈÍѤµ¤ì¤ë¥Õ¥¡¥¤¥ë
35 ¥Ç¥£¥¹¥¯¥ê¥×¥¿¤òÀ¸À®¤¹¤ë¡£
36 ¤³¤ÎÊýË¡¤Ï¥·¥°¥Ê¥ë¥Ï¥ó¥É¥é¤ä
37 .BR sigwaitinfo (2)
38 ¤òÍѤ¤¤ëÊýË¡¤ÎÂå¤ï¤ê¤È¤Ê¤ë¤â¤Î¤Ç¤¢¤ê¡¢¤³¤Î¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤ò
39 .BR select (2),
40 .BR poll (2),
41 .BR epoll (7)
42 ¤Ç´Æ»ë¤Ç¤­¤ë¤È¤¤¤¦ÍøÅÀ¤¬¤¢¤ë¡£
43
44 .I mask
45 °ú¤­¿ô¤Ë¤Ï¡¢¸Æ¤Ó½Ð¤·¸µ¤¬¤³¤Î¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿·Ðͳ¤Ç¼õ¤±ÉÕ¤±¤¿¤¤
46 ¥·¥°¥Ê¥ë½¸¹ç¤ò»ØÄꤹ¤ë¡£¤³¤Î°ú¤­¿ô¤Ç»ØÄꤹ¤ë¥·¥°¥Ê¥ë½¸¹ç¤ÎÆâÍƤϡ¢
47 .BR sigsetops (3)
48 ¤ÇÀâÌÀ¤µ¤ì¤Æ¤¤¤ë¥Þ¥¯¥í¤ò»È¤Ã¤Æ½é´ü²½¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¡£
49 Ä̾¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿·Ðͳ¤Ç¼õ¿®¤¹¤ë¥·¥°¥Ê¥ë½¸¹ç¤Ï¡¢
50 ¤½¤Î¥·¥°¥Ê¥ë¤¬¥Ç¥Õ¥©¥ë¥È¤ÎÇÛÁ÷ÊýË¡¤Ë´ð¤¤¤Æ½èÍý¤µ¤ì¤ë¤Î¤òËɤ°¤¿¤á¤Ë¡¢
51 .BR sigprocmask (2)
52 ¤ò»È¤Ã¤Æ¥Ö¥í¥Ã¥¯¤·¤Æ¤ª¤¯¤Ù¤­¤Ç¤¢¤ë¡£
53 ¥·¥°¥Ê¥ë
54 .B SIGKILL
55 ¤È
56 .B SIGSTOP
57 ¤ò signalfd ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿·Ðͳ¤Ç¼õ¿®¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Ê¤¤¡£
58 ¤³¤ì¤é¤Î¥·¥°¥Ê¥ë¤¬
59 .I mask
60 ¤Ç»ØÄꤵ¤ì¤¿¾ì¹ç¤Ë¤ÏÌۤäÆ̵»ë¤µ¤ì¤ë¡£
61
62 .I fd
63 °ú¤­¿ô¤¬ \-1 ¤Î¾ì¹ç¡¢
64 .BR signalfd ()
65 ¤Ï¿·¤·¤¤¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤òÀ¸À®¤·¡¢
66 .I mask
67 ¤Ç»ØÄꤵ¤ì¤¿¥·¥°¥Ê¥ë½¸¹ç¤ò¤½¤Î¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Ë´ØÏ¢ÉÕ¤±¤ë¡£
68 .I fd
69 °ú¤­¿ô¤¬ \-1 °Ê³°¤Î¾ì¹ç¡¢
70 .I fd
71 ¤Ë¤ÏÍ­¸ú¤Ê´û¸¤Î signalfd ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤ò»ØÄꤷ¤Ê¤±¤ì¤Ð¤Ê¤é¤º¡¢
72 ¤½¤Î¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Ë´ØÏ¢ÉÕ¤±¤é¤ì¤Æ¤¤¤ë¥·¥°¥Ê¥ë½¸¹ç¤Ï
73 .I mask
74 ¤ò»È¤Ã¤ÆÃÖ¤­´¹¤¨¤é¤ì¤ë¡£
75
76 Linux 2.6.27 °Ê¹ß¤Ç¤Ï¡¢
77 °Ê²¼¤ÎÃͤΤ¤¤¯¤Ä¤«¤ò¥Ó¥Ã¥Èñ°Ì¤ÎÏÀÍýÏ (OR) ¤Ç»ØÄꤹ¤ë¤³¤È¤Ç¡¢
78 .BR signalfd ()
79 ¤Î¿¶Éñ¤¤¤òÊѹ¹¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¡£
80 .TP 14
81 .B SFD_NONBLOCK
82 ¿·¤·¤¯À¸À®¤µ¤ì¤ë¥ª¡¼¥×¥ó¥Õ¥¡¥¤¥ëµ­½Ò (open file description) ¤Î
83 .B O_NONBLOCK
84 ¥Õ¥¡¥¤¥ë¥¹¥Æ¡¼¥¿¥¹¥Õ¥é¥°¤ò¥»¥Ã¥È¤¹¤ë¡£
85 ¤³¤Î¥Õ¥é¥°¤ò»È¤¦¤³¤È¤Ç¡¢
86 .B O_NONBLOCK
87 ¤ò¥»¥Ã¥È¤¹¤ë¤¿¤á¤Ë
88 .BR fcntl (2)
89 ¤òÄɲäǸƤӽФ¹É¬Íפ¬¤Ê¤¯¤Ê¤ë¡£
90 .TP
91 .B SFD_CLOEXEC
92 ¿·¤·¤¤¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤ËÂФ·¤Æ
93 close-on-exec
94 .RB ( FD_CLOEXEC )
95 ¥Õ¥é¥°¤ò¥»¥Ã¥È¤¹¤ë¡£
96 ¤³¤Î¥Õ¥é¥°¤¬Ìò¤ËΩ¤ÄÍýͳ¤Ë¤Ä¤¤¤Æ¤Ï¡¢
97 .BR open (2)
98 ¤Î
99 .B O_CLOEXEC
100 ¥Õ¥é¥°¤ÎÀâÌÀ¤ò»²¾È¤Î¤³¤È¡£
101 .PP
102 ¥Ð¡¼¥¸¥ç¥ó 2.6.26 °ÊÁ°¤Î Linux ¤Ç¤Ï¡¢
103 .I flags
104 °ú¤­¿ô¤Ï̤»ÈÍѤǤ¢¤ê¡¢0 ¤ò»ØÄꤷ¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£
105
106 .BR signalfd ()
107 ¤¬ÊÖ¤¹¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Ï°Ê²¼¤ÎÁàºî¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤ë¡£
108 .TP
109 .BR read (2)
110 .I mask
111 ¤Ë»ØÄꤵ¤ì¤Æ¤¤¤ë¥·¥°¥Ê¥ë¤Î¤¦¤Á°ì¤Ä°Ê¾å¤¬¤½¤Î¥×¥í¥»¥¹¤ËÂФ·¤Æ
112 ½èÍýÂÔ¤Á (pending) ¤Ç¤¢¤ì¤Ð¡¢¤½¤ì¤é¤Î¥·¥°¥Ê¥ë¤Î¾ðÊó¤¬
113 .BR read (2)
114 ¤ËÅϤµ¤ì¤¿¥Ð¥Ã¥Õ¥¡¤ò»È¤Ã¤Æ¡¢
115 .I signalfd_siginfo
116 ¹½Â¤ÂΤ˳ÊǼ¤µ¤ì¤ÆÊÖ¤µ¤ì¤ë¡£
117 .BR read (2)
118 ¤Ï¡¢¥Ð¥Ã¥Õ¥¡¤Ë³ÊǼ²Äǽ¤ÊÈϰϤǤǤ­¤ë¤À¤±Â¿¤¯¤Î½èÍýÂÔ¤Á¤Î¥·¥°¥Ê¥ë¤Ë
119 ¤Ä¤¤¤Æ¤Î¾ðÊó¤òÊÖ¤¹¡£
120 ¥Ð¥Ã¥Õ¥¡¤ÏºÇÄã¤Ç¤â
121 .I "sizeof(struct signalfd_siginfo)"
122 ¥Ð¥¤¥È¤ÎÂ礭¤µ¤¬¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£
123 .BR read (2)
124 ¤ÎÊÖ¤êÃͤÏÆɤ߽Фµ¤ì¤¿¥È¡¼¥¿¥ë¤Î¥Ð¥¤¥È¿ô¤Ç¤¢¤ë¡£
125 .IP
126 .BR read (2)
127 ¤¬¹Ô¤ï¤ì¤¿·ë²Ì¡¢¥·¥°¥Ê¥ë¤Ï¾ÃÈñ¤µ¤ì¡¢
128 ¤³¤ì¤é¤Î¥·¥°¥Ê¥ë¤Ï¤½¤Î¥×¥í¥»¥¹¤ËÂФ·¤Æ¤Ï½èÍýÂÔ¤Á¤Ç¤Ï¤Ê¤¯¤Ê¤ë
129 (¤Ä¤Þ¤ê¡¢¥·¥°¥Ê¥ë¥Ï¥ó¥É¥é¤ÇÊ᪤µ¤ì¤ë¤³¤È¤â¤Ê¤¯¡¢
130 .BR sigwaitinfo (2)
131 ¤ò»È¤Ã¤Æ¼õ¤±¼è¤ë¤³¤È¤â¤Ç¤­¤Ê¤¯¤Ê¤ë)¡£
132 .IP
133 .I mask
134 ¤Ë»ØÄꤵ¤ì¤Æ¤¤¤ë¥·¥°¥Ê¥ë¤¬¤½¤Î¥×¥í¥»¥¹¤ËÂФ·¤Æ°ì¤Ä¤â½èÍýÂÔ¤Á¤Ç¤Ê¤±¤ì¤Ð¡¢
135 .BR read (2)
136 ¤Ï¡¢
137 .I mask
138 ¤Ç»ØÄꤵ¤ì¤¿¥·¥°¥Ê¥ë¤Î¤¦¤Á¤¤¤º¤ì¤«°ì¤Ä¤¬¤½¤Î¥×¥í¥»¥¹¤ËÂФ·¤ÆȯÀ¸¤¹¤ë¤Þ¤Ç
139 Ää»ß (block) ¤¹¤ë¡¢¤â¤·¤¯¤Ï¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤¬ÈóÄä»ß (nonblocking)
140 ¤ËÀßÄꤵ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ï¥¨¥é¡¼
141 .B EAGAIN
142 ¤Ç¼ºÇÔ¤¹¤ë¡£
143 .TP
144 .BR poll "(2), " select "(2) (¤ÈƱÍͤÎÁàºî)"
145 .I mask
146 ¤Ë»ØÄꤵ¤ì¤¿¥·¥°¥Ê¥ë¤Î¤¦¤Á°ì¤Ä°Ê¾å¤¬¤½¤Î¥×¥í¥»¥¹¤ËÂФ·¤Æ½èÍýÂÔ¤Á¤Ç¤¢¤ì¤Ð¡¢
147 ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤ÏÆɤ߽Ф·²Äǽ¤È¤Ê¤ë
148 .RB ( select (2)
149 ¤Î
150 .I readfds
151 °ú¤­¿ô¤ä
152 .BR poll (2)
153 ¤Î
154 .B POLLIN
155 ¥Õ¥é¥°)¡£
156 .IP
157 signalfd ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Ï¡¢¤³¤ì°Ê³°¤Î¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿
158 ¿½Å API ¤Ç¤¢¤ë
159 .BR pselect (2),
160 .BR ppoll (2),
161 .BR epoll (7)
162 ¤â¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤ë¡£
163 .TP
164 .BR close (2)
165 ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤¬¤½¤ì°Ê¹ß¤ÏɬÍפʤ¯¤Ê¤Ã¤¿ºÝ¤Ë¤Ï¡¢¥¯¥í¡¼¥º¤¹¤Ù¤­¤Ç¤¢¤ë¡£
166 Ʊ¤¸ signalfd ¥ª¥Ö¥¸¥§¥¯¥È¤Ë´ØÏ¢ÉÕ¤±¤é¤ì¤¿¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤¬Á´¤Æ
167 ¥¯¥í¡¼¥º¤µ¤ì¤ë¤È¡¢¤½¤Î¥ª¥Ö¥¸¥§¥¯¥ÈÍѤλñ¸»¤¬¥«¡¼¥Í¥ë¤Ë¤è¤ê²òÊü¤µ¤ì¤ë¡£
168 .SS signalfd_siginfo ¹½Â¤ÂÎ
169 signalfd ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤«¤é¤Î
170 .BR read (2)
171 ¤ÇÊÖ¤µ¤ì¤ë
172 .I signalfd_siginfo
173 ¹½Â¤ÂΤΥե©¡¼¥Þ¥Ã¥È¤Ï°Ê²¼¤ÎÄ̤ê¤Ç¤¢¤ë¡£
174 .in +4n
175 .nf
176
177 struct signalfd_siginfo {
178 struct signalfd_siginfo {
179     uint32_t ssi_signo;   /* ¥·¥°¥Ê¥ëÈÖ¹æ */
180     int32_t  ssi_errno;   /* ¥¨¥é¡¼ÈÖ¹æ (̤»ÈÍÑ) */
181     int32_t  ssi_code;    /* ¥·¥°¥Ê¥ë¥³¡¼¥É */
182     uint32_t ssi_pid;     /* Á÷¿®¸µ¤Î PID */
183     uint32_t ssi_uid;     /* Á÷¿®¸µ¤Î¼Â UID */
184     int32_t  ssi_fd;      /* ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿ (SIGIO) */
185     uint32_t ssi_tid;     /* ¥«¡¼¥Í¥ë¥¿¥¤¥Þ ID (POSIX ¥¿¥¤¥Þ)
186     uint32_t ssi_band;    /* Band ¥¤¥Ù¥ó¥È (SIGIO) */
187     uint32_t ssi_overrun; /* POSIX ¥¿¥¤¥Þ¤Î¥ª¡¼¥Ð¡¼¥é¥ó²ó¿ô */
188     uint32_t ssi_trapno;  /* ¥·¥°¥Ê¥ë¤Î¸¶°ø¤È¤Ê¤Ã¤¿¥È¥é¥Ã¥×ÈÖ¹æ */
189 .\" ¤Û¤È¤ó¤É¤Î¥¢¡¼¥­¥Æ¥¯¥Á¥ã¤Ç ssi_trapno ¤Ï̤»ÈÍÑ
190     int32_t  ssi_status;  /* ½ªÎ»¥¹¥Æ¡¼¥¿¥¹¤«¥·¥°¥Ê¥ë (SIGCHLD) */
191     int32_t  ssi_int;     /* sigqueue(3) ¤«¤éÁ÷¤é¤ì¤¿À°¿ô */
192     uint64_t ssi_ptr;     /* sigqueue(3) ¤«¤éÁ÷¤é¤ì¤¿¥Ý¥¤¥ó¥¿ */
193     uint64_t ssi_utime;   /* ¾ÃÈñ¤·¤¿¥æ¡¼¥¶ CPU »þ´Ö (SIGCHLD) */
194     uint64_t ssi_stime;   /* ¾ÃÈñ¤·¤¿¥·¥¹¥Æ¥à CPU »þ´Ö (SIGCHLD) */
195     uint64_t ssi_addr;    /* ¥·¥°¥Ê¥ë¤òÀ¸À®¤·¤¿¥¢¥É¥ì¥¹
196                              (¥Ï¡¼¥É¥¦¥§¥¢¤¬À¸À®¤·¤¿¥·¥°¥Ê¥ë¤Î¾ì¹ç) */
197     uint8_t  pad[\fIX\fP];      /* pad ¤ÎÂ礭¤µ¤Ï 128 ¥Ð¥¤¥È
198                              (¾­Íè¤Î¥Õ¥£¡¼¥ë¥ÉÄɲÃÍѤξì½ê¤Î³ÎÊÝ) */
199 };
200
201 .fi
202 .in
203 .I signalfd_siginfo
204 ¹½Â¤ÂΤγƥե£¡¼¥ë¥É¤Ï¡¢
205 .I siginfo_t
206 ¹½Â¤ÂΤÎƱ¤¸¤è¤¦¤Ê̾Á°¤Î¥Õ¥£¡¼¥ë¥É¤ÈƱÍͤǤ¢¤ë¡£
207 .I siginfo_t
208 ¹½Â¤ÂΤˤĤ¤¤Æ¤Ï
209 .BR sigaction (2)
210 ¤ËÀâÌÀ¤¬¤¢¤ë¡£
211 ÊÖ¤µ¤ì¤¿
212 .I signalfd_siginfo
213 ¹½Â¤ÂΤÎÁ´¤Æ¤Î¥Õ¥£¡¼¥ë¥É¤¬¤¢¤ë¥·¥°¥Ê¥ë¤ËÂФ·¤ÆÍ­¸ú¤Ê¤ï¤±¤Ç¤Ï¤Ê¤¤¡£
214 ¤É¤Î¥Õ¥£¡¼¥ë¥É¤¬Í­¸ú¤«¤Ï¡¢
215 .I ssi_code
216 ¥Õ¥£¡¼¥ë¥É¤ÇÊÖ¤µ¤ì¤ëÃͤ«¤éȽÄꤹ¤ë¤³¤È¤¬¤Ç¤­¤ë¡£
217 ¤³¤Î¥Õ¥£¡¼¥ë¥É¤Ï
218 .I siginfo_t
219 ¤Î
220 .I si_code
221 ¥Õ¥£¡¼¥ë¥É¤ÈƱÍͤǤ¢¤ë¡£¾ÜºÙ¤Ï
222 .BR sigaction (2)
223 ¤ò»²¾È¡£
224 .SS fork(2) ¤Ç¤Î°·¤¤
225 .BR fork (2)
226 ¤¬¹Ô¤ï¤ì¤ë¤È¡¢»Ò¥×¥í¥»¥¹¤Ï signalfd ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Î¥³¥Ô¡¼¤ò
227 ·Ñ¾µ¤¹¤ë¡£
228 »Ò¥×¥í¥»¥¹¤Ç¤³¤Î¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤«¤é
229 .BR read (2)
230 ¤ò¹Ô¤¦¤È¡¢»Ò¥×¥í¥»¥¹¤ËÂФ¹¤ë¥­¥å¡¼¤ËÆþ¤Ã¤Æ¤¤¤ë¥·¥°¥Ê¥ë¤Ë´Ø¤¹¤ë
231 ¾ðÊó¤¬ÊÖ¤µ¤ì¤ë¡£
232 .SS execve(2) ¤Ç¤Î°·¤¤
233 ¾¤Î¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤ÈÁ´¤¯Æ±Íͤˡ¢
234 signalfd ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤â
235 .BR execve (2)
236 ¤ÎÁ°¸å¤Ç¥ª¡¼¥×¥ó¤µ¤ì¤¿¤Þ¤Þ¤È¤Ê¤ë¡£Ã¢¤·¡¢¤½¤Î¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Ë
237 close-on-exec ¤Î¥Þ¡¼¥¯
238 .RB ( fcntl (2)
239 »²¾È) ¤¬ÉÕ¤¤¤Æ¤¤¤ë¾ì¹ç¤Ï¥¯¥í¡¼¥º¤µ¤ì¤ë¡£
240 .BR execve (2)
241 ¤ÎÁ°¤ËÆɤ߽Ф·²Äǽ¤È¤Ê¤Ã¤Æ¤¤¤¿Á´¤Æ¤Î¥·¥°¥Ê¥ë¤Ï¿·¤·¤¯µ¯Æ°¤µ¤ì¤¿¥×¥í¥°¥é¥à
242 ¤Ç¤â°ú¤­Â³¤­Æɤ߽Ф·²Äǽ¤Ç¤¢¤ë
243 (¤³¤ì¤ÏÅÁÅýŪ¤Ê¥·¥°¥Ê¥ë¤Î°·¤¤¤ÈƱ¤¸¤Ç¤¢¤ê¡¢
244 ½èÍýÂÔ¤Á¤Î¥Ö¥í¥Ã¥¯¤µ¤ì¤¿¥·¥°¥Ê¥ë¤Ï
245 .BR execve (2)
246 ¤ÎÁ°¸å¤Ç½èÍýÂÔ¤Á¤Î¤Þ¤Þ¤È¤Ê¤ë)¡£
247 .SS ¥¹¥ì¥Ã¥É¤Ç¤Î°·¤¤
248 ¥Þ¥ë¥Á¥¹¥ì¥Ã¥É¥×¥í¥°¥é¥à¤Ë¤ª¤±¤ë signalfd ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Î°·¤¤¤Ï
249 ¥·¥°¥Ê¥ë¤Îɸ½àŪ¤Ê°·¤¤¤ÈÁ´¤¯Æ±¤¸¤Ç¤¢¤ë¡£
250 ¸À¤¤´¹¤¨¤ë¤È¡¢¤¢¤ë¥¹¥ì¥Ã¥É¤¬ signalfd ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤«¤é
251 Æɤ߽Ф·¤ò¹Ô¤¦¤È¡¢¤½¤Î¥¹¥ì¥Ã¥É¼«¿È°¸¤Æ¤Î¥·¥°¥Ê¥ë¤È¥×¥í¥»¥¹ (¤¹¤Ê¤ï¤Á
252 ¥¹¥ì¥Ã¥É¥°¥ë¡¼¥×Á´ÂÎ) °¸¤Æ¤Î¥·¥°¥Ê¥ë¤¬Æɤ߽Фµ¤ì¤ë¡£
253 (¥¹¥ì¥Ã¥É¤ÏƱ¤¸¥×¥í¥»¥¹¤Î¾¤Î¥¹¥ì¥Ã¥É°¸¤Æ¤Î¥·¥°¥Ê¥ë¤òÆɤ߽Ф¹¤³¤È¤Ï¤Ç¤­¤Ê¤¤¡£)
254 .SH ÊÖ¤êÃÍ
255 À®¸ù¤¹¤ë¤È¡¢
256 .BR signalfd ()
257 ¤Ï signalfd ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤òÊÖ¤¹¡£
258 ÊÖ¤µ¤ì¤ë¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Ï¡¢
259 .IR fd
260 ¤¬ \-1 ¤Î¾ì¹ç¤Ï¿·µ¬¤Î¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Ç¤¢¤ê¡¢
261 .I fd
262 ¤¬Í­¸ú¤Ê signalfd ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤À¤Ã¤¿¾ì¹ç¤Ï
263 .I fd
264 ¼«¿È¤Ç¤¢¤ë¡£
265 ¥¨¥é¡¼¤Î¾ì¹ç¡¢\-1 ¤òÊÖ¤·¡¢
266 .I errno
267 ¤Ë¥¨¥é¡¼¤ò¼¨¤¹ÃͤòÀßÄꤹ¤ë¡£
268 .SH ¥¨¥é¡¼
269 .TP
270 .B EBADF
271 ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿
272 .I fd
273 ¤¬Í­¸ú¤Ê¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Ç¤Ê¤¤¡£
274 .TP
275 .B EINVAL
276 .I fd
277 ¤¬Í­¸ú¤Ê signalfd ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Ç¤Ï¤Ê¤¤¡£
278 .\" or, the
279 .\" .I sizemask
280 .\" argument is not equal to
281 .\" .IR sizeof(sigset_t) ;
282 .TP
283 .B EINVAL
284 .I flags
285 ¤¬Ìµ¸ú¡£
286 Linux 2.6.26 °ÊÁ°¤Ç¤Ï¡¢
287 .I flags
288 ¤¬ 0 °Ê³°¤ÎÃÍ¡£
289 .TP
290 .B EMFILE
291 ¥ª¡¼¥×¥óºÑ¤ß¤Î¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Î¿ô¤¬¥×¥í¥»¥¹¤¢¤¿¤ê¤Î¾å¸Â¤Ë
292 㤷¤Æ¤¤¤¿¡£
293 .TP
294 .B ENFILE
295 ¥ª¡¼¥×¥óºÑ¤ß¤Î¥Õ¥¡¥¤¥ëÁí¿ô¤¬¥·¥¹¥Æ¥àÁ´ÂΤξå¸Â¤Ë㤷¤Æ¤¤¤¿¡£
296 .TP
297 .B ENODEV
298 (¥«¡¼¥Í¥ëÆâ¤Î) ÌµÌ¾ inode ¥Ç¥Ð¥¤¥¹¤ò¥Þ¥¦¥ó¥È¤Ç¤­¤Ê¤«¤Ã¤¿¡£
299 .TP
300 .B ENOMEM
301 ¿·¤·¤¤ signalfd ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤òÀ¸À®¤¹¤ë¤Î¤Ë½½Ê¬¤Ê¥á¥â¥ê¤¬¤Ê¤«¤Ã¤¿¡£
302 .SH ¥Ð¡¼¥¸¥ç¥ó
303 .BR signalfd ()
304 ¤Ï¥«¡¼¥Í¥ë 2.6.22 °Ê¹ß¤Î Linux ¤ÇÍøÍѲÄǽ¤Ç¤¢¤ë¡£
305 Àµ¤·¤¯Æ°ºî¤¹¤ë glibc Â¦¤Î¥µ¥Ý¡¼¥È¤Ï¥Ð¡¼¥¸¥ç¥ó 2.8 °Ê¹ß¤ÇÄ󶡤µ¤ì¤Æ¤¤¤ë¡£
306 .\" signalfd() is in glibc 2.7, but reportedly does not build
307 .BR signalfd4 ()
308 ¥·¥¹¥Æ¥à¥³¡¼¥ë (¡ÖÃí°Õ¡×»²¾È) ¤Ï
309 ¥«¡¼¥Í¥ë 2.6.27 °Ê¹ß¤Î Linux ¤ÇÍøÍѲÄǽ¤Ç¤¢¤ë¡£
310 .SH ½àµò
311 .BR signalfd ()
312 ¤È
313 .BR signalfd4 ()
314 ¤Ï Linux ¸ÇÍ­¤Ç¤¢¤ë¡£
315 .SH Ãí°Õ
316 ¼ÂºÝ¤Î Linux ¤Î¥·¥¹¥Æ¥à¥³¡¼¥ë¤Ç¤Ï
317 .I "size_t sizemask"
318 ¤È¤¤¤¦°ú¤­¿ô¤¬ÄɲäÇɬÍפǤ¢¤ë¡£¤³¤Î°ú¤­¿ô¤Ç
319 .I mask
320 ¤Î¥µ¥¤¥º¤ò»ØÄꤹ¤ë¡£
321 glibc ¤Î
322 .BR signalfd ()
323 ¥é¥Ã¥Ñ¡¼´Ø¿ô¤Ë¤Ï¤³¤Î°ú¤­¿ô¤Ï´Þ¤Þ¤ì¤º¡¢
324 ¥é¥Ã¥Ñ¡¼´Ø¿ô¤¬É¬ÍפÊÃͤò·×»»¤·¤ÆÆâÉô¤Ç¸Æ¤Ó½Ð¤¹¥·¥¹¥Æ¥à¥³¡¼¥ë¤ËÄ󶡤¹¤ë¡£
325
326 °ì¤Ä¤Î¥×¥í¥»¥¹¤ÏÊ£¿ô¤Î signalfd ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤òÀ¸À®¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¡£
327 ¤³¤ì¤Ë¤è¤ê¡¢°Û¤Ê¤ë¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Ç°Û¤Ê¤ë¥·¥°¥Ê¥ë¤ò¼õ¤±¼è¤ë¤³¤È¤¬
328 ¤Ç¤­¤ë (¤³¤Îµ¡Ç½¤Ï
329 .BR select (2),
330 .BR poll (2),
331 .BR epoll (7)
332 ¤ò»È¤Ã¤Æ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤ò´Æ»ë¤¹¤ë¾ì¹ç¤ËÍ­ÍѤ«¤â¤·¤ì¤Ê¤¤¡£
333 °Û¤Ê¤ë¥·¥°¥Ê¥ë¤¬ÅþÃ夹¤ë¤È¡¢°Û¤Ê¤ë¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤¬ÍøÍѲÄǽ¤Ë
334 ¤Ê¤ë¤«¤é¤À)¡£
335 °ì¤Ä¤Î¥·¥°¥Ê¥ë¤¬Æó¤Ä°Ê¾å¤Î¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Î
336 .I mask
337 ¤Ë´Þ¤Þ¤ì¤Æ¤¤¤ë¾ì¹ç¡¢¤½¤Î¥·¥°¥Ê¥ë¤ÎȯÀ¸¤Ï¤½¤Î¥·¥°¥Ê¥ë¤ò
338 .I mask
339 ¤Ë´Þ¤à¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Î¤¦¤Á¤¤¤º¤ì¤«°ì¤Ä¤«¤éÆɤ߽Ф¹¤³¤È¤¬¤Ç¤­¤ë¡£
340 .SH ²¼Áؤˤ¢¤ë Linux ¤Î¥·¥¹¥Æ¥à¥³¡¼¥ë
341 ²¼Áؤˤ¢¤ë Linux ¥·¥¹¥Æ¥à¥³¡¼¥ë¤ÏÆó¼ïÎढ¤ê¡¢
342 .BR signalfd ()
343 ¤È¡¢¤â¤Ã¤È¿·¤·¤¤
344 .BR signalfd4 ()
345 ¤Ç¤¢¤ë¡£
346 .BR signalfd ()
347 ¤Ï
348 .I flags
349 °ú¤­¿ô¤ò¼ÂÁõ¤·¤Æ¤¤¤Ê¤¤¡£
350 .BR signalfd4 ()
351 ¤Ç¤Ï¾åµ­¤ÎÃͤÎ
352 .I flags
353 ¤¬¼ÂÁõ¤µ¤ì¤Æ¤¤¤ë¡£
354 glibc 2.9 °Ê¹ß¤Ç¤Ï¡¢
355 .BR signalfd ()
356 ¤Î¥é¥Ã¥Ñ¡¼´Ø¿ô¤Ï¡¢
357 .BR signalfd4 ()
358 ¤¬ÍøÍѲÄǽ¤Ç¤¢¤ì¤Ð¡¢¤³¤ì¤ò»ÈÍѤ¹¤ë¡£
359 .SH ¥Ð¥°
360 ¥«¡¼¥Í¥ë 2.6.25 ¤è¤êÁ°¤Ç¤Ï¡¢
361 .BR sigqueue (3)
362 ¤Ë¤è¤êÁ÷¿®¤µ¤ì¤¿¥·¥°¥Ê¥ë¤È°ì½ï¤ËÅϤµ¤ì¤ë¥Ç¡¼¥¿¤Ç¤Ï¡¢¥Õ¥£¡¼¥ë¥É
363 .I ssi_ptr
364 ¤È
365 .I ssi_int
366 ¤ÏÀßÄꤵ¤ì¤Ê¤¤¡£
367 .\" The fix also was put into 2.6.24.5
368 .SH Îã
369 ²¼µ­¤Î¥×¥í¥°¥é¥à¤Ï¡¢¥·¥°¥Ê¥ë
370 .B SIGINT
371 ¤È
372 .B SIGQUIT
373 ¤ò signalfd ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿·Ðͳ¤Ç¼õ¿®¤¹¤ë¡£
374 ¥·¥°¥Ê¥ë
375 .B SIGQUIT
376 ¼õ¿®¸å¤Ë¥×¥í¥°¥é¥à¤Ï½ªÎ»¤¹¤ë¡£
377 °Ê²¼¤Ë¼¨¤¹¥·¥§¥ë¥»¥Ã¥·¥ç¥ó¤Ë¤³¤Î¥×¥í¥°¥é¥à¤Î»È¤¤Êý¤ò¼¨¤¹¡£
378 .in +4n
379 .nf
380
381 .RB "$" " ./signalfd_demo"
382 .BR "^C" "                   # Control\-C generates SIGINT"
383 Got SIGINT
384 .B ^C
385 Got SIGINT
386 \fB^\\\fP                    # Control\-\\ generates SIGQUIT
387 Got SIGQUIT
388 $
389 .fi
390 .in
391 .SS ¥×¥í¥°¥é¥à¤Î¥½¡¼¥¹
392 \&
393 .nf
394 #include <sys/signalfd.h>
395 #include <signal.h>
396 #include <unistd.h>
397 #include <stdlib.h>
398 #include <stdio.h>
399
400 #define handle_error(msg) \\
401     do { perror(msg); exit(EXIT_FAILURE); } while (0)
402
403 int
404 main(int argc, char *argv[])
405 {
406     sigset_t mask;
407     int sfd;
408     struct signalfd_siginfo fdsi;
409     ssize_t s;
410
411     sigemptyset(&mask);
412     sigaddset(&mask, SIGINT);
413     sigaddset(&mask, SIGQUIT);
414
415     /* Block signals so that they aren\(aqt handled
416        according to their default dispositions */
417
418     if (sigprocmask(SIG_BLOCK, &mask, NULL) == \-1)
419         handle_error("sigprocmask");
420
421     sfd = signalfd(\-1, &mask, 0);
422     if (sfd == \-1)
423         handle_error("signalfd");
424
425     for (;;) {
426         s = read(sfd, &fdsi, sizeof(struct signalfd_siginfo));
427         if (s != sizeof(struct signalfd_siginfo))
428             handle_error("read");
429
430         if (fdsi.ssi_signo == SIGINT) {
431             printf("Got SIGINT\\n");
432         } else if (fdsi.ssi_signo == SIGQUIT) {
433             printf("Got SIGQUIT\\n");
434             exit(EXIT_SUCCESS);
435         } else {
436             printf("Read unexpected signal\\n");
437         }
438     }
439 }
440 .fi
441 .SH ´ØÏ¢¹àÌÜ
442 .BR eventfd (2),
443 .BR poll (2),
444 .BR read (2),
445 .BR select (2),
446 .BR sigaction (2),
447 .BR sigprocmask (2),
448 .BR sigwaitinfo (2),
449 .BR timerfd_create (2),
450 .BR sigsetops (3),
451 .BR sigwait (3),
452 .BR epoll (7),
453 .BR signal (7)