1 # SOME DESCRIPTIVE TITLE
2 # Copyright (C) YEAR Free Software Foundation, Inc.
3 # This file is distributed under the same license as the PACKAGE package.
4 # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
9 "Project-Id-Version: PACKAGE VERSION\n"
10 "POT-Creation-Date: 2012-03-22 04:26+0900\n"
11 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
12 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13 "Language-Team: LANGUAGE <LL@li.org>\n"
16 "Content-Type: text/plain; charset=CHARSET\n"
17 "Content-Transfer-Encoding: 8bit\n"
20 #: build/C/man3/bsd_signal.3:23
26 #: build/C/man3/bsd_signal.3:23 build/C/man2/getitimer.2:7
32 #: build/C/man3/bsd_signal.3:23 build/C/man2/eventfd.2:21 build/C/man2/getitimer.2:7 build/C/man3/gsignal.3:25 build/C/man2/kill.2:44 build/C/man2/killpg.2:40 build/C/man2/pause.2:30 build/C/man2/prctl.2:46 build/C/man3/profil.3:28 build/C/man3/psignal.3:28 build/C/man3/raise.3:27 build/C/man2/rt_sigqueueinfo.2:23 build/C/man2/sgetmask.2:24 build/C/man2/sigaction.2:45 build/C/man2/sigaltstack.2:25 build/C/man7/sigevent.7:24 build/C/man3/siginterrupt.3:29 build/C/man2/signal.2:34 build/C/man7/signal.7:44 build/C/man2/signalfd.2:19 build/C/man3/sigpause.3:23 build/C/man2/sigpending.2:27 build/C/man2/sigprocmask.2:27 build/C/man3/sigqueue.3:26 build/C/man2/sigreturn.2:27 build/C/man3/sigset.3:24 build/C/man3/sigsetops.3:29 build/C/man2/sigsuspend.2:27 build/C/man3/sigvec.3:24 build/C/man3/sigwait.3:24 build/C/man2/sigwaitinfo.2:23 build/C/man3/sysv_signal.3:23 build/C/man2/timer_create.2:29 build/C/man2/timer_delete.2:23 build/C/man2/timer_getoverrun.2:23 build/C/man2/timer_settime.2:23 build/C/man2/timerfd_create.2:20 build/C/man2/tkill.2:29 build/C/man2/wait.2:50 build/C/man2/wait4.2:34
34 msgid "Linux Programmer's Manual"
38 #: build/C/man3/bsd_signal.3:24 build/C/man2/eventfd.2:22 build/C/man2/getitimer.2:8 build/C/man3/gsignal.3:26 build/C/man2/kill.2:45 build/C/man2/killpg.2:41 build/C/man2/pause.2:31 build/C/man2/prctl.2:47 build/C/man3/profil.3:29 build/C/man3/psignal.3:29 build/C/man3/raise.3:28 build/C/man2/rt_sigqueueinfo.2:24 build/C/man2/sgetmask.2:25 build/C/man2/sigaction.2:46 build/C/man2/sigaltstack.2:26 build/C/man7/sigevent.7:25 build/C/man3/siginterrupt.3:30 build/C/man2/signal.2:35 build/C/man7/signal.7:45 build/C/man2/signalfd.2:20 build/C/man3/sigpause.3:24 build/C/man2/sigpending.2:28 build/C/man2/sigprocmask.2:28 build/C/man3/sigqueue.3:27 build/C/man2/sigreturn.2:28 build/C/man3/sigset.3:25 build/C/man3/sigsetops.3:30 build/C/man2/sigsuspend.2:28 build/C/man3/sigvec.3:25 build/C/man3/sigwait.3:25 build/C/man2/sigwaitinfo.2:24 build/C/man3/sysv_signal.3:24 build/C/man2/timer_create.2:30 build/C/man2/timer_delete.2:24 build/C/man2/timer_getoverrun.2:24 build/C/man2/timer_settime.2:24 build/C/man2/timerfd_create.2:21 build/C/man2/tkill.2:30 build/C/man2/wait.2:51 build/C/man2/wait4.2:35
44 #: build/C/man3/bsd_signal.3:26
45 msgid "bsd_signal - signal handling with BSD semantics"
49 #: build/C/man3/bsd_signal.3:26 build/C/man2/eventfd.2:24 build/C/man2/getitimer.2:10 build/C/man3/gsignal.3:28 build/C/man2/kill.2:47 build/C/man2/killpg.2:43 build/C/man2/pause.2:33 build/C/man2/prctl.2:49 build/C/man3/profil.3:31 build/C/man3/psignal.3:31 build/C/man3/raise.3:30 build/C/man2/rt_sigqueueinfo.2:26 build/C/man2/sgetmask.2:27 build/C/man2/sigaction.2:48 build/C/man2/sigaltstack.2:28 build/C/man7/sigevent.7:27 build/C/man3/siginterrupt.3:32 build/C/man2/signal.2:37 build/C/man2/signalfd.2:22 build/C/man3/sigpause.3:26 build/C/man2/sigpending.2:30 build/C/man2/sigprocmask.2:30 build/C/man3/sigqueue.3:29 build/C/man2/sigreturn.2:30 build/C/man3/sigset.3:27 build/C/man3/sigsetops.3:33 build/C/man2/sigsuspend.2:30 build/C/man3/sigvec.3:27 build/C/man3/sigwait.3:27 build/C/man2/sigwaitinfo.2:26 build/C/man3/sysv_signal.3:26 build/C/man2/timer_create.2:32 build/C/man2/timer_delete.2:26 build/C/man2/timer_getoverrun.2:26 build/C/man2/timer_settime.2:27 build/C/man2/timerfd_create.2:24 build/C/man2/tkill.2:32 build/C/man2/wait.2:53 build/C/man2/wait4.2:37
55 #: build/C/man3/bsd_signal.3:28
56 msgid "B<#define _XOPEN_SOURCE> /* See feature_test_macros(7) */"
60 #: build/C/man3/bsd_signal.3:30 build/C/man2/killpg.2:45 build/C/man2/sigaltstack.2:30 build/C/man2/signal.2:39 build/C/man2/sigpending.2:32 build/C/man2/sigprocmask.2:32 build/C/man3/sigqueue.3:31 build/C/man3/sigset.3:29 build/C/man3/sigsetops.3:35 build/C/man2/sigsuspend.2:32 build/C/man3/sigvec.3:29 build/C/man3/sysv_signal.3:30
61 msgid "B<#include E<lt>signal.hE<gt>>"
65 #: build/C/man3/bsd_signal.3:32 build/C/man2/signal.2:41 build/C/man3/sigset.3:31 build/C/man3/sysv_signal.3:32
66 msgid "B<typedef void (*sighandler_t)(int);>"
70 #: build/C/man3/bsd_signal.3:34
71 msgid "B<sighandler_t bsd_signal(int >I<signum>B<, sighandler_t >I<handler>B<);>"
75 #: build/C/man3/bsd_signal.3:34 build/C/man2/eventfd.2:28 build/C/man2/getitimer.2:19 build/C/man3/gsignal.3:47 build/C/man2/kill.2:65 build/C/man2/killpg.2:59 build/C/man2/pause.2:37 build/C/man2/prctl.2:56 build/C/man3/profil.3:44 build/C/man3/psignal.3:54 build/C/man3/raise.3:36 build/C/man2/rt_sigqueueinfo.2:33 build/C/man2/sgetmask.2:31 build/C/man2/sigaction.2:65 build/C/man2/sigaltstack.2:49 build/C/man7/sigevent.7:50 build/C/man3/siginterrupt.3:53 build/C/man2/signal.2:43 build/C/man7/signal.7:47 build/C/man2/signalfd.2:26 build/C/man3/sigpause.3:34 build/C/man2/sigpending.2:44 build/C/man2/sigprocmask.2:45 build/C/man3/sigqueue.3:41 build/C/man2/sigreturn.2:32 build/C/man3/sigset.3:56 build/C/man3/sigsetops.3:61 build/C/man2/sigsuspend.2:44 build/C/man3/sigvec.3:47 build/C/man3/sigwait.3:43 build/C/man2/sigwaitinfo.2:44 build/C/man3/sysv_signal.3:34 build/C/man2/timer_create.2:50 build/C/man2/timer_delete.2:42 build/C/man2/timer_getoverrun.2:42 build/C/man2/timer_settime.2:47 build/C/man2/timerfd_create.2:36 build/C/man2/tkill.2:38 build/C/man2/wait.2:82 build/C/man2/wait4.2:68
81 #: build/C/man3/bsd_signal.3:39
83 "The B<bsd_signal>() function takes the same arguments, and performs the "
84 "same task, as B<signal>(2)."
88 #: build/C/man3/bsd_signal.3:52
90 "The difference between the two is that B<bsd_signal>() is guaranteed to "
91 "provide reliable signal semantics, that is: a) the disposition of the signal "
92 "is not reset to the default when the handler is invoked; b) delivery of "
93 "further instances of the signal is blocked while the signal handler is "
94 "executing; and c) if the handler interrupts a blocking system call, then the "
95 "system call is automatically restarted. A portable application cannot rely "
96 "on B<signal>(2) to provide these guarantees."
100 #: build/C/man3/bsd_signal.3:52 build/C/man2/eventfd.2:222 build/C/man2/getitimer.2:117 build/C/man2/kill.2:99 build/C/man2/killpg.2:88 build/C/man2/pause.2:42 build/C/man2/prctl.2:381 build/C/man3/profil.3:66 build/C/man3/psignal.3:87 build/C/man3/raise.3:59 build/C/man2/rt_sigqueueinfo.2:124 build/C/man2/sgetmask.2:54 build/C/man2/sigaction.2:651 build/C/man2/sigaltstack.2:131 build/C/man3/siginterrupt.3:71 build/C/man2/signal.2:95 build/C/man2/signalfd.2:248 build/C/man3/sigpause.3:46 build/C/man2/sigpending.2:51 build/C/man2/sigprocmask.2:91 build/C/man3/sigqueue.3:81 build/C/man2/sigreturn.2:51 build/C/man3/sigset.3:127 build/C/man3/sigsetops.3:105 build/C/man2/sigsuspend.2:68 build/C/man3/sigvec.3:197 build/C/man3/sigwait.3:66 build/C/man2/sigwaitinfo.2:98 build/C/man3/sysv_signal.3:49 build/C/man2/timer_create.2:165 build/C/man2/timer_delete.2:50 build/C/man2/timer_getoverrun.2:79 build/C/man2/timer_settime.2:169 build/C/man2/timerfd_create.2:286 build/C/man2/tkill.2:69 build/C/man2/wait.2:354 build/C/man2/wait4.2:127
106 #: build/C/man3/bsd_signal.3:58
108 "The B<bsd_signal>() function returns the previous value of the signal "
109 "handler, or B<SIG_ERR> on error."
113 #: build/C/man3/bsd_signal.3:58 build/C/man2/eventfd.2:229 build/C/man2/getitimer.2:122 build/C/man2/kill.2:104 build/C/man2/killpg.2:93 build/C/man2/pause.2:53 build/C/man2/prctl.2:398 build/C/man2/rt_sigqueueinfo.2:129 build/C/man2/sgetmask.2:59 build/C/man2/sigaction.2:654 build/C/man2/sigaltstack.2:135 build/C/man3/siginterrupt.3:76 build/C/man2/signal.2:100 build/C/man2/signalfd.2:262 build/C/man2/sigpending.2:54 build/C/man2/sigprocmask.2:94 build/C/man3/sigqueue.3:89 build/C/man3/sigset.3:152 build/C/man3/sigsetops.3:121 build/C/man2/sigsuspend.2:72 build/C/man3/sigvec.3:214 build/C/man3/sigwait.3:71 build/C/man2/sigwaitinfo.2:107 build/C/man3/sysv_signal.3:55 build/C/man2/timer_create.2:173 build/C/man2/timer_delete.2:57 build/C/man2/timer_getoverrun.2:87 build/C/man2/timer_settime.2:178 build/C/man2/timerfd_create.2:301 build/C/man2/tkill.2:73 build/C/man2/wait.2:383 build/C/man2/wait4.2:130
119 #: build/C/man3/bsd_signal.3:61 build/C/man3/sysv_signal.3:58
120 msgid "As for B<signal>(2)."
124 #: build/C/man3/bsd_signal.3:61 build/C/man2/eventfd.2:266 build/C/man2/getitimer.2:143 build/C/man3/gsignal.3:93 build/C/man2/kill.2:120 build/C/man2/killpg.2:110 build/C/man2/pause.2:57 build/C/man2/prctl.2:475 build/C/man3/profil.3:68 build/C/man3/psignal.3:97 build/C/man3/raise.3:62 build/C/man2/rt_sigqueueinfo.2:171 build/C/man2/sgetmask.2:61 build/C/man2/sigaction.2:666 build/C/man2/sigaltstack.2:154 build/C/man7/sigevent.7:128 build/C/man3/siginterrupt.3:80 build/C/man2/signal.2:105 build/C/man7/signal.7:834 build/C/man2/signalfd.2:304 build/C/man3/sigpause.3:54 build/C/man2/sigpending.2:59 build/C/man2/sigprocmask.2:99 build/C/man3/sigqueue.3:112 build/C/man2/sigreturn.2:58 build/C/man3/sigset.3:171 build/C/man3/sigsetops.3:126 build/C/man2/sigsuspend.2:80 build/C/man3/sigvec.3:219 build/C/man3/sigwait.3:77 build/C/man2/sigwaitinfo.2:126 build/C/man3/sysv_signal.3:58 build/C/man2/timer_create.2:191 build/C/man2/timer_delete.2:64 build/C/man2/timer_getoverrun.2:94 build/C/man2/timer_settime.2:203 build/C/man2/timerfd_create.2:370 build/C/man2/tkill.2:90 build/C/man2/wait.2:421 build/C/man2/wait4.2:133
126 msgid "CONFORMING TO"
130 #: build/C/man3/bsd_signal.3:68
132 "4.2BSD, POSIX.1-2001. POSIX.1-2008 removes the specification of "
133 "B<bsd_signal>(), recommending the use of B<sigaction>(2) instead."
137 #: build/C/man3/bsd_signal.3:68 build/C/man2/eventfd.2:271 build/C/man2/getitimer.2:153 build/C/man2/kill.2:122 build/C/man2/killpg.2:114 build/C/man2/rt_sigqueueinfo.2:173 build/C/man2/sgetmask.2:63 build/C/man2/sigaction.2:669 build/C/man2/sigaltstack.2:156 build/C/man2/signal.2:107 build/C/man2/signalfd.2:309 build/C/man3/sigpause.3:58 build/C/man2/sigpending.2:61 build/C/man2/sigprocmask.2:101 build/C/man3/sigqueue.3:114 build/C/man2/sigreturn.2:62 build/C/man3/sigset.3:188 build/C/man3/sigsetops.3:128 build/C/man2/sigsuspend.2:82 build/C/man3/sigvec.3:225 build/C/man3/sigwait.3:79 build/C/man2/sigwaitinfo.2:128 build/C/man3/sysv_signal.3:60 build/C/man2/timer_create.2:193 build/C/man2/timer_getoverrun.2:96 build/C/man2/tkill.2:96 build/C/man2/wait.2:423 build/C/man2/wait4.2:135
143 #: build/C/man3/bsd_signal.3:74
144 msgid "Use of B<bsd_signal>() should be avoided; use B<sigaction>(2) instead."
148 #: build/C/man3/bsd_signal.3:85
150 "On modern Linux systems, B<bsd_signal>() and B<signal>(2) are equivalent. "
151 "But on older systems, B<signal>(2) provided unreliable signal semantics; "
152 "see B<signal>(2) for details."
156 #: build/C/man3/bsd_signal.3:92 build/C/man3/sysv_signal.3:85
158 "The use of I<sighandler_t> is a GNU extension; this type is only defined if "
159 "the B<_GNU_SOURCE> feature test macro is defined."
163 #: build/C/man3/bsd_signal.3:92 build/C/man2/eventfd.2:417 build/C/man2/getitimer.2:219 build/C/man3/gsignal.3:101 build/C/man2/kill.2:170 build/C/man2/killpg.2:133 build/C/man2/pause.2:59 build/C/man2/prctl.2:489 build/C/man3/profil.3:79 build/C/man3/psignal.3:111 build/C/man3/raise.3:64 build/C/man2/rt_sigqueueinfo.2:183 build/C/man2/sgetmask.2:74 build/C/man2/sigaction.2:782 build/C/man2/sigaltstack.2:230 build/C/man7/sigevent.7:130 build/C/man3/siginterrupt.3:89 build/C/man2/signal.2:259 build/C/man7/signal.7:845 build/C/man2/signalfd.2:430 build/C/man3/sigpause.3:96 build/C/man2/sigpending.2:82 build/C/man2/sigprocmask.2:131 build/C/man3/sigqueue.3:147 build/C/man2/sigreturn.2:72 build/C/man3/sigset.3:264 build/C/man3/sigsetops.3:166 build/C/man2/sigsuspend.2:104 build/C/man3/sigvec.3:250 build/C/man3/sigwait.3:86 build/C/man2/sigwaitinfo.2:179 build/C/man3/sysv_signal.3:85 build/C/man2/timer_create.2:397 build/C/man2/timer_delete.2:66 build/C/man2/timer_getoverrun.2:128 build/C/man2/timer_settime.2:208 build/C/man2/timerfd_create.2:540 build/C/man2/tkill.2:105 build/C/man2/wait.2:605 build/C/man2/wait4.2:153
169 #: build/C/man3/bsd_signal.3:97
170 msgid "B<sigaction>(2), B<signal>(2), B<sysv_signal>(3), B<signal>(7)"
174 #: build/C/man3/bsd_signal.3:97 build/C/man2/eventfd.2:428 build/C/man2/getitimer.2:226 build/C/man3/gsignal.3:105 build/C/man2/kill.2:180 build/C/man2/killpg.2:139 build/C/man2/pause.2:64 build/C/man2/prctl.2:492 build/C/man3/profil.3:84 build/C/man3/psignal.3:116 build/C/man3/raise.3:71 build/C/man2/rt_sigqueueinfo.2:191 build/C/man2/sgetmask.2:77 build/C/man2/sigaction.2:801 build/C/man2/sigaltstack.2:237 build/C/man7/sigevent.7:140 build/C/man3/siginterrupt.3:91 build/C/man2/signal.2:278 build/C/man7/signal.7:878 build/C/man2/signalfd.2:443 build/C/man3/sigpause.3:104 build/C/man2/sigpending.2:90 build/C/man2/sigprocmask.2:142 build/C/man3/sigqueue.3:155 build/C/man2/sigreturn.2:77 build/C/man3/sigset.3:274 build/C/man3/sigsetops.3:171 build/C/man2/sigsuspend.2:114 build/C/man3/sigvec.3:260 build/C/man3/sigwait.3:94 build/C/man2/sigwaitinfo.2:191 build/C/man3/sysv_signal.3:90 build/C/man2/timer_create.2:410 build/C/man2/timer_delete.2:72 build/C/man2/timer_getoverrun.2:138 build/C/man2/timer_settime.2:212 build/C/man2/timerfd_create.2:552 build/C/man2/tkill.2:110 build/C/man2/wait.2:617 build/C/man2/wait4.2:160
180 #: build/C/man3/bsd_signal.3:104 build/C/man2/eventfd.2:435 build/C/man2/getitimer.2:233 build/C/man3/gsignal.3:112 build/C/man2/kill.2:187 build/C/man2/killpg.2:146 build/C/man2/pause.2:71 build/C/man2/prctl.2:499 build/C/man3/profil.3:91 build/C/man3/psignal.3:123 build/C/man3/raise.3:78 build/C/man2/rt_sigqueueinfo.2:198 build/C/man2/sgetmask.2:84 build/C/man2/sigaction.2:808 build/C/man2/sigaltstack.2:244 build/C/man7/sigevent.7:147 build/C/man3/siginterrupt.3:98 build/C/man2/signal.2:285 build/C/man7/signal.7:885 build/C/man2/signalfd.2:450 build/C/man3/sigpause.3:111 build/C/man2/sigpending.2:97 build/C/man2/sigprocmask.2:149 build/C/man3/sigqueue.3:162 build/C/man2/sigreturn.2:84 build/C/man3/sigset.3:281 build/C/man3/sigsetops.3:178 build/C/man2/sigsuspend.2:121 build/C/man3/sigvec.3:267 build/C/man3/sigwait.3:101 build/C/man2/sigwaitinfo.2:198 build/C/man3/sysv_signal.3:97 build/C/man2/timer_create.2:417 build/C/man2/timer_delete.2:79 build/C/man2/timer_getoverrun.2:145 build/C/man2/timer_settime.2:219 build/C/man2/timerfd_create.2:559 build/C/man2/tkill.2:117 build/C/man2/wait.2:624 build/C/man2/wait4.2:167
182 "This page is part of release 3.37 of the Linux I<man-pages> project. A "
183 "description of the project, and information about reporting bugs, can be "
184 "found at http://www.kernel.org/doc/man-pages/."
188 #: build/C/man2/eventfd.2:21
194 #: build/C/man2/eventfd.2:21
200 #: build/C/man2/eventfd.2:21 build/C/man2/getitimer.2:7 build/C/man2/kill.2:44 build/C/man2/killpg.2:40 build/C/man2/pause.2:30 build/C/man2/prctl.2:46 build/C/man3/profil.3:28 build/C/man2/rt_sigqueueinfo.2:23 build/C/man2/sgetmask.2:24 build/C/man2/sigaction.2:45 build/C/man2/sigaltstack.2:25 build/C/man2/signal.2:34 build/C/man7/signal.7:44 build/C/man2/signalfd.2:19 build/C/man3/sigpause.3:23 build/C/man2/sigpending.2:27 build/C/man2/sigprocmask.2:27 build/C/man3/sigqueue.3:26 build/C/man2/sigreturn.2:27 build/C/man3/sigset.3:24 build/C/man3/sigsetops.3:29 build/C/man2/sigsuspend.2:27 build/C/man3/sigvec.3:24 build/C/man3/sigwait.3:24 build/C/man2/sigwaitinfo.2:23 build/C/man2/timer_create.2:29 build/C/man2/timer_delete.2:23 build/C/man2/timer_getoverrun.2:23 build/C/man2/timer_settime.2:23 build/C/man2/timerfd_create.2:20 build/C/man2/tkill.2:29 build/C/man2/wait.2:50 build/C/man2/wait4.2:34
206 #: build/C/man2/eventfd.2:24
207 msgid "eventfd - create a file descriptor for event notification"
211 #: build/C/man2/eventfd.2:26
212 msgid "B<#include E<lt>sys/eventfd.hE<gt>>"
216 #: build/C/man2/eventfd.2:28
217 msgid "B<int eventfd(unsigned int >I<initval>B<, int >I<flags>B<);>"
221 #: build/C/man2/eventfd.2:38
223 "B<eventfd>() creates an \"eventfd object\" that can be used as an event "
224 "wait/notify mechanism by userspace applications, and by the kernel to notify "
225 "userspace applications of events. The object contains an unsigned 64-bit "
226 "integer (I<uint64_t>) counter that is maintained by the kernel. This "
227 "counter is initialized with the value specified in the argument I<initval>."
231 #: build/C/man2/eventfd.2:43
233 "The following values may be bitwise ORed in I<flags> to change the behaviour "
238 #: build/C/man2/eventfd.2:43
240 msgid "B<EFD_CLOEXEC> (since Linux 2.6.27)"
244 #: build/C/man2/eventfd.2:53 build/C/man2/signalfd.2:94 build/C/man2/timerfd_create.2:102
246 "Set the close-on-exec (B<FD_CLOEXEC>) flag on the new file descriptor. See "
247 "the description of the B<O_CLOEXEC> flag in B<open>(2) for reasons why this "
252 #: build/C/man2/eventfd.2:53
254 msgid "B<EFD_NONBLOCK> (since Linux 2.6.27)"
258 #: build/C/man2/eventfd.2:61 build/C/man2/signalfd.2:84 build/C/man2/timerfd_create.2:92
260 "Set the B<O_NONBLOCK> file status flag on the new open file description. "
261 "Using this flag saves extra calls to B<fcntl>(2) to achieve the same "
266 #: build/C/man2/eventfd.2:61
268 msgid "B<EFD_SEMAPHORE> (since Linux 2.6.30)"
272 #: build/C/man2/eventfd.2:65
274 "Provide semaphore-like semantics for reads from the new file descriptor. "
279 #: build/C/man2/eventfd.2:69 build/C/man2/signalfd.2:98
281 "In Linux up to version 2.6.26, the I<flags> argument is unused, and must be "
286 #: build/C/man2/eventfd.2:75
288 "As its return value, B<eventfd>() returns a new file descriptor that can be "
289 "used to refer to the eventfd object. The following operations can be "
290 "performed on the file descriptor:"
294 #: build/C/man2/eventfd.2:75 build/C/man2/signalfd.2:101 build/C/man2/timerfd_create.2:210
300 #: build/C/man2/eventfd.2:85
302 "Each successful B<read>(2) returns an 8-byte integer. A B<read>(2) will "
303 "fail with the error B<EINVAL> if the size of the supplied buffer is less "
308 #: build/C/man2/eventfd.2:90
310 "The value returned by B<read>(2) is in host byte order, i.e., the native "
311 "byte order for integers on the host machine."
315 #: build/C/man2/eventfd.2:97
317 "The semantics of B<read>(2) depend on whether the eventfd counter currently "
318 "has a nonzero value and whether the B<EFD_SEMAPHORE> flag was specified when "
319 "creating the eventfd file descriptor:"
323 #: build/C/man2/eventfd.2:98 build/C/man2/eventfd.2:105 build/C/man2/eventfd.2:112 build/C/man2/eventfd.2:157 build/C/man2/eventfd.2:167 build/C/man2/eventfd.2:177 build/C/man3/psignal.3:103 build/C/man3/psignal.3:107 build/C/man2/sigaction.2:294 build/C/man2/sigaction.2:309 build/C/man2/sigaction.2:325 build/C/man2/sigaction.2:340 build/C/man2/sigaction.2:387 build/C/man2/sigaction.2:423 build/C/man2/signal.2:66 build/C/man2/signal.2:71 build/C/man2/signal.2:78 build/C/man2/signal.2:205 build/C/man2/signal.2:209 build/C/man2/signal.2:248 build/C/man7/signal.7:147 build/C/man7/signal.7:155 build/C/man7/signal.7:611 build/C/man7/signal.7:613 build/C/man7/signal.7:634 build/C/man7/signal.7:649 build/C/man7/signal.7:653 build/C/man7/signal.7:660 build/C/man7/signal.7:676 build/C/man7/signal.7:682 build/C/man7/signal.7:689 build/C/man7/signal.7:694 build/C/man7/signal.7:713 build/C/man7/signal.7:732 build/C/man7/signal.7:739 build/C/man7/signal.7:748 build/C/man7/signal.7:756 build/C/man7/signal.7:762 build/C/man7/signal.7:767 build/C/man7/signal.7:787 build/C/man7/signal.7:806 build/C/man7/signal.7:809 build/C/man7/signal.7:812 build/C/man7/signal.7:815 build/C/man7/signal.7:820 build/C/man7/signal.7:826 build/C/man7/signal.7:830 build/C/man3/sigwait.3:59 build/C/man3/sigwait.3:64 build/C/man2/timer_create.2:214 build/C/man2/timer_create.2:217 build/C/man2/timer_create.2:220 build/C/man2/timer_create.2:224 build/C/man2/timer_create.2:227 build/C/man2/timer_create.2:233 build/C/man2/timer_create.2:237
329 #: build/C/man2/eventfd.2:105
331 "If B<EFD_SEMAPHORE> was not specified and the eventfd counter has a nonzero "
332 "value, then a B<read>(2) returns 8 bytes containing that value, and the "
333 "counter's value is reset to zero."
337 #: build/C/man2/eventfd.2:112
339 "If B<EFD_SEMAPHORE> was specified and the eventfd counter has a nonzero "
340 "value, then a B<read>(2) returns 8 bytes containing the value 1, and the "
341 "counter's value is decremented by 1."
345 #: build/C/man2/eventfd.2:122
347 "If the eventfd counter is zero at the time of the call to B<read>(2), then "
348 "the call either blocks until the counter becomes nonzero (at which time, the "
349 "B<read>(2) proceeds as described above) or fails with the error B<EAGAIN> "
350 "if the file descriptor has been made nonblocking."
354 #: build/C/man2/eventfd.2:123
360 #: build/C/man2/eventfd.2:140
362 "A B<write>(2) call adds the 8-byte integer value supplied in its buffer to "
363 "the counter. The maximum value that may be stored in the counter is the "
364 "largest unsigned 64-bit value minus 1 (i.e., 0xfffffffffffffffe). If the "
365 "addition would cause the counter's value to exceed the maximum, then the "
366 "B<write>(2) either blocks until a B<read>(2) is performed on the file "
367 "descriptor, or fails with the error B<EAGAIN> if the file descriptor has "
368 "been made nonblocking."
372 #: build/C/man2/eventfd.2:147
374 "A B<write>(2) will fail with the error B<EINVAL> if the size of the "
375 "supplied buffer is less than 8 bytes, or if an attempt is made to write the "
376 "value 0xffffffffffffffff."
380 #: build/C/man2/eventfd.2:147 build/C/man2/signalfd.2:139 build/C/man2/timerfd_create.2:243
382 msgid "B<poll>(2), B<select>(2) (and similar)"
386 #: build/C/man2/eventfd.2:156
388 "The returned file descriptor supports B<poll>(2) (and analogously "
389 "B<epoll>(7)) and B<select>(2), as follows:"
393 #: build/C/man2/eventfd.2:167
395 "The file descriptor is readable (the B<select>(2) I<readfds> argument; the "
396 "B<poll>(2) B<POLLIN> flag) if the counter has a value greater than 0."
400 #: build/C/man2/eventfd.2:177
402 "The file descriptor is writable (the B<select>(2) I<writefds> argument; the "
403 "B<poll>(2) B<POLLOUT> flag) if it is possible to write a value of at least "
404 "\"1\" without blocking."
408 #: build/C/man2/eventfd.2:197
410 "If an overflow of the counter value was detected, then B<select>(2) "
411 "indicates the file descriptor as being both readable and writable, and "
412 "B<poll>(2) returns a B<POLLERR> event. As noted above, B<write>(2) can "
413 "never overflow the counter. However an overflow can occur if 2^64 eventfd "
414 "\"signal posts\" were performed by the KAIO subsystem (theoretically "
415 "possible, but practically unlikely). If an overflow has occurred, then "
416 "B<read>(2) will return that maximum I<uint64_t> value (i.e., "
417 "0xffffffffffffffff)."
421 #: build/C/man2/eventfd.2:205
423 "The eventfd file descriptor also supports the other file-descriptor "
424 "multiplexing APIs: B<pselect>(2), B<ppoll>(2), and B<epoll>(7)."
428 #: build/C/man2/eventfd.2:205 build/C/man2/signalfd.2:159 build/C/man2/timerfd_create.2:261
434 #: build/C/man2/eventfd.2:210
436 "When the file descriptor is no longer required it should be closed. When "
437 "all file descriptors associated with the same eventfd object have been "
438 "closed, the resources for object are freed by the kernel."
442 #: build/C/man2/eventfd.2:222
444 "A copy of the file descriptor created by B<eventfd>() is inherited by the "
445 "child produced by B<fork>(2). The duplicate file descriptor is associated "
446 "with the same eventfd object. File descriptors created by B<eventfd>() are "
447 "preserved across B<execve>(2), unless the close-on-exec flag has been set."
451 #: build/C/man2/eventfd.2:229
453 "On success, B<eventfd>() returns a new eventfd file descriptor. On error, "
454 "-1 is returned and I<errno> is set to indicate the error."
458 #: build/C/man2/eventfd.2:230 build/C/man2/getitimer.2:130 build/C/man2/kill.2:105 build/C/man2/killpg.2:94 build/C/man2/prctl.2:403 build/C/man2/prctl.2:408 build/C/man2/prctl.2:418 build/C/man2/prctl.2:423 build/C/man2/rt_sigqueueinfo.2:136 build/C/man2/sigaction.2:659 build/C/man2/sigaltstack.2:140 build/C/man3/siginterrupt.3:77 build/C/man2/signal.2:101 build/C/man2/signalfd.2:268 build/C/man2/signalfd.2:276 build/C/man3/sigqueue.3:96 build/C/man3/sigsetops.3:122 build/C/man3/sigwait.3:72 build/C/man2/sigwaitinfo.2:122 build/C/man2/timer_create.2:177 build/C/man2/timer_delete.2:58 build/C/man2/timer_getoverrun.2:88 build/C/man2/timer_settime.2:187 build/C/man2/timer_settime.2:195 build/C/man2/timerfd_create.2:304 build/C/man2/timerfd_create.2:312 build/C/man2/timerfd_create.2:348 build/C/man2/timerfd_create.2:355 build/C/man2/timerfd_create.2:361 build/C/man2/tkill.2:74 build/C/man2/wait.2:416
464 #: build/C/man2/eventfd.2:234
465 msgid "An unsupported value was specified in I<flags>."
469 #: build/C/man2/eventfd.2:234 build/C/man2/signalfd.2:283 build/C/man2/timerfd_create.2:319
475 #: build/C/man2/eventfd.2:237
476 msgid "The per-process limit on open file descriptors has been reached."
480 #: build/C/man2/eventfd.2:237 build/C/man2/signalfd.2:286 build/C/man2/timerfd_create.2:322
486 #: build/C/man2/eventfd.2:241 build/C/man2/signalfd.2:290 build/C/man2/timerfd_create.2:326
487 msgid "The system-wide limit on the total number of open files has been reached."
491 #: build/C/man2/eventfd.2:241 build/C/man2/signalfd.2:290 build/C/man2/timerfd_create.2:326
497 #: build/C/man2/eventfd.2:249 build/C/man2/signalfd.2:293 build/C/man2/timerfd_create.2:329
498 msgid "Could not mount (internal) anonymous inode device."
502 #: build/C/man2/eventfd.2:249 build/C/man2/sigaltstack.2:145 build/C/man2/signalfd.2:293 build/C/man2/timer_create.2:185 build/C/man2/timerfd_create.2:329
508 #: build/C/man2/eventfd.2:253
509 msgid "There was insufficient memory to create a new eventfd file descriptor."
513 #: build/C/man2/eventfd.2:253 build/C/man2/prctl.2:470 build/C/man3/psignal.3:93 build/C/man2/rt_sigqueueinfo.2:164 build/C/man2/signalfd.2:296 build/C/man3/sigqueue.3:110 build/C/man2/timer_create.2:189 build/C/man2/timer_delete.2:62 build/C/man2/timer_getoverrun.2:92 build/C/man2/timer_settime.2:201 build/C/man2/timerfd_create.2:367 build/C/man2/tkill.2:85
518 #. eventfd() is in glibc 2.7, but reportedly does not build
520 #: build/C/man2/eventfd.2:266
522 "B<eventfd>() is available on Linux since kernel 2.6.22. Working support is "
523 "provided in glibc since version 2.8. The B<eventfd2>() system call (see "
524 "NOTES) is available on Linux since kernel 2.6.27. Since version 2.9, the "
525 "glibc B<eventfd>() wrapper will employ the B<eventfd2>() system call, if "
526 "it is supported by the kernel."
530 #: build/C/man2/eventfd.2:271
531 msgid "B<eventfd>() and B<eventfd2>() are Linux-specific."
535 #: build/C/man2/eventfd.2:279
537 "Applications can use an eventfd file descriptor instead of a pipe (see "
538 "B<pipe>(2)) in all cases where a pipe is used simply to signal events. The "
539 "kernel overhead of an eventfd file descriptor is much lower than that of a "
540 "pipe, and only one file descriptor is required (versus the two required for "
544 #. or eventually syslets/threadlets
546 #: build/C/man2/eventfd.2:285
548 "When used in the kernel, an eventfd file descriptor can provide a "
549 "kernel-userspace bridge allowing, for example, functionalities like KAIO "
550 "(kernel AIO) to signal to a file descriptor that some operation is "
555 #: build/C/man2/eventfd.2:302
557 "A key point about an eventfd file descriptor is that it can be monitored "
558 "just like any other file descriptor using B<select>(2), B<poll>(2), or "
559 "B<epoll>(7). This means that an application can simultaneously monitor the "
560 "readiness of \"traditional\" files and the readiness of other kernel "
561 "mechanisms that support the eventfd interface. (Without the B<eventfd>() "
562 "interface, these mechanisms could not be multiplexed via B<select>(2), "
563 "B<poll>(2), or B<epoll>(7).)"
567 #: build/C/man2/eventfd.2:302 build/C/man2/signalfd.2:333
569 msgid "Underlying Linux system calls"
573 #: build/C/man2/eventfd.2:316
575 "There are two underlying Linux system calls: B<eventfd>() and the more "
576 "recent B<eventfd2>(). The former system call does not implement a I<flags> "
577 "argument. The latter system call implements the I<flags> values described "
578 "above. The glibc wrapper function will use B<eventfd2>() where it is "
583 #: build/C/man2/eventfd.2:316
585 msgid "Additional glibc features"
589 #: build/C/man2/eventfd.2:320
591 "The GNU C library defines an additional type, and two functions that attempt "
592 "to abstract some of the details of reading and writing on an eventfd file "
597 #: build/C/man2/eventfd.2:324
599 msgid "typedef uint64_t eventfd_t;\n"
603 #: build/C/man2/eventfd.2:327
606 "int eventfd_read(int fd, eventfd_t *value);\n"
607 "int eventfd_write(int fd, eventfd_t value);\n"
611 #: build/C/man2/eventfd.2:334
613 "The functions perform the read and write operations on an eventfd file "
614 "descriptor, returning 0 if the correct number of bytes was transferred, or "
619 #: build/C/man2/eventfd.2:334 build/C/man2/sigaction.2:779 build/C/man2/sigaltstack.2:213 build/C/man2/signalfd.2:357 build/C/man2/timer_create.2:251 build/C/man2/timer_getoverrun.2:125 build/C/man2/timer_settime.2:205 build/C/man2/timerfd_create.2:372 build/C/man2/wait.2:522
625 #: build/C/man2/eventfd.2:343
627 "The following program creates an eventfd file descriptor and then forks to "
628 "create a child process. While the parent briefly sleeps, the child writes "
629 "each of the integers supplied in the program's command-line arguments to the "
630 "eventfd file descriptor. When the parent has finished sleeping, it reads "
631 "from the eventfd file descriptor."
635 #: build/C/man2/eventfd.2:345
636 msgid "The following shell session shows a sample run of the program:"
640 #: build/C/man2/eventfd.2:357
643 "$B< ./a.out 1 2 4 7 14>\n"
644 "Child writing 1 to efd\n"
645 "Child writing 2 to efd\n"
646 "Child writing 4 to efd\n"
647 "Child writing 7 to efd\n"
648 "Child writing 14 to efd\n"
649 "Child completed write loop\n"
650 "Parent about to read\n"
651 "Parent read 28 (0x1c) from efd\n"
655 #: build/C/man2/eventfd.2:359 build/C/man2/signalfd.2:380 build/C/man2/timerfd_create.2:400 build/C/man2/wait.2:557
657 msgid "Program source"
661 #: build/C/man2/eventfd.2:367
664 "#include E<lt>sys/eventfd.hE<gt>\n"
665 "#include E<lt>unistd.hE<gt>\n"
666 "#include E<lt>stdlib.hE<gt>\n"
667 "#include E<lt>stdio.hE<gt>\n"
668 "#include E<lt>stdint.hE<gt> /* Definition of uint64_t */\n"
672 #: build/C/man2/eventfd.2:370 build/C/man2/signalfd.2:391
675 "#define handle_error(msg) \\e\n"
676 " do { perror(msg); exit(EXIT_FAILURE); } while (0)\n"
680 #: build/C/man2/eventfd.2:377
684 "main(int argc, char *argv[])\n"
692 #: build/C/man2/eventfd.2:382
695 " if (argc E<lt> 2) {\n"
696 " fprintf(stderr, \"Usage: %s E<lt>numE<gt>...\\en\", argv[0]);\n"
697 " exit(EXIT_FAILURE);\n"
702 #: build/C/man2/eventfd.2:386
705 " efd = eventfd(0, 0);\n"
707 " handle_error(\"eventfd\");\n"
711 #: build/C/man2/eventfd.2:398
714 " switch (fork()) {\n"
716 " for (j = 1; j E<lt> argc; j++) {\n"
717 " printf(\"Child writing %s to efd\\en\", argv[j]);\n"
718 " u = strtoull(argv[j], NULL, 0);\n"
719 " /* strtoull() allows various bases */\n"
720 " s = write(efd, &u, sizeof(uint64_t));\n"
721 " if (s != sizeof(uint64_t))\n"
722 " handle_error(\"write\");\n"
724 " printf(\"Child completed write loop\\en\");\n"
728 #: build/C/man2/eventfd.2:400
730 msgid " exit(EXIT_SUCCESS);\n"
734 #: build/C/man2/eventfd.2:403
742 #: build/C/man2/eventfd.2:411
745 " printf(\"Parent about to read\\en\");\n"
746 " s = read(efd, &u, sizeof(uint64_t));\n"
747 " if (s != sizeof(uint64_t))\n"
748 " handle_error(\"read\");\n"
749 " printf(\"Parent read %llu (0x%llx) from efd\\en\",\n"
750 " (unsigned long long) u, (unsigned long long) u);\n"
751 " exit(EXIT_SUCCESS);\n"
755 #: build/C/man2/eventfd.2:416
759 " handle_error(\"fork\");\n"
765 #: build/C/man2/eventfd.2:428
767 "B<futex>(2), B<pipe>(2), B<poll>(2), B<read>(2), B<select>(2), "
768 "B<signalfd>(2), B<timerfd_create>(2), B<write>(2), B<epoll>(7), "
773 #: build/C/man2/getitimer.2:7
779 #: build/C/man2/getitimer.2:10
780 msgid "getitimer, setitimer - get or set value of an interval timer"
784 #: build/C/man2/getitimer.2:13
786 msgid "B<#include E<lt>sys/time.hE<gt>>\n"
790 #: build/C/man2/getitimer.2:15
792 msgid "B<int getitimer(int >I<which>B<, struct itimerval *>I<curr_value>B<);>\n"
796 #: build/C/man2/getitimer.2:18
799 "B<int setitimer(int >I<which>B<, const struct itimerval *>I<new_value>B<,>\n"
800 "B< struct itimerval *>I<old_value>B<);>\n"
804 #: build/C/man2/getitimer.2:24
806 "The system provides each process with three interval timers, each "
807 "decrementing in a distinct time domain. When any timer expires, a signal is "
808 "sent to the process, and the timer (potentially) restarts."
812 #: build/C/man2/getitimer.2:24
814 msgid "B<ITIMER_REAL>"
818 #: build/C/man2/getitimer.2:29
819 msgid "decrements in real time, and delivers B<SIGALRM> upon expiration."
823 #: build/C/man2/getitimer.2:29
825 msgid "B<ITIMER_VIRTUAL>"
829 #: build/C/man2/getitimer.2:34
831 "decrements only when the process is executing, and delivers B<SIGVTALRM> "
836 #: build/C/man2/getitimer.2:34
838 msgid "B<ITIMER_PROF>"
842 #: build/C/man2/getitimer.2:44
844 "decrements both when the process executes and when the system is executing "
845 "on behalf of the process. Coupled with B<ITIMER_VIRTUAL>, this timer is "
846 "usually used to profile the time spent by the application in user and kernel "
847 "space. B<SIGPROF> is delivered upon expiration."
851 #: build/C/man2/getitimer.2:46
852 msgid "Timer values are defined by the following structures:"
856 #: build/C/man2/getitimer.2:54
859 "struct itimerval {\n"
860 " struct timeval it_interval; /* next value */\n"
861 " struct timeval it_value; /* current value */\n"
866 #: build/C/man2/getitimer.2:59
870 " long tv_sec; /* seconds */\n"
871 " long tv_usec; /* microseconds */\n"
876 #: build/C/man2/getitimer.2:81
878 "The function B<getitimer>() fills the structure pointed to by I<curr_value> "
879 "with the current setting for the timer specified by I<which> (one of "
880 "B<ITIMER_REAL>, B<ITIMER_VIRTUAL>, or B<ITIMER_PROF>). The element "
881 "I<it_value> is set to the amount of time remaining on the timer, or zero if "
882 "the timer is disabled. Similarly, I<it_interval> is set to the reset value."
886 #: build/C/man2/getitimer.2:89
888 "The function B<setitimer>() sets the specified timer to the value in "
889 "I<new_value>. If I<old_value> is non-NULL, the old value of the timer is "
894 #: build/C/man2/getitimer.2:99
896 "Timers decrement from I<it_value> to zero, generate a signal, and reset to "
897 "I<it_interval>. A timer which is set to zero (I<it_value> is zero or the "
898 "timer expires and I<it_interval> is zero) stops."
902 #: build/C/man2/getitimer.2:105
904 "Both I<tv_sec> and I<tv_usec> are significant in determining the duration of "
909 #: build/C/man2/getitimer.2:117
911 "Timers will never expire before the requested time, but may expire some "
912 "(short) time afterward, which depends on the system timer resolution and on "
913 "the system load; see B<time>(7). (But see BUGS below.) Upon expiration, a "
914 "signal will be generated and the timer reset. If the timer expires while "
915 "the process is active (always true for B<ITIMER_VIRTUAL>) the signal will "
916 "be delivered immediately when generated. Otherwise the delivery will be "
917 "offset by a small time dependent on the system loading."
921 #: build/C/man2/getitimer.2:122 build/C/man2/killpg.2:93 build/C/man2/tkill.2:73
923 "On success, zero is returned. On error, -1 is returned, and I<errno> is set "
928 #: build/C/man2/getitimer.2:123 build/C/man2/prctl.2:399 build/C/man2/sigaction.2:655 build/C/man2/sigaltstack.2:136 build/C/man2/sigpending.2:55 build/C/man2/sigsuspend.2:73 build/C/man2/timer_settime.2:180 build/C/man2/timerfd_create.2:341
934 #: build/C/man2/getitimer.2:130 build/C/man2/timerfd_create.2:348
935 msgid "I<new_value>, I<old_value>, or I<curr_value> is not valid a pointer."
939 #: build/C/man2/getitimer.2:143
941 "I<which> is not one of B<ITIMER_REAL>, B<ITIMER_VIRTUAL>, or B<ITIMER_PROF>; "
942 "or (since Linux 2.6.22) one of the I<tv_usec> fields in the structure "
943 "pointed to by I<new_value> contains a value outside the range 0 to 999999."
947 #: build/C/man2/getitimer.2:153
949 "POSIX.1-2001, SVr4, 4.4BSD (this call first appeared in 4.2BSD). "
950 "POSIX.1-2008 marks B<getitimer>() and B<setitimer>() obsolete, "
951 "recommending the use of the POSIX timers API (B<timer_gettime>(2), "
952 "B<timer_settime>(2), etc.) instead."
956 #: build/C/man2/getitimer.2:159
958 "A child created via B<fork>(2) does not inherit its parent's interval "
959 "timers. Interval timers are preserved across an B<execve>(2)."
963 #: build/C/man2/getitimer.2:169
965 "POSIX.1 leaves the interaction between B<setitimer>() and the three "
966 "interfaces B<alarm>(2), B<sleep>(3), and B<usleep>(3) unspecified."
970 #: build/C/man2/getitimer.2:169 build/C/man2/kill.2:160 build/C/man3/profil.3:70 build/C/man3/psignal.3:99 build/C/man2/sigaction.2:770 build/C/man7/signal.7:836 build/C/man2/signalfd.2:349 build/C/man2/sigpending.2:76 build/C/man3/sigset.3:230 build/C/man2/timer_getoverrun.2:112 build/C/man2/timerfd_create.2:534
976 #: build/C/man2/getitimer.2:178
978 "The generation and delivery of a signal are distinct, and only one instance "
979 "of each of the signals listed above may be pending for a process. Under "
980 "very heavy loading, an B<ITIMER_REAL> timer may expire before the signal "
981 "from a previous expiration has been delivered. The second signal in such an "
982 "event will be lost."
986 #: build/C/man2/getitimer.2:193
988 "On Linux kernels before 2.6.16, timer values are represented in jiffies. If "
989 "a request is made set a timer with a value whose jiffies representation "
990 "exceeds B<MAX_SEC_IN_JIFFIES> (defined in I<include/linux/jiffies.h>), then "
991 "the timer is silently truncated to this ceiling value. On Linux/i386 "
992 "(where, since Linux 2.6.13, the default jiffy is 0.004 seconds), this means "
993 "that the ceiling value for a timer is approximately 99.42 days. Since Linux "
994 "2.6.16, the kernel uses a different internal representation for times, and "
995 "this ceiling is removed."
998 #. 4 Jul 2005: It looks like this bug may remain in 2.4.x.
999 #. http://lkml.org/lkml/2005/7/1/165
1001 #: build/C/man2/getitimer.2:200
1003 "On certain systems (including i386), Linux kernels before version 2.6.12 "
1004 "have a bug which will produce premature timer expirations of up to one jiffy "
1005 "under some circumstances. This bug is fixed in kernel 2.6.12."
1008 #. Bugzilla report 25 Apr 2006:
1009 #. http://bugzilla.kernel.org/show_bug.cgi?id=6443
1010 #. "setitimer() should reject noncanonical arguments"
1012 #: build/C/man2/getitimer.2:219
1014 "POSIX.1-2001 says that B<setitimer>() should fail if a I<tv_usec> value is "
1015 "specified that is outside of the range 0 to 999999. However, in kernels up "
1016 "to and including 2.6.21, Linux does not give an error, but instead silently "
1017 "adjusts the corresponding seconds value for the timer. From kernel 2.6.22 "
1018 "onward, this nonconformance has been repaired: an improper I<tv_usec> value "
1019 "results in an B<EINVAL> error."
1023 #: build/C/man2/getitimer.2:226
1025 "B<gettimeofday>(2), B<sigaction>(2), B<signal>(2), B<timer_create>(2), "
1026 "B<timerfd_create>(2), B<time>(7)"
1030 #: build/C/man3/gsignal.3:25
1036 #: build/C/man3/gsignal.3:25 build/C/man3/profil.3:28 build/C/man3/sigvec.3:24
1042 #: build/C/man3/gsignal.3:28
1043 msgid "gsignal, ssignal - software signal facility"
1047 #: build/C/man3/gsignal.3:31 build/C/man2/kill.2:52 build/C/man3/psignal.3:34 build/C/man3/raise.3:33 build/C/man2/sigaction.2:51 build/C/man3/siginterrupt.3:35 build/C/man3/sigpause.3:29 build/C/man3/sigwait.3:30 build/C/man2/sigwaitinfo.2:29
1049 msgid "B<#include E<lt>signal.hE<gt>>\n"
1053 #: build/C/man3/gsignal.3:33
1055 msgid "B<typedef void (*sighandler_t)(int);>\n"
1059 #: build/C/man3/gsignal.3:35
1061 msgid "B<int gsignal(int>I<signum>B<);>\n"
1065 #: build/C/man3/gsignal.3:37
1067 msgid "B<sighandler_t ssignal(int >I<signum>B<, sighandler_t >I<action>B<);>\n"
1071 #: build/C/man3/gsignal.3:42 build/C/man2/kill.2:59 build/C/man2/killpg.2:51 build/C/man3/profil.3:40 build/C/man3/psignal.3:44 build/C/man2/sigaction.2:59 build/C/man2/sigaltstack.2:36 build/C/man3/siginterrupt.3:42 build/C/man2/sigpending.2:38 build/C/man2/sigprocmask.2:39 build/C/man3/sigqueue.3:37 build/C/man3/sigset.3:43 build/C/man3/sigsetops.3:49 build/C/man2/sigsuspend.2:38 build/C/man3/sigvec.3:43 build/C/man3/sigwait.3:37 build/C/man2/sigwaitinfo.2:39 build/C/man2/timer_create.2:46 build/C/man2/timer_delete.2:38 build/C/man2/timer_getoverrun.2:38 build/C/man2/timer_settime.2:42 build/C/man2/wait.2:68 build/C/man2/wait4.2:54
1072 msgid "Feature Test Macro Requirements for glibc (see B<feature_test_macros>(7)):"
1076 #: build/C/man3/gsignal.3:47
1077 msgid "B<gsignal>(), B<ssignal>(): _SVID_SOURCE"
1081 #: build/C/man3/gsignal.3:55
1083 "Don't use these functions under Linux. Due to a historical mistake, under "
1084 "Linux these functions are aliases for B<raise>(3) and B<signal>(2), "
1089 #: build/C/man3/gsignal.3:93
1091 "Elsewhere, on System V-like systems, these functions implement software "
1092 "signaling, entirely independent of the classical B<signal>(2) and "
1093 "B<kill>(2) functions. The function B<ssignal>() defines the action to "
1094 "take when the software signal with number I<signum> is raised using the "
1095 "function B<gsignal>(), and returns the previous such action or B<SIG_DFL>. "
1096 "The function B<gsignal>() does the following: if no action (or the action "
1097 "B<SIG_DFL>) was specified for I<signum>, then it does nothing and returns "
1098 "0. If the action B<SIG_IGN> was specified for I<signum>, then it does "
1099 "nothing and returns 1. Otherwise, it resets the action to B<SIG_DFL> and "
1100 "calls the action function with argument I<signum>, and returns the value "
1101 "returned by that function. The range of possible values I<signum> varies "
1102 "(often 1-15 or 1-17)."
1106 #: build/C/man3/gsignal.3:101
1108 "These functions are available under AIX, DG/UX, HP-UX, SCO, Solaris, Tru64. "
1109 "They are called obsolete under most of these systems, and are broken under "
1110 "Linux libc and glibc. Some systems also have B<gsignal_r>() and "
1115 #: build/C/man3/gsignal.3:105
1116 msgid "B<kill>(2), B<signal>(2), B<raise>(3)"
1120 #: build/C/man2/kill.2:44
1126 #: build/C/man2/kill.2:44
1132 #: build/C/man2/kill.2:47
1133 msgid "kill - send signal to a process"
1137 #: build/C/man2/kill.2:50
1139 msgid "B<#include E<lt>sys/types.hE<gt>>\n"
1143 #: build/C/man2/kill.2:54
1145 msgid "B<int kill(pid_t >I<pid>B<, int >I<sig>B<);>\n"
1149 #: build/C/man2/kill.2:64
1150 msgid "B<kill>(): _POSIX_C_SOURCE\\ E<gt>=\\ 1 || _XOPEN_SOURCE || _POSIX_SOURCE"
1154 #: build/C/man2/kill.2:70
1156 "The B<kill>() system call can be used to send any signal to any process "
1161 #: build/C/man2/kill.2:73
1163 "If I<pid> is positive, then signal I<sig> is sent to the process with the ID "
1164 "specified by I<pid>."
1168 #: build/C/man2/kill.2:76
1170 "If I<pid> equals 0, then I<sig> is sent to every process in the process "
1171 "group of the calling process."
1175 #: build/C/man2/kill.2:80
1177 "If I<pid> equals -1, then I<sig> is sent to every process for which the "
1178 "calling process has permission to send signals, except for process 1 "
1179 "(I<init>), but see below."
1183 #: build/C/man2/kill.2:83
1185 "If I<pid> is less than -1, then I<sig> is sent to every process in the "
1186 "process group whose ID is I<-pid>."
1190 #: build/C/man2/kill.2:88
1192 "If I<sig> is 0, then no signal is sent, but error checking is still "
1193 "performed; this can be used to check for the existence of a process ID or "
1198 #: build/C/man2/kill.2:99 build/C/man2/killpg.2:88
1200 "For a process to have permission to send a signal it must either be "
1201 "privileged (under Linux: have the B<CAP_KILL> capability), or the real or "
1202 "effective user ID of the sending process must equal the real or saved "
1203 "set-user-ID of the target process. In the case of B<SIGCONT> it suffices "
1204 "when the sending and receiving processes belong to the same session."
1208 #: build/C/man2/kill.2:104
1210 "On success (at least one signal was sent), zero is returned. On error, -1 "
1211 "is returned, and I<errno> is set appropriately."
1215 #: build/C/man2/kill.2:108
1216 msgid "An invalid signal was specified."
1220 #: build/C/man2/kill.2:108 build/C/man2/killpg.2:98 build/C/man2/prctl.2:432 build/C/man2/prctl.2:444 build/C/man2/prctl.2:454 build/C/man2/rt_sigqueueinfo.2:143 build/C/man2/sigaltstack.2:149 build/C/man3/sigqueue.3:100 build/C/man2/tkill.2:77
1226 #: build/C/man2/kill.2:112 build/C/man2/killpg.2:102
1228 "The process does not have permission to send the signal to any of the target "
1233 #: build/C/man2/kill.2:112 build/C/man2/killpg.2:102 build/C/man2/killpg.2:106 build/C/man2/rt_sigqueueinfo.2:151 build/C/man3/sigqueue.3:106 build/C/man2/tkill.2:82
1239 #: build/C/man2/kill.2:120
1241 "The pid or process group does not exist. Note that an existing process "
1242 "might be a zombie, a process which already committed termination, but has "
1243 "not yet been B<wait>(2)ed for."
1247 #: build/C/man2/kill.2:122 build/C/man2/pause.2:59 build/C/man2/wait.2:423
1248 msgid "SVr4, 4.3BSD, POSIX.1-2001."
1252 #: build/C/man2/kill.2:130
1254 "The only signals that can be sent to process ID 1, the I<init> process, are "
1255 "those for which I<init> has explicitly installed signal handlers. This is "
1256 "done to assure the system is not brought down accidentally."
1260 #: build/C/man2/kill.2:136
1262 "POSIX.1-2001 requires that I<kill(-1,sig)> send I<sig> to all processes that "
1263 "the calling process may send signals to, except possibly for some "
1264 "implementation-defined system processes. Linux allows a process to signal "
1265 "itself, but on Linux the call I<kill(-1,sig)> does not signal the calling "
1270 #: build/C/man2/kill.2:146
1272 "POSIX.1-2001 requires that if a process sends a signal to itself, and the "
1273 "sending thread does not have the signal blocked, and no other thread has it "
1274 "unblocked or is waiting for it in B<sigwait>(3), at least one unblocked "
1275 "signal must be delivered to the sending thread before the B<kill>() "
1280 #: build/C/man2/kill.2:146 build/C/man3/sigpause.3:75 build/C/man2/wait.2:477
1285 #. In the 0.* kernels things chopped and changed quite
1286 #. a bit - MTK, 24 Jul 02
1288 #: build/C/man2/kill.2:160
1290 "Across different kernel versions, Linux has enforced different rules for the "
1291 "permissions required for an unprivileged process to send a signal to another "
1292 "process. In kernels 1.0 to 1.2.2, a signal could be sent if the effective "
1293 "user ID of the sender matched that of the receiver, or the real user ID of "
1294 "the sender matched that of the receiver. From kernel 1.2.3 until 1.3.77, a "
1295 "signal could be sent if the effective user ID of the sender matched either "
1296 "the real or effective user ID of the receiver. The current rules, which "
1297 "conform to POSIX.1-2001, were adopted in kernel 1.3.78."
1301 #: build/C/man2/kill.2:170
1303 "In 2.6 kernels up to and including 2.6.7, there was a bug that meant that "
1304 "when sending signals to a process group, B<kill>() failed with the error "
1305 "B<EPERM> if the caller did have permission to send the signal to I<any> "
1306 "(rather than I<all>) of the members of the process group. Notwithstanding "
1307 "this error return, the signal was still delivered to all of the processes "
1308 "for which the caller had permission to signal."
1312 #: build/C/man2/kill.2:180
1314 "B<_exit>(2), B<killpg>(2), B<signal>(2), B<tkill>(2), B<exit>(3), "
1315 "B<sigqueue>(3), B<capabilities>(7), B<credentials>(7), B<signal>(7)"
1319 #: build/C/man2/killpg.2:40
1325 #: build/C/man2/killpg.2:40 build/C/man3/sigset.3:24 build/C/man2/wait4.2:34
1331 #: build/C/man2/killpg.2:43
1332 msgid "killpg - send signal to a process group"
1336 #: build/C/man2/killpg.2:47
1337 msgid "B<int killpg(int >I<pgrp>B<, int >I<sig>B<);>"
1341 #: build/C/man2/killpg.2:54
1343 msgid "B<killpg>():"
1347 #: build/C/man2/killpg.2:58 build/C/man2/sigaltstack.2:44 build/C/man3/siginterrupt.3:49 build/C/man2/wait4.2:61
1349 "_BSD_SOURCE || _XOPEN_SOURCE\\ E<gt>=\\ 500 || _XOPEN_SOURCE\\ &&\\ "
1350 "_XOPEN_SOURCE_EXTENDED"
1354 #: build/C/man2/killpg.2:68
1356 "B<killpg>() sends the signal I<sig> to the process group I<pgrp>. See "
1357 "B<signal>(7) for a list of signals."
1361 #: build/C/man2/killpg.2:77
1363 "If I<pgrp> is 0, B<killpg>() sends the signal to the calling process's "
1364 "process group. (POSIX says: If I<pgrp> is less than or equal to 1, the "
1365 "behavior is undefined.)"
1369 #: build/C/man2/killpg.2:98
1370 msgid "I<Sig> is not a valid signal number."
1374 #: build/C/man2/killpg.2:106
1375 msgid "No process can be found in the process group specified by I<pgrp>."
1379 #: build/C/man2/killpg.2:110
1381 "The process group was given as 0 but the sending process does not have a "
1386 #: build/C/man2/killpg.2:114
1388 "SVr4, 4.4BSD (the B<killpg>() function call first appeared in 4BSD), "
1393 #: build/C/man2/killpg.2:128
1395 "There are various differences between the permission checking in BSD-type "
1396 "systems and System V-type systems. See the POSIX rationale for B<kill>(). "
1397 "A difference not mentioned by POSIX concerns the return value B<EPERM>: BSD "
1398 "documents that no signal is sent and B<EPERM> returned when the permission "
1399 "check failed for at least one target process, while POSIX documents B<EPERM> "
1400 "only when the permission check failed for all target processes."
1404 #: build/C/man2/killpg.2:133
1406 "On Linux, B<killpg>() is implemented as a library function that makes the "
1407 "call I<kill(-pgrp,\\ sig)>."
1411 #: build/C/man2/killpg.2:139
1413 "B<getpgrp>(2), B<kill>(2), B<signal>(2), B<capabilities>(7), "
1418 #: build/C/man2/pause.2:30
1424 #: build/C/man2/pause.2:30
1430 #: build/C/man2/pause.2:33
1431 msgid "pause - wait for signal"
1435 #: build/C/man2/pause.2:35 build/C/man3/profil.3:33
1436 msgid "B<#include E<lt>unistd.hE<gt>>"
1440 #: build/C/man2/pause.2:37
1441 msgid "B<int pause(void);>"
1445 #: build/C/man2/pause.2:42
1447 "B<pause>() causes the calling process (or thread) to sleep until a signal "
1448 "is delivered that either terminates the process or causes the invocation of "
1449 "a signal-catching function."
1452 #. .BR ERESTARTNOHAND .
1454 #: build/C/man2/pause.2:53
1456 "B<pause>() only returns when a signal was caught and the signal-catching "
1457 "function returned. In this case B<pause>() returns -1, and I<errno> is set "
1462 #: build/C/man2/pause.2:54 build/C/man2/sigsuspend.2:77 build/C/man2/sigwaitinfo.2:116 build/C/man2/wait.2:409
1468 #: build/C/man2/pause.2:57
1469 msgid "a signal was caught and the signal-catching function returned."
1473 #: build/C/man2/pause.2:64
1474 msgid "B<kill>(2), B<select>(2), B<signal>(2), B<sigsuspend>(2)"
1478 #: build/C/man2/prctl.2:46
1484 #: build/C/man2/prctl.2:46
1490 #: build/C/man2/prctl.2:49
1491 msgid "prctl - operations on a process"
1495 #: build/C/man2/prctl.2:52
1497 msgid "B<#include E<lt>sys/prctl.hE<gt>>\n"
1501 #: build/C/man2/prctl.2:55
1504 "B<int prctl(int >I<option>B<, unsigned long >I<arg2>B<, unsigned long "
1506 "B< unsigned long >I<arg4>B<, unsigned long >I<arg5>B<);>\n"
1510 #: build/C/man2/prctl.2:62
1512 "B<prctl>() is called with a first argument describing what to do (with "
1513 "values defined in I<E<lt>linux/prctl.hE<gt>>), and further arguments with a "
1514 "significance depending on the first one. The first argument can be:"
1518 #: build/C/man2/prctl.2:62
1520 msgid "B<PR_CAPBSET_READ> (since Linux 2.6.25)"
1524 #: build/C/man2/prctl.2:74
1526 "Return (as the function result) 1 if the capability specified in I<arg2> is "
1527 "in the calling thread's capability bounding set, or 0 if it is not. (The "
1528 "capability constants are defined in I<E<lt>linux/capability.hE<gt>>.) The "
1529 "capability bounding set dictates whether the process can receive the "
1530 "capability through a file's permitted capability set on a subsequent call to "
1535 #: build/C/man2/prctl.2:79
1537 "If the capability specified in I<arg2> is not valid, then the call fails "
1538 "with the error B<EINVAL>."
1542 #: build/C/man2/prctl.2:79
1544 msgid "B<PR_CAPBSET_DROP> (since Linux 2.6.25)"
1548 #: build/C/man2/prctl.2:88
1550 "If the calling thread has the B<CAP_SETPCAP> capability, then drop the "
1551 "capability specified by I<arg2> from the calling thread's capability "
1552 "bounding set. Any children of the calling thread will inherit the newly "
1553 "reduced bounding set."
1557 #: build/C/man2/prctl.2:100
1559 "The call fails with the error: B<EPERM> if the calling thread does not have "
1560 "the B<CAP_SETPCAP>; B<EINVAL> if I<arg2> does not represent a valid "
1561 "capability; or B<EINVAL> if file capabilities are not enabled in the kernel, "
1562 "in which case bounding sets are not supported."
1566 #: build/C/man2/prctl.2:100
1568 msgid "B<PR_SET_DUMPABLE> (since Linux 2.3.20)"
1571 #. See http://marc.theaimsgroup.com/?l=linux-kernel&m=115270289030630&w=2
1572 #. Subject: Fix prctl privilege escalation (CVE-2006-2451)
1573 #. From: Marcel Holtmann <marcel () holtmann ! org>
1574 #. Date: 2006-07-12 11:12:00
1576 #: build/C/man2/prctl.2:126
1578 "Set the state of the flag determining whether core dumps are produced for "
1579 "this process upon delivery of a signal whose default behavior is to produce "
1580 "a core dump. (Normally this flag is set for a process by default, but it is "
1581 "cleared when a set-user-ID or set-group-ID program is executed and also by "
1582 "various system calls that manipulate process UIDs and GIDs). In kernels up "
1583 "to and including 2.6.12, I<arg2> must be either 0 (process is not dumpable) "
1584 "or 1 (process is dumpable). Between kernels 2.6.13 and 2.6.17, the value 2 "
1585 "was also permitted, which caused any binary which normally would not be "
1586 "dumped to be dumped readable by root only; for security reasons, this "
1587 "feature has been removed. (See also the description of "
1588 "I</proc/sys/fs/suid_dumpable> in B<proc>(5).) Processes that are not "
1589 "dumpable can not be attached via B<ptrace(2)> B<PTRACE_ATTACH>."
1593 #: build/C/man2/prctl.2:126
1595 msgid "B<PR_GET_DUMPABLE> (since Linux 2.3.20)"
1598 #. Since Linux 2.6.13, the dumpable flag can have the value 2,
1599 #. but in 2.6.13 PR_GET_DUMPABLE simply returns 1 if the dumpable
1600 #. flags has a nonzero value. This was fixed in 2.6.14.
1602 #: build/C/man2/prctl.2:133
1604 "Return (as the function result) the current state of the calling process's "
1609 #: build/C/man2/prctl.2:133
1611 msgid "B<PR_SET_ENDIAN> (since Linux 2.6.18, PowerPC only)"
1614 #. Respectively 0, 1, 2
1616 #: build/C/man2/prctl.2:143
1618 "Set the endian-ness of the calling process to the value given in I<arg2>, "
1619 "which should be one of the following: B<PR_ENDIAN_BIG>, B<PR_ENDIAN_LITTLE>, "
1620 "or B<PR_ENDIAN_PPC_LITTLE> (PowerPC pseudo little endian)."
1624 #: build/C/man2/prctl.2:143
1626 msgid "B<PR_GET_ENDIAN> (since Linux 2.6.18, PowerPC only)"
1630 #: build/C/man2/prctl.2:148
1632 "Return the endian-ness of the calling process, in the location pointed to by "
1633 "I<(int\\ *) arg2>."
1637 #: build/C/man2/prctl.2:148
1639 msgid "B<PR_SET_FPEMU> (since Linux 2.4.18, 2.5.9, only on ia64)"
1643 #: build/C/man2/prctl.2:155
1645 "Set floating-point emulation control bits to I<arg2>. Pass "
1646 "B<PR_FPEMU_NOPRINT> to silently emulate fp operations accesses, or "
1647 "B<PR_FPEMU_SIGFPE> to not emulate fp operations and send B<SIGFPE> instead."
1651 #: build/C/man2/prctl.2:155
1653 msgid "B<PR_GET_FPEMU> (since Linux 2.4.18, 2.5.9, only on ia64)"
1657 #: build/C/man2/prctl.2:160
1659 "Return floating-point emulation control bits, in the location pointed to by "
1660 "I<(int\\ *) arg2>."
1664 #: build/C/man2/prctl.2:160
1666 msgid "B<PR_SET_FPEXC> (since Linux 2.4.21, 2.5.32, only on PowerPC)"
1670 #: build/C/man2/prctl.2:173
1672 "Set floating-point exception mode to I<arg2>. Pass B<PR_FP_EXC_SW_ENABLE> "
1673 "to use FPEXC for FP exception enables, B<PR_FP_EXC_DIV> for floating-point "
1674 "divide by zero, B<PR_FP_EXC_OVF> for floating-point overflow, "
1675 "B<PR_FP_EXC_UND> for floating-point underflow, B<PR_FP_EXC_RES> for "
1676 "floating-point inexact result, B<PR_FP_EXC_INV> for floating-point invalid "
1677 "operation, B<PR_FP_EXC_DISABLED> for FP exceptions disabled, "
1678 "B<PR_FP_EXC_NONRECOV> for async nonrecoverable exception mode, "
1679 "B<PR_FP_EXC_ASYNC> for async recoverable exception mode, "
1680 "B<PR_FP_EXC_PRECISE> for precise exception mode."
1684 #: build/C/man2/prctl.2:173
1686 msgid "B<PR_GET_FPEXC> (since Linux 2.4.21, 2.5.32, only on PowerPC)"
1690 #: build/C/man2/prctl.2:178
1692 "Return floating-point exception mode, in the location pointed to by I<(int\\ "
1697 #: build/C/man2/prctl.2:178
1699 msgid "B<PR_SET_KEEPCAPS> (since Linux 2.2.18)"
1703 #: build/C/man2/prctl.2:196
1705 "Set the state of the thread's \"keep capabilities\" flag, which determines "
1706 "whether the threads's permitted capability set is cleared when a change is "
1707 "made to the threads's user IDs such that the threads's real UID, effective "
1708 "UID, and saved set-user-ID all become nonzero when at least one of them "
1709 "previously had the value 0. By default, the permitted capability set is "
1710 "cleared when such a change is made; setting the \"keep capabilities\" flag "
1711 "prevents it from being cleared. I<arg2> must be either 0 (permitted "
1712 "capabilities are cleared) or 1 (permitted capabilities are kept). (A "
1713 "thread's I<effective> capability set is always cleared when such a "
1714 "credential change is made, regardless of the setting of the \"keep "
1715 "capabilities\" flag.) The \"keep capabilities\" value will be reset to 0 on "
1716 "subsequent calls to B<execve>(2)."
1720 #: build/C/man2/prctl.2:196
1722 msgid "B<PR_GET_KEEPCAPS> (since Linux 2.2.18)"
1726 #: build/C/man2/prctl.2:200
1728 "Return (as the function result) the current state of the calling threads's "
1729 "\"keep capabilities\" flag."
1733 #: build/C/man2/prctl.2:200
1735 msgid "B<PR_SET_NAME> (since Linux 2.6.9)"
1738 #. TASK_COMM_LEN in include/linux/sched.h
1740 #: build/C/man2/prctl.2:208
1742 "Set the process name for the calling process, using the value in the "
1743 "location pointed to by I<(char\\ *) arg2>. The name can be up to 16 bytes "
1744 "long, and should be null-terminated if it contains fewer bytes."
1748 #: build/C/man2/prctl.2:208
1750 msgid "B<PR_GET_NAME> (since Linux 2.6.11)"
1754 #: build/C/man2/prctl.2:215
1756 "Return the process name for the calling process, in the buffer pointed to by "
1757 "I<(char\\ *) arg2>. The buffer should allow space for up to 16 bytes; the "
1758 "returned string will be null-terminated if it is shorter than that."
1762 #: build/C/man2/prctl.2:215
1764 msgid "B<PR_SET_PDEATHSIG> (since Linux 2.1.57)"
1768 #: build/C/man2/prctl.2:224
1770 "Set the parent process death signal of the calling process to I<arg2> "
1771 "(either a signal value in the range 1..maxsig, or 0 to clear). This is the "
1772 "signal that the calling process will get when its parent dies. This value "
1773 "is cleared for the child of a B<fork>(2)."
1777 #: build/C/man2/prctl.2:224
1779 msgid "B<PR_GET_PDEATHSIG> (since Linux 2.3.15)"
1783 #: build/C/man2/prctl.2:229
1785 "Return the current value of the parent process death signal, in the location "
1786 "pointed to by I<(int\\ *) arg2>."
1790 #: build/C/man2/prctl.2:229
1792 msgid "B<PR_SET_SECCOMP> (since Linux 2.6.23)"
1795 #. See http://thread.gmane.org/gmane.linux.kernel/542632
1796 #. [PATCH 0 of 2] seccomp updates
1797 #. andrea@cpushare.com
1799 #: build/C/man2/prctl.2:253
1801 "Set the secure computing mode for the calling thread. In the current "
1802 "implementation, I<arg2> must be 1. After the secure computing mode has been "
1803 "set to 1, the only system calls that the thread is permitted to make are "
1804 "B<read>(2), B<write>(2), B<_exit>(2), and B<sigreturn>(2). Other system "
1805 "calls result in the delivery of a B<SIGKILL> signal. Secure computing mode "
1806 "is useful for number-crunching applications that may need to execute "
1807 "untrusted byte code, perhaps obtained by reading from a pipe or socket. "
1808 "This operation is only available if the kernel is configured with "
1809 "CONFIG_SECCOMP enabled."
1813 #: build/C/man2/prctl.2:253
1815 msgid "B<PR_GET_SECCOMP> (since Linux 2.6.23)"
1819 #: build/C/man2/prctl.2:266
1821 "Return the secure computing mode of the calling thread. Not very useful for "
1822 "the current implementation (mode equals 1), but may be useful for other "
1823 "possible future modes: if the caller is not in secure computing mode, this "
1824 "operation returns 0; if the caller is in secure computing mode, then the "
1825 "B<prctl>() call will cause a B<SIGKILL> signal to be sent to the process. "
1826 "This operation is only available if the kernel is configured with "
1827 "CONFIG_SECCOMP enabled."
1831 #: build/C/man2/prctl.2:266
1833 msgid "B<PR_SET_SECUREBITS> (since Linux 2.6.26)"
1837 #: build/C/man2/prctl.2:272
1839 "Set the \"securebits\" flags of the calling thread to the value supplied in "
1840 "I<arg2>. See B<capabilities>(7)."
1844 #: build/C/man2/prctl.2:272
1846 msgid "B<PR_GET_SECUREBITS> (since Linux 2.6.26)"
1850 #: build/C/man2/prctl.2:278
1852 "Return (as the function result) the \"securebits\" flags of the calling "
1853 "thread. See B<capabilities>(7)."
1857 #: build/C/man2/prctl.2:278
1859 msgid "B<PR_SET_TIMING> (since Linux 2.6.0-test4)"
1864 #. PR_TIMING_TIMESTAMP doesn't do anything in 2.6.26-rc8,
1865 #. and looking at the patch history, it appears
1866 #. that it never did anything.
1868 #: build/C/man2/prctl.2:295
1870 "Set whether to use (normal, traditional) statistical process timing or "
1871 "accurate timestamp-based process timing, by passing B<PR_TIMING_STATISTICAL> "
1872 "or B<PR_TIMING_TIMESTAMP> to I<arg2>. B<PR_TIMING_TIMESTAMP> is not "
1873 "currently implemented (attempting to set this mode will yield the error "
1878 #: build/C/man2/prctl.2:295
1880 msgid "B<PR_GET_TIMING> (since Linux 2.6.0-test4)"
1884 #: build/C/man2/prctl.2:299
1886 "Return (as the function result) which process timing method is currently in "
1891 #: build/C/man2/prctl.2:299
1893 msgid "B<PR_SET_TSC> (since Linux 2.6.26, x86 only)"
1897 #: build/C/man2/prctl.2:312
1899 "Set the state of the flag determining whether the timestamp counter can be "
1900 "read by the process. Pass B<PR_TSC_ENABLE> to I<arg2> to allow it to be "
1901 "read, or B<PR_TSC_SIGSEGV> to generate a B<SIGSEGV> when the process tries "
1902 "to read the timestamp counter."
1906 #: build/C/man2/prctl.2:312
1908 msgid "B<PR_GET_TSC> (since Linux 2.6.26, x86 only)"
1912 #: build/C/man2/prctl.2:318
1914 "Return the state of the flag determining whether the timestamp counter can "
1915 "be read, in the location pointed to by I<(int\\ *) arg2>."
1919 #: build/C/man2/prctl.2:318
1921 msgid "B<PR_SET_UNALIGN>"
1925 #: build/C/man2/prctl.2:328
1927 "(Only on: ia64, since Linux 2.3.48; parisc, since Linux 2.6.15; PowerPC, "
1928 "since Linux 2.6.18; Alpha, since Linux 2.6.22) Set unaligned access control "
1929 "bits to I<arg2>. Pass B<PR_UNALIGN_NOPRINT> to silently fix up unaligned "
1930 "user accesses, or B<PR_UNALIGN_SIGBUS> to generate B<SIGBUS> on unaligned "
1935 #: build/C/man2/prctl.2:328
1937 msgid "B<PR_GET_UNALIGN>"
1941 #: build/C/man2/prctl.2:335
1943 "(see B<PR_SET_UNALIGN> for information on versions and architectures) "
1944 "Return unaligned access control bits, in the location pointed to by I<(int\\ "
1949 #: build/C/man2/prctl.2:335
1951 msgid "B<PR_MCE_KILL> (since Linux 2.6.32)"
1955 #: build/C/man2/prctl.2:375
1957 "Set the machine check memory corruption kill policy for the current thread. "
1958 "If I<arg2> is B<PR_MCE_KILL_CLEAR>, clear the thread memory corruption kill "
1959 "policy and use the system-wide default. (The system-wide default is defined "
1960 "by I</proc/sys/vm/memory_failure_early_kill>; see B<proc>(5).) If I<arg2> "
1961 "is B<PR_MCE_KILL_SET>, use a thread-specific memory corruption kill policy. "
1962 "In this case, I<arg3> defines whether the policy is I<early kill> "
1963 "(B<PR_MCE_KILL_EARLY>), I<late kill> (B<PR_MCE_KILL_LATE>), or the "
1964 "system-wide default (B<PR_MCE_KILL_DEFAULT>). Early kill means that the "
1965 "thread receives a B<SIGBUS> signal as soon as hardware memory corruption is "
1966 "detected inside its address space. In late kill mode, the process is only "
1967 "killed when it accesses a corrupted page. See B<sigaction>(2) for more "
1968 "information on the B<SIGBUS> signal. The policy is inherited by children. "
1969 "The remaining unused B<prctl>() arguments must be zero for future "
1974 #: build/C/man2/prctl.2:375
1976 msgid "B<PR_MCE_KILL_GET> (since Linux 2.6.32)"
1980 #: build/C/man2/prctl.2:381
1982 "Return the current per-process machine check kill policy. All unused "
1983 "B<prctl>() arguments must be zero."
1987 #: build/C/man2/prctl.2:398
1989 "On success, B<PR_GET_DUMPABLE>, B<PR_GET_KEEPCAPS>, B<PR_CAPBSET_READ>, "
1990 "B<PR_GET_TIMING>, B<PR_GET_SECUREBITS>, B<PR_MCE_KILL_GET>, and (if it "
1991 "returns) B<PR_GET_SECCOMP> return the nonnegative values described above. "
1992 "All other I<option> values return 0 on success. On error, -1 is returned, "
1993 "and I<errno> is set appropriately."
1997 #: build/C/man2/prctl.2:403
1998 msgid "I<arg2> is an invalid address."
2002 #: build/C/man2/prctl.2:408
2003 msgid "The value of I<option> is not recognized."
2007 #: build/C/man2/prctl.2:418
2009 "I<option> is B<PR_MCE_KILL> or B<PR_MCE_KILL_GET>, and unused B<prctl>() "
2010 "arguments were not specified as zero."
2014 #: build/C/man2/prctl.2:423
2015 msgid "I<arg2> is not valid value for this I<option>."
2019 #: build/C/man2/prctl.2:432
2021 "I<option> is B<PR_SET_SECCOMP> or B<PR_SET_SECCOMP>, and the kernel was not "
2022 "configured with B<CONFIG_SECCOMP>."
2026 #: build/C/man2/prctl.2:444
2028 "I<option> is B<PR_SET_SECUREBITS>, and the caller does not have the "
2029 "B<CAP_SETPCAP> capability, or tried to unset a \"locked\" flag, or tried to "
2030 "set a flag whose corresponding locked flag was set (see B<capabilities>(7))."
2034 #: build/C/man2/prctl.2:454
2036 "I<option> is B<PR_SET_KEEPCAPS>, and the callers's "
2037 "B<SECURE_KEEP_CAPS_LOCKED> flag is set (see B<capabilities>(7))."
2040 #. The following can't actually happen, because prctl() in
2041 #. seccomp mode will cause SIGKILL.
2046 #. .BR PR_SET_SECCOMP ,
2047 #. and secure computing mode is already 1.
2049 #: build/C/man2/prctl.2:470
2051 "I<option> is B<PR_CAPBSET_DROP>, and the caller does not have the "
2052 "B<CAP_SETPCAP> capability."
2055 #. The library interface was added in glibc 2.0.6
2057 #: build/C/man2/prctl.2:475
2058 msgid "The B<prctl>() system call was introduced in Linux 2.1.57."
2062 #: build/C/man2/prctl.2:482
2064 "This call is Linux-specific. IRIX has a B<prctl>() system call (also "
2065 "introduced in Linux 2.1.44 as irix_prctl on the MIPS architecture), with "
2070 #: build/C/man2/prctl.2:484
2071 msgid "B<ptrdiff_t prctl(int >I<option>B<, int >I<arg2>B<, int >I<arg3>B<);>"
2075 #: build/C/man2/prctl.2:489
2077 "and options to get the maximum number of processes per user, get the maximum "
2078 "number of processors the calling process can use, find out whether a "
2079 "specified process is currently blocked, get or set the maximum stack size, "
2084 #: build/C/man2/prctl.2:492
2085 msgid "B<signal>(2), B<core>(5)"
2089 #: build/C/man3/profil.3:28
2095 #: build/C/man3/profil.3:31
2096 msgid "profil - execution time profile"
2100 #: build/C/man3/profil.3:36
2102 "B<int profil(unsigned short *>I<buf>B<, size_t >I<bufsiz>B<, size_t "
2103 ">I<offset>B<, unsigned int >I<scale>B<);>"
2107 #: build/C/man3/profil.3:44
2108 msgid "B<profil>(): _BSD_SOURCE || (_XOPEN_SOURCE && _XOPEN_SOURCE\\ E<lt>\\ 500)"
2112 #: build/C/man3/profil.3:66
2114 "This routine provides a means to find out in what areas your program spends "
2115 "most of its time. The argument I<buf> points to I<bufsiz> bytes of core. "
2116 "Every virtual 10 milliseconds, the user's program counter (PC) is examined: "
2117 "I<offset> is subtracted and the result is multiplied by I<scale> and divided "
2118 "by 65536. If the resulting value is less than I<bufsiz>, then the "
2119 "corresponding entry in I<buf> is incremented. If I<buf> is NULL, profiling "
2124 #: build/C/man3/profil.3:68
2125 msgid "Zero is always returned."
2129 #: build/C/man3/profil.3:70
2130 msgid "Similar to a call in SVr4 (but not POSIX.1-2001)."
2134 #: build/C/man3/profil.3:76
2136 "B<profil>() cannot be used on a program that also uses B<ITIMER_PROF> "
2137 "interval timers (see B<setitimer>(2))."
2141 #: build/C/man3/profil.3:79
2143 "True kernel profiling provides more accurate results. Libc 4.4 contained a "
2144 "kernel patch providing a system call profil."
2148 #: build/C/man3/profil.3:84
2149 msgid "B<gprof>(1), B<setitimer>(2), B<sigaction>(2), B<signal>(2)"
2153 #: build/C/man3/psignal.3:28
2159 #: build/C/man3/psignal.3:28
2165 #: build/C/man3/psignal.3:28 build/C/man3/raise.3:27 build/C/man7/sigevent.7:24
2171 #: build/C/man3/psignal.3:31
2172 msgid "psignal, psiginfo - print signal message"
2176 #: build/C/man3/psignal.3:37
2179 "B<void psignal(int >I<sig>B<, const char *>I<s>B<);>\n"
2180 "B<void psiginfo(const siginfo_t *>I<pinfo>B<, const char *>I<s>B<);>\n"
2184 #: build/C/man3/psignal.3:39
2186 msgid "B<extern const char *const >I<sys_siglist>B<[];>\n"
2190 #: build/C/man3/psignal.3:48
2191 msgid "B<psignal>(): _SVID_SOURCE || _BSD_SOURCE"
2195 #: build/C/man3/psignal.3:51
2197 "B<psiginfo>(): _XOPEN_SOURCE\\ E<gt>=\\ 700 || _POSIX_C_SOURCE\\ E<gt>=\\ "
2202 #: build/C/man3/psignal.3:54
2203 msgid "I<sys_siglist>: _BSD_SOURCE"
2207 #: build/C/man3/psignal.3:63
2209 "The B<psignal>() function displays a message on I<stderr> consisting of the "
2210 "string I<s>, a colon, a space, a string describing the signal number I<sig>, "
2211 "and a trailing newline. If the string I<s> is NULL or empty, the colon and "
2212 "space are omitted. If I<sig> is invalid, the message displayed will "
2213 "indicate an unknown signal."
2217 #: build/C/man3/psignal.3:84
2219 "The B<psiginfo>() function is like B<psignal>(), except that it displays "
2220 "information about the signal described by I<pinfo>, which should point to a "
2221 "valid I<siginfo_t> structure. As well as the signal description, "
2222 "B<psiginfo>() displays information about the origin of the signal, and "
2223 "other information relevant to the signal (e.g., the relevant memory address "
2224 "for hardware-generated signals, the child process ID for B<SIGCHLD>, and the "
2225 "user ID and process ID of the sender, for signals set using B<kill>(2) or "
2230 #: build/C/man3/psignal.3:87
2232 "The array I<sys_siglist> holds the signal description strings indexed by "
2237 #: build/C/man3/psignal.3:93
2238 msgid "The B<psignal>() and B<psiginfo>() functions return no value."
2242 #: build/C/man3/psignal.3:97
2243 msgid "The B<psiginfo>() function was added to glibc in version 2.10."
2247 #: build/C/man3/psignal.3:99
2248 msgid "POSIX.1-2008, 4.3BSD."
2252 #: build/C/man3/psignal.3:103
2253 msgid "In glibc versions up to 2.12, B<psiginfo>() had the following bugs:"
2256 #. FIXME http://sourceware.org/bugzilla/show_bug.cgi?id=12107
2257 #. Reportedly now fixed; check glibc 2.13
2259 #: build/C/man3/psignal.3:107
2260 msgid "In some circumstances, a trailing newline is not printed."
2263 #. FIXME http://sourceware.org/bugzilla/show_bug.cgi?id=12108
2264 #. Reportedly now fixed; check glibc 2.13
2266 #: build/C/man3/psignal.3:111
2267 msgid "Additional details are not displayed for real-time signals."
2271 #: build/C/man3/psignal.3:116
2272 msgid "B<sigaction>(2), B<perror>(3), B<strsignal>(3), B<signal>(7)"
2276 #: build/C/man3/raise.3:27
2282 #: build/C/man3/raise.3:27 build/C/man2/sigprocmask.2:27
2288 #: build/C/man3/raise.3:30
2289 msgid "raise - send a signal to the caller"
2293 #: build/C/man3/raise.3:35
2295 msgid "B<int raise(int >I<sig>B<);>\n"
2299 #: build/C/man3/raise.3:41
2301 "The B<raise>() function sends a signal to the calling process or thread. "
2302 "In a single-threaded program it is equivalent to"
2306 #: build/C/man3/raise.3:45
2308 msgid "kill(getpid(), sig);\n"
2312 #: build/C/man3/raise.3:49
2313 msgid "In a multithreaded program it is equivalent to"
2317 #: build/C/man3/raise.3:53
2319 msgid "pthread_kill(pthread_self(), sig);\n"
2323 #: build/C/man3/raise.3:59
2325 "If the signal causes a handler to be called, B<raise>() will only return "
2326 "after the signal handler has returned."
2330 #: build/C/man3/raise.3:62
2331 msgid "B<raise>() returns 0 on success, and nonzero for failure."
2335 #: build/C/man3/raise.3:64 build/C/man2/signal.2:107
2336 msgid "C89, C99, POSIX.1-2001."
2340 #: build/C/man3/raise.3:71
2342 "B<getpid>(2), B<kill>(2), B<sigaction>(2), B<signal>(2), B<pthread_kill>(3), "
2347 #: build/C/man2/rt_sigqueueinfo.2:23
2349 msgid "RT_SIGQUEUEINFO"
2353 #: build/C/man2/rt_sigqueueinfo.2:23 build/C/man7/signal.7:44 build/C/man3/sigqueue.3:26 build/C/man2/tkill.2:29
2359 #: build/C/man2/rt_sigqueueinfo.2:26
2360 msgid "rt_sigqueueinfo, rt_tgsigqueueinfo - queue a signal and data"
2364 #: build/C/man2/rt_sigqueueinfo.2:29
2367 "B<int rt_sigqueueinfo(pid_t >I<tgid>B<, int >I<sig>B<, siginfo_t "
2372 #: build/C/man2/rt_sigqueueinfo.2:32
2375 "B<int rt_tgsigqueueinfo(pid_t >I<tgid>B<, pid_t >I<tid>B<, int >I<sig>B<,>\n"
2376 "B< siginfo_t *>I<uinfo>B<);>\n"
2380 #: build/C/man2/rt_sigqueueinfo.2:45
2382 "The B<rt_sigqueueinfo>() and B<rt_tgsigqueueinfo>() system calls are the "
2383 "low-level interfaces used to send a signal plus data to a process or "
2384 "thread. The receiver of the signal can obtain the accompanying data by "
2385 "establishing a signal handler with the B<sigaction>(2) B<SA_SIGINFO> flag."
2389 #: build/C/man2/rt_sigqueueinfo.2:51
2391 "These system calls are not intended for direct application use; they are "
2392 "provided to allow the implementation of B<sigqueue>(3) and "
2393 "B<pthread_sigqueue>(3)."
2397 #: build/C/man2/rt_sigqueueinfo.2:63
2399 "The B<rt_sigqueueinfo>() system call sends the signal I<sig> to the thread "
2400 "group with the ID I<tgid>. (The term \"thread group\" is synonymous with "
2401 "\"process\", and I<tid> corresponds to the traditional UNIX process ID.) "
2402 "The signal will be delivered to an arbitrary member of the thread group "
2403 "(i.e., one of the threads that is not currently blocking the signal)."
2407 #: build/C/man2/rt_sigqueueinfo.2:74
2409 "The I<uinfo> argument specifies the data to accompany the signal. This "
2410 "argument is a pointer to a structure of type I<siginfo_t>, described in "
2411 "B<sigaction>(2) (and defined by including I<E<lt>sigaction.hE<gt>>). The "
2412 "caller should set the following fields in this structure:"
2416 #: build/C/man2/rt_sigqueueinfo.2:74 build/C/man7/sigevent.7:86 build/C/man2/wait.2:315
2423 #: build/C/man2/rt_sigqueueinfo.2:90
2425 "This must be one of the B<SI_*> codes in the kernel source file "
2426 "I<include/asm-generic/siginfo.h>, with the restriction that the code must be "
2427 "negative (i.e., cannot be B<SI_USER>, which is used by the kernel to "
2428 "indicate a signal sent by B<kill>(2)) and cannot (since Linux 2.6.39) be "
2429 "B<SI_TKILL> (which is used by the kernel to indicate a signal sent using "
2434 #: build/C/man2/rt_sigqueueinfo.2:90 build/C/man2/wait.2:294
2440 #: build/C/man2/rt_sigqueueinfo.2:94
2441 msgid "This should be set to a process ID, typically the process ID of the sender."
2445 #: build/C/man2/rt_sigqueueinfo.2:94 build/C/man2/wait.2:297
2451 #: build/C/man2/rt_sigqueueinfo.2:98
2452 msgid "This should be set to a user ID, typically the real user ID of the sender."
2456 #: build/C/man2/rt_sigqueueinfo.2:98 build/C/man7/sigevent.7:94
2462 #: build/C/man2/rt_sigqueueinfo.2:105
2464 "This field contains the user data to accompany the signal. For more "
2465 "information, see the description of the last (I<union sigval>) argument of "
2470 #: build/C/man2/rt_sigqueueinfo.2:112
2472 "Internally, the kernel sets the I<si_signo> field to the value specified in "
2473 "I<sig>, so that the receiver of the signal can also obtain the signal number "
2478 #: build/C/man2/rt_sigqueueinfo.2:124
2480 "The B<rt_tgsigueueinfo>() system call is like B<rt_sigueueinfo>(), but "
2481 "sends the signal and data to the single thread specified by the combination "
2482 "of I<tgid>, a thread group ID, and I<tid>, a thread in that thread group."
2486 #: build/C/man2/rt_sigqueueinfo.2:129
2488 "On success, these system calls return 0. On error, they return -1 and "
2489 "I<errno> is set to indicate the error."
2493 #: build/C/man2/rt_sigqueueinfo.2:130 build/C/man3/sigqueue.3:90 build/C/man2/sigwaitinfo.2:108 build/C/man2/timer_create.2:174
2499 #: build/C/man2/rt_sigqueueinfo.2:136 build/C/man3/sigqueue.3:96
2501 "The limit of signals which may be queued has been reached. (See "
2502 "B<signal>(7) for further information.)"
2506 #: build/C/man2/rt_sigqueueinfo.2:143
2507 msgid "I<sig>, I<tgid>, or I<tid> was invalid."
2511 #: build/C/man2/rt_sigqueueinfo.2:151
2513 "The caller does not have permission to send the signal to the target. For "
2514 "the required permissions, see B<kill>(2). Or: I<uinfo-E<gt>si_code> is "
2519 #: build/C/man2/rt_sigqueueinfo.2:157
2520 msgid "B<rt_sigqueinfo>(): No thread group matching I<tgid> was found."
2524 #: build/C/man2/rt_sigqueueinfo.2:164
2525 msgid "B<rt_rtsigqueinfo>(): No thread matching I<tgid> and I<tid> was found."
2529 #: build/C/man2/rt_sigqueueinfo.2:171
2531 "The B<rt_sigqueueinfo>() system call was added to Linux in version 2.2. "
2532 "The B<rt_tgsigqueueinfo>() system call was added to Linux in version "
2537 #: build/C/man2/rt_sigqueueinfo.2:173 build/C/man2/sgetmask.2:63 build/C/man2/timerfd_create.2:372
2538 msgid "These system calls are Linux-specific."
2542 #: build/C/man2/rt_sigqueueinfo.2:178
2544 "Since these system calls are not intended for application use, there are no "
2545 "glibc wrapper functions; use B<syscall>(2) in the unlikely case that you "
2546 "want to call them directly."
2550 #: build/C/man2/rt_sigqueueinfo.2:183
2552 "As with B<kill>(2), the null signal (0) can be used to check if the "
2553 "specified process or thread exists."
2557 #: build/C/man2/rt_sigqueueinfo.2:191
2559 "B<kill>(2), B<sigaction>(2), B<sigprocmask>(2), B<tgkill>(2), "
2560 "B<pthread_sigqueue>(3), B<sigqueue>(3), B<signal>(7)"
2564 #: build/C/man2/sgetmask.2:24
2570 #: build/C/man2/sgetmask.2:24
2576 #: build/C/man2/sgetmask.2:27
2577 msgid "sgetmask, ssetmask - manipulation of signal mask (obsolete)"
2581 #: build/C/man2/sgetmask.2:29
2582 msgid "B<long sgetmask(void);>"
2586 #: build/C/man2/sgetmask.2:31
2587 msgid "B<long ssetmask(long >I<newmask>B<);>"
2591 #: build/C/man2/sgetmask.2:37
2593 "These system calls are obsolete. I<Do not use them>; use B<sigprocmask>(2) "
2598 #: build/C/man2/sgetmask.2:40
2599 msgid "B<sgetmask>() returns the signal mask of the calling process."
2603 #: build/C/man2/sgetmask.2:45
2605 "B<ssetmask>() sets the signal mask of the calling process to the value "
2606 "given in I<newmask>. The previous signal mask is returned."
2610 #: build/C/man2/sgetmask.2:54
2612 "The signal masks dealt with by these two system calls are plain bit masks "
2613 "(unlike the I<sigset_t> used by B<sigprocmask>(2)); use B<sigmask>(3) to "
2614 "create and inspect these masks."
2618 #: build/C/man2/sgetmask.2:59
2620 "B<sgetmask>() always successfully returns the signal mask. B<ssetmask>() "
2621 "always succeeds, and returns the previous signal mask."
2625 #: build/C/man2/sgetmask.2:61
2626 msgid "These system calls always succeed."
2630 #: build/C/man2/sgetmask.2:66
2631 msgid "Glibc does not provide wrappers for these system calls; use B<syscall>(2)."
2635 #: build/C/man2/sgetmask.2:69
2637 "These system calls are unaware of signal numbers greater than 31 (i.e., "
2638 "real-time signals)."
2642 #: build/C/man2/sgetmask.2:74
2643 msgid "It is not possible to block B<SIGSTOP> or B<SIGKILL>."
2647 #: build/C/man2/sgetmask.2:77
2648 msgid "B<sigprocmask>(2), B<signal>(7)"
2652 #: build/C/man2/sigaction.2:45
2658 #: build/C/man2/sigaction.2:45
2664 #: build/C/man2/sigaction.2:48
2665 msgid "sigaction - examine and change a signal action"
2669 #: build/C/man2/sigaction.2:54
2672 "B<int sigaction(int >I<signum>B<, const struct sigaction *>I<act>B<,>\n"
2673 "B< struct sigaction *>I<oldact>B<);>\n"
2677 #: build/C/man2/sigaction.2:64
2679 "B<sigaction>(): _POSIX_C_SOURCE\\ E<gt>=\\ 1 || _XOPEN_SOURCE || "
2684 #: build/C/man2/sigaction.2:73
2686 "The B<sigaction>() system call is used to change the action taken by a "
2687 "process on receipt of a specific signal. (See B<signal>(7) for an overview "
2692 #: build/C/man2/sigaction.2:79
2694 "I<signum> specifies the signal and can be any valid signal except B<SIGKILL> "
2699 #: build/C/man2/sigaction.2:90
2701 "If I<act> is non-NULL, the new action for signal I<signum> is installed from "
2702 "I<act>. If I<oldact> is non-NULL, the previous action is saved in "
2707 #: build/C/man2/sigaction.2:94
2708 msgid "The I<sigaction> structure is defined as something like:"
2712 #: build/C/man2/sigaction.2:104
2715 "struct sigaction {\n"
2716 " void (*sa_handler)(int);\n"
2717 " void (*sa_sigaction)(int, siginfo_t *, void *);\n"
2718 " sigset_t sa_mask;\n"
2720 " void (*sa_restorer)(void);\n"
2725 #: build/C/man2/sigaction.2:111
2727 "On some architectures a union is involved: do not assign to both "
2728 "I<sa_handler> and I<sa_sigaction>."
2732 #: build/C/man2/sigaction.2:118
2734 "The I<sa_restorer> element is obsolete and should not be used. POSIX does "
2735 "not specify a I<sa_restorer> element."
2739 #: build/C/man2/sigaction.2:128
2741 "I<sa_handler> specifies the action to be associated with I<signum> and may "
2742 "be B<SIG_DFL> for the default action, B<SIG_IGN> to ignore this signal, or a "
2743 "pointer to a signal handling function. This function receives the signal "
2744 "number as its only argument."
2748 #: build/C/man2/sigaction.2:150
2750 "If B<SA_SIGINFO> is specified in I<sa_flags>, then I<sa_sigaction> (instead "
2751 "of I<sa_handler>) specifies the signal-handling function for I<signum>. "
2752 "This function receives the signal number as its first argument, a pointer to "
2753 "a I<siginfo_t> as its second argument and a pointer to a I<ucontext_t> (cast "
2754 "to I<void\\ *>) as its third argument. (Commonly, the handler function "
2755 "doesn't make any use of the third argument. See B<getcontext>(2) for "
2756 "further information about I<ucontext_t>.)"
2760 #: build/C/man2/sigaction.2:160
2762 "I<sa_mask> specifies a mask of signals which should be blocked (i.e., added "
2763 "to the signal mask of the thread in which the signal handler is invoked) "
2764 "during execution of the signal handler. In addition, the signal which "
2765 "triggered the handler will be blocked, unless the B<SA_NODEFER> flag is "
2770 #: build/C/man2/sigaction.2:164
2772 "I<sa_flags> specifies a set of flags which modify the behavior of the "
2773 "signal. It is formed by the bitwise OR of zero or more of the following:"
2777 #: build/C/man2/sigaction.2:165
2779 msgid "B<SA_NOCLDSTOP>"
2783 #: build/C/man2/sigaction.2:182
2785 "If I<signum> is B<SIGCHLD>, do not receive notification when child processes "
2786 "stop (i.e., when they receive one of B<SIGSTOP>, B<SIGTSTP>, B<SIGTTIN> or "
2787 "B<SIGTTOU>) or resume (i.e., they receive B<SIGCONT>) (see B<wait>(2)). "
2788 "This flag is only meaningful when establishing a handler for B<SIGCHLD>."
2792 #: build/C/man2/sigaction.2:182
2794 msgid "B<SA_NOCLDWAIT> (since Linux 2.6)"
2797 #. To be precise: Linux 2.5.60 -- MTK
2799 #: build/C/man2/sigaction.2:196
2801 "If I<signum> is B<SIGCHLD>, do not transform children into zombies when they "
2802 "terminate. See also B<waitpid>(2). This flag is only meaningful when "
2803 "establishing a handler for B<SIGCHLD>, or when setting that signal's "
2804 "disposition to B<SIG_DFL>."
2808 #: build/C/man2/sigaction.2:208
2810 "If the B<SA_NOCLDWAIT> flag is set when establishing a handler for "
2811 "B<SIGCHLD>, POSIX.1 leaves it unspecified whether a B<SIGCHLD> signal is "
2812 "generated when a child process terminates. On Linux, a B<SIGCHLD> signal is "
2813 "generated in this case; on some other implementations, it is not."
2817 #: build/C/man2/sigaction.2:208
2819 msgid "B<SA_NODEFER>"
2823 #: build/C/man2/sigaction.2:215
2825 "Do not prevent the signal from being received from within its own signal "
2826 "handler. This flag is only meaningful when establishing a signal handler. "
2827 "B<SA_NOMASK> is an obsolete, nonstandard synonym for this flag."
2831 #: build/C/man2/sigaction.2:215
2833 msgid "B<SA_ONSTACK>"
2837 #: build/C/man2/sigaction.2:221
2839 "Call the signal handler on an alternate signal stack provided by "
2840 "B<sigaltstack>(2). If an alternate stack is not available, the default "
2841 "stack will be used. This flag is only meaningful when establishing a signal "
2846 #: build/C/man2/sigaction.2:221
2848 msgid "B<SA_RESETHAND>"
2852 #: build/C/man2/sigaction.2:228
2854 "Restore the signal action to the default state once the signal handler has "
2855 "been called. This flag is only meaningful when establishing a signal "
2856 "handler. B<SA_ONESHOT> is an obsolete, nonstandard synonym for this flag."
2860 #: build/C/man2/sigaction.2:228
2862 msgid "B<SA_RESTART>"
2866 #: build/C/man2/sigaction.2:236
2868 "Provide behavior compatible with BSD signal semantics by making certain "
2869 "system calls restartable across signals. This flag is only meaningful when "
2870 "establishing a signal handler. See B<signal>(7) for a discussion of system "
2875 #: build/C/man2/sigaction.2:236
2877 msgid "B<SA_SIGINFO> (since Linux 2.2)"
2882 #. field was added in Linux 2.1.86.)
2884 #: build/C/man2/sigaction.2:247
2886 "The signal handler takes 3 arguments, not one. In this case, "
2887 "I<sa_sigaction> should be set instead of I<sa_handler>. This flag is only "
2888 "meaningful when establishing a signal handler."
2892 #: build/C/man2/sigaction.2:254
2894 "The I<siginfo_t> argument to I<sa_sigaction> is a struct with the following "
2899 #. si_trapno seems to be only used on SPARC and Alpha;
2900 #. this page could use a little more detail on its purpose there.
2901 #. In the kernel: si_tid
2903 #: build/C/man2/sigaction.2:285
2907 " int si_signo; /* Signal number */\n"
2908 " int si_errno; /* An errno value */\n"
2909 " int si_code; /* Signal code */\n"
2910 " int si_trapno; /* Trap number that caused\n"
2911 " hardware-generated signal\n"
2912 " (unused on most architectures) */\n"
2913 " pid_t si_pid; /* Sending process ID */\n"
2914 " uid_t si_uid; /* Real user ID of sending process */\n"
2915 " int si_status; /* Exit value or signal */\n"
2916 " clock_t si_utime; /* User time consumed */\n"
2917 " clock_t si_stime; /* System time consumed */\n"
2918 " sigval_t si_value; /* Signal value */\n"
2919 " int si_int; /* POSIX.1b signal */\n"
2920 " void *si_ptr; /* POSIX.1b signal */\n"
2921 " int si_overrun; /* Timer overrun count; POSIX.1b timers */\n"
2922 " int si_timerid; /* Timer ID; POSIX.1b timers */\n"
2923 " void *si_addr; /* Memory location which caused fault */\n"
2924 " long si_band; /* Band event (was I<int> in\n"
2925 " glibc 2.3.2 and earlier) */\n"
2926 " int si_fd; /* File descriptor */\n"
2927 " short si_addr_lsb; /* Least significant bit of address\n"
2928 " (since kernel 2.6.32) */\n"
2933 #: build/C/man2/sigaction.2:294
2935 "I<si_signo>, I<si_errno> and I<si_code> are defined for all signals. "
2936 "(I<si_errno> is generally unused on Linux.) The rest of the struct may be a "
2937 "union, so that one should only read the fields that are meaningful for the "
2942 #: build/C/man2/sigaction.2:309
2944 "Signals sent with B<kill>(2) and B<sigqueue>(3) fill in I<si_pid> and "
2945 "I<si_uid>. In addition, signals sent with B<sigqueue>(3) fill in I<si_int> "
2946 "and I<si_ptr> with the values specified by the sender of the signal; see "
2947 "B<sigqueue>(3) for more details."
2951 #: build/C/man2/sigaction.2:325
2953 "Signals sent by POSIX.1b timers (since Linux 2.6) fill in I<si_overrun> and "
2954 "I<si_timerid>. The I<si_timerid> field is an internal ID used by the kernel "
2955 "to identify the timer; it is not the same as the timer ID returned by "
2956 "B<timer_create>(2). The I<si_overrun> field is the timer overrun count; "
2957 "this is the same information as is obtained by a call to "
2958 "B<timer_getoverrun>(2). These fields are nonstandard Linux extensions."
2962 #: build/C/man2/sigaction.2:340
2964 "Signals sent for message queue notification (see the description of "
2965 "B<SIGEV_SIGNAL> in B<mq_notify>(3)) fill in I<si_int>/I<si_ptr>, with the "
2966 "I<sigev_value> supplied to B<mq_notify>(3); I<si_pid>, with the process ID "
2967 "of the message sender; and I<si_uid>, with the real user ID of the message "
2972 #. When si_utime and si_stime where originally implemented, the
2973 #. measurement unit was HZ, which was the same as clock ticks
2974 #. (sysconf(_SC_CLK_TCK)). In 2.6, HZ became configurable, and
2975 #. was *still* used as the unit to return the info these fields,
2976 #. with the result that the field values depended on the the
2977 #. configured HZ. Of course, the should have been measured in
2978 #. USER_HZ instead, so that sysconf(_SC_CLK_TCK) could be used to
2979 #. convert to seconds. I have a queued patch to fix this:
2980 #. http://thread.gmane.org/gmane.linux.kernel/698061/ .
2981 #. This patch made it into 2.6.27.
2982 #. But note that these fields still don't return the times of
2983 #. waited-for children (as is done by getrusage() and times()
2984 #. and wait4()). Solaris 8 does include child times.
2986 #: build/C/man2/sigaction.2:387
2988 "B<SIGCHLD> fills in I<si_pid>, I<si_uid>, I<si_status>, I<si_utime> and "
2989 "I<si_stime>, providing information about the child. The I<si_pid> field is "
2990 "the process ID of the child; I<si_uid> is the child's real user ID. The "
2991 "I<si_status> field contains the exit status of the child (if I<si_code> is "
2992 "B<CLD_EXITED>), or the signal number that caused the process to change "
2993 "state. The I<si_utime> and I<si_stime> contain the user and system CPU time "
2994 "used by the child process; these fields do not include the times used by "
2995 "waited-for children (unlike B<getrusage>(2) and B<time>(2)). In kernels up "
2996 "to 2.6, and since 2.6.27, these fields report CPU time in units of "
2997 "I<sysconf(_SC_CLK_TCK)>. In 2.6 kernels before 2.6.27, a bug meant that "
2998 "these fields reported time in units of the (configurable) system jiffy (see "
3002 #. FIXME SIGTRAP also sets the following for ptrace_notify() ?
3003 #. info.si_code = exit_code;
3004 #. info.si_pid = task_pid_vnr(current);
3005 #. info.si_uid = current_uid(); /* Real UID */
3007 #: build/C/man2/sigaction.2:423
3009 "B<SIGILL>, B<SIGFPE>, B<SIGSEGV>, B<SIGBUS>, and B<SIGTRAP> fill in "
3010 "I<si_addr> with the address of the fault. On some architectures, these "
3011 "signals also fill in the I<si_trapno> filed. Some suberrors of B<SIGBUS>, "
3012 "in particular B<BUS_MCEERR_AO> and B<BUS_MCEERR_AR>, also fill in "
3013 "I<si_addr_lsb>. This field indicates the least significant bit of the "
3014 "reported address and therefore the extent of the corruption. For example, "
3015 "if a full page was corrupted, I<si_addr_lsb> contains "
3016 "I<log2(sysconf(_SC_PAGESIZE))>. B<BUS_MCERR_*> and I<si_addr_lsb> are "
3017 "Linux-specific extensions."
3021 #: build/C/man2/sigaction.2:436
3023 "B<SIGPOLL>/B<SIGIO> fills in I<si_band> and I<si_fd>. The I<si_band> event "
3024 "is a bit mask containing the same values as are filled in the I<revents> "
3025 "field by B<poll>(2). The I<si_fd> field indicates the file descriptor for "
3026 "which the I/O event occurred."
3030 #: build/C/man2/sigaction.2:443
3032 "I<si_code> is a value (not a bit mask) indicating why this signal was "
3033 "sent. The following list shows the values which can be placed in I<si_code> "
3034 "for any signal, along with reason that the signal was generated."
3038 #: build/C/man2/sigaction.2:444
3044 #: build/C/man2/sigaction.2:449
3045 msgid "B<kill>(2) or B<raise>(3)"
3049 #: build/C/man2/sigaction.2:449
3051 msgid "B<SI_KERNEL>"
3055 #: build/C/man2/sigaction.2:452
3056 msgid "Sent by the kernel."
3060 #: build/C/man2/sigaction.2:452
3066 #: build/C/man2/sigaction.2:455 build/C/man7/signal.7:126
3068 msgid "B<sigqueue>(3)"
3072 #: build/C/man2/sigaction.2:455
3078 #: build/C/man2/sigaction.2:458
3079 msgid "POSIX timer expired"
3083 #: build/C/man2/sigaction.2:458
3089 #: build/C/man2/sigaction.2:462
3090 msgid "POSIX message queue state changed (since Linux 2.6.6); see B<mq_notify>(3)"
3094 #: build/C/man2/sigaction.2:462
3096 msgid "B<SI_ASYNCIO>"
3100 #: build/C/man2/sigaction.2:465
3101 msgid "AIO completed"
3105 #: build/C/man2/sigaction.2:465
3111 #: build/C/man2/sigaction.2:468
3112 msgid "queued SIGIO"
3116 #: build/C/man2/sigaction.2:468
3121 #. SI_DETHREAD is defined in 2.6.9 sources, but isn't implemented
3122 #. It appears to have been an idea that was tried during 2.5.6
3123 #. through to 2.5.24 and then was backed out.
3125 #: build/C/man2/sigaction.2:477
3126 msgid "B<tkill>(2) or B<tgkill>(2) (since Linux 2.4.19)"
3130 #: build/C/man2/sigaction.2:484
3131 msgid "The following values can be placed in I<si_code> for a B<SIGILL> signal:"
3135 #: build/C/man2/sigaction.2:485
3137 msgid "B<ILL_ILLOPC>"
3141 #: build/C/man2/sigaction.2:488
3142 msgid "illegal opcode"
3146 #: build/C/man2/sigaction.2:488
3148 msgid "B<ILL_ILLOPN>"
3152 #: build/C/man2/sigaction.2:491
3153 msgid "illegal operand"
3157 #: build/C/man2/sigaction.2:491
3159 msgid "B<ILL_ILLADR>"
3163 #: build/C/man2/sigaction.2:494
3164 msgid "illegal addressing mode"
3168 #: build/C/man2/sigaction.2:494
3170 msgid "B<ILL_ILLTRP>"
3174 #: build/C/man2/sigaction.2:497
3175 msgid "illegal trap"
3179 #: build/C/man2/sigaction.2:497
3181 msgid "B<ILL_PRVOPC>"
3185 #: build/C/man2/sigaction.2:500
3186 msgid "privileged opcode"
3190 #: build/C/man2/sigaction.2:500
3192 msgid "B<ILL_PRVREG>"
3196 #: build/C/man2/sigaction.2:503
3197 msgid "privileged register"
3201 #: build/C/man2/sigaction.2:503
3203 msgid "B<ILL_COPROC>"
3207 #: build/C/man2/sigaction.2:506
3208 msgid "coprocessor error"
3212 #: build/C/man2/sigaction.2:506
3214 msgid "B<ILL_BADSTK>"
3218 #: build/C/man2/sigaction.2:509
3219 msgid "internal stack error"
3223 #: build/C/man2/sigaction.2:516
3224 msgid "The following values can be placed in I<si_code> for a B<SIGFPE> signal:"
3228 #: build/C/man2/sigaction.2:517
3230 msgid "B<FPE_INTDIV>"
3234 #: build/C/man2/sigaction.2:520
3235 msgid "integer divide by zero"
3239 #: build/C/man2/sigaction.2:520
3241 msgid "B<FPE_INTOVF>"
3245 #: build/C/man2/sigaction.2:523
3246 msgid "integer overflow"
3250 #: build/C/man2/sigaction.2:523
3252 msgid "B<FPE_FLTDIV>"
3256 #: build/C/man2/sigaction.2:526
3257 msgid "floating-point divide by zero"
3261 #: build/C/man2/sigaction.2:526
3263 msgid "B<FPE_FLTOVF>"
3267 #: build/C/man2/sigaction.2:529
3268 msgid "floating-point overflow"
3272 #: build/C/man2/sigaction.2:529
3274 msgid "B<FPE_FLTUND>"
3278 #: build/C/man2/sigaction.2:532
3279 msgid "floating-point underflow"
3283 #: build/C/man2/sigaction.2:532
3285 msgid "B<FPE_FLTRES>"
3289 #: build/C/man2/sigaction.2:535
3290 msgid "floating-point inexact result"
3294 #: build/C/man2/sigaction.2:535
3296 msgid "B<FPE_FLTINV>"
3300 #: build/C/man2/sigaction.2:538
3301 msgid "floating-point invalid operation"
3305 #: build/C/man2/sigaction.2:538
3307 msgid "B<FPE_FLTSUB>"
3311 #: build/C/man2/sigaction.2:541
3312 msgid "subscript out of range"
3316 #: build/C/man2/sigaction.2:548
3317 msgid "The following values can be placed in I<si_code> for a B<SIGSEGV> signal:"
3321 #: build/C/man2/sigaction.2:549
3323 msgid "B<SEGV_MAPERR>"
3327 #: build/C/man2/sigaction.2:552
3328 msgid "address not mapped to object"
3332 #: build/C/man2/sigaction.2:552
3334 msgid "B<SEGV_ACCERR>"
3338 #: build/C/man2/sigaction.2:555
3339 msgid "invalid permissions for mapped object"
3343 #: build/C/man2/sigaction.2:562
3344 msgid "The following values can be placed in I<si_code> for a B<SIGBUS> signal:"
3348 #: build/C/man2/sigaction.2:563
3350 msgid "B<BUS_ADRALN>"
3354 #: build/C/man2/sigaction.2:566
3355 msgid "invalid address alignment"
3359 #: build/C/man2/sigaction.2:566
3361 msgid "B<BUS_ADRERR>"
3365 #: build/C/man2/sigaction.2:569
3366 msgid "nonexistent physical address"
3370 #: build/C/man2/sigaction.2:569
3372 msgid "B<BUS_OBJERR>"
3376 #: build/C/man2/sigaction.2:572
3377 msgid "object-specific hardware error"
3381 #: build/C/man2/sigaction.2:572
3383 msgid "B<BUS_MCEERR_AR> (since Linux 2.6.32)"
3387 #: build/C/man2/sigaction.2:575
3388 msgid "Hardware memory error consumed on a machine check; action required."
3392 #: build/C/man2/sigaction.2:575
3394 msgid "B<BUS_MCEERR_AO> (since Linux 2.6.32)"
3398 #: build/C/man2/sigaction.2:578
3399 msgid "Hardware memory error detected in process but not consumed; action optional."
3403 #: build/C/man2/sigaction.2:585
3404 msgid "The following values can be placed in I<si_code> for a B<SIGTRAP> signal:"
3408 #: build/C/man2/sigaction.2:586
3410 msgid "B<TRAP_BRKPT>"
3414 #: build/C/man2/sigaction.2:589
3415 msgid "process breakpoint"
3419 #: build/C/man2/sigaction.2:589
3421 msgid "B<TRAP_TRACE>"
3425 #: build/C/man2/sigaction.2:592
3426 msgid "process trace trap"
3430 #: build/C/man2/sigaction.2:592
3432 msgid "B<TRAP_BRANCH> (since Linux 2.4)"
3436 #: build/C/man2/sigaction.2:595
3437 msgid "process taken branch trap"
3441 #: build/C/man2/sigaction.2:595
3443 msgid "B<TRAP_HWBKPT> (since Linux 2.4)"
3447 #: build/C/man2/sigaction.2:598
3448 msgid "hardware breakpoint/watchpoint"
3452 #: build/C/man2/sigaction.2:605
3453 msgid "The following values can be placed in I<si_code> for a B<SIGCHLD> signal:"
3457 #: build/C/man2/sigaction.2:606
3459 msgid "B<CLD_EXITED>"
3463 #: build/C/man2/sigaction.2:609
3464 msgid "child has exited"
3468 #: build/C/man2/sigaction.2:609
3470 msgid "B<CLD_KILLED>"
3474 #: build/C/man2/sigaction.2:612
3475 msgid "child was killed"
3479 #: build/C/man2/sigaction.2:612
3481 msgid "B<CLD_DUMPED>"
3485 #: build/C/man2/sigaction.2:615
3486 msgid "child terminated abnormally"
3490 #: build/C/man2/sigaction.2:615
3492 msgid "B<CLD_TRAPPED>"
3496 #: build/C/man2/sigaction.2:618
3497 msgid "traced child has trapped"
3501 #: build/C/man2/sigaction.2:618
3503 msgid "B<CLD_STOPPED>"
3507 #: build/C/man2/sigaction.2:621
3508 msgid "child has stopped"
3512 #: build/C/man2/sigaction.2:621
3514 msgid "B<CLD_CONTINUED>"
3518 #: build/C/man2/sigaction.2:624
3519 msgid "stopped child has continued (since Linux 2.6.9)"
3523 #: build/C/man2/sigaction.2:631
3524 msgid "The following values can be placed in I<si_code> for a B<SIGPOLL> signal:"
3528 #: build/C/man2/sigaction.2:632
3534 #: build/C/man2/sigaction.2:635
3535 msgid "data input available"
3539 #: build/C/man2/sigaction.2:635
3545 #: build/C/man2/sigaction.2:638
3546 msgid "output buffers available"
3550 #: build/C/man2/sigaction.2:638
3556 #: build/C/man2/sigaction.2:641
3557 msgid "input message available"
3561 #: build/C/man2/sigaction.2:641
3567 #: build/C/man2/sigaction.2:644
3572 #: build/C/man2/sigaction.2:644
3578 #: build/C/man2/sigaction.2:647
3579 msgid "high priority input available"
3583 #: build/C/man2/sigaction.2:647
3589 #: build/C/man2/sigaction.2:650
3590 msgid "device disconnected"
3594 #: build/C/man2/sigaction.2:654
3595 msgid "B<sigaction>() returns 0 on success and -1 on error."
3599 #: build/C/man2/sigaction.2:659
3601 "I<act> or I<oldact> points to memory which is not a valid part of the "
3602 "process address space."
3606 #: build/C/man2/sigaction.2:666
3608 "An invalid signal was specified. This will also be generated if an attempt "
3609 "is made to change the action for B<SIGKILL> or B<SIGSTOP>, which cannot be "
3610 "caught or ignored."
3613 #. SVr4 does not document the EINTR condition.
3615 #: build/C/man2/sigaction.2:669
3616 msgid "POSIX.1-2001, SVr4."
3620 #: build/C/man2/sigaction.2:677 build/C/man7/signal.7:103
3622 "A child created via B<fork>(2) inherits a copy of its parent's signal "
3623 "dispositions. During an B<execve>(2), the dispositions of handled signals "
3624 "are reset to the default; the dispositions of ignored signals are left "
3629 #: build/C/man2/sigaction.2:695 build/C/man2/signal.2:129
3631 "According to POSIX, the behavior of a process is undefined after it ignores "
3632 "a B<SIGFPE>, B<SIGILL>, or B<SIGSEGV> signal that was not generated by "
3633 "B<kill>(2) or B<raise>(3). Integer division by zero has undefined result. "
3634 "On some architectures it will generate a B<SIGFPE> signal. (Also dividing "
3635 "the most negative integer by -1 may generate B<SIGFPE>.) Ignoring this "
3636 "signal might lead to an endless loop."
3640 #: build/C/man2/sigaction.2:712
3642 "POSIX.1-1990 disallowed setting the action for B<SIGCHLD> to B<SIG_IGN>. "
3643 "POSIX.1-2001 allows this possibility, so that ignoring B<SIGCHLD> can be "
3644 "used to prevent the creation of zombies (see B<wait>(2)). Nevertheless, the "
3645 "historical BSD and System V behaviors for ignoring B<SIGCHLD> differ, so "
3646 "that the only completely portable method of ensuring that terminated "
3647 "children do not become zombies is to catch the B<SIGCHLD> signal and perform "
3648 "a B<wait>(2) or similar."
3652 #: build/C/man2/sigaction.2:725
3654 "POSIX.1-1990 only specified B<SA_NOCLDSTOP>. POSIX.1-2001 added "
3655 "B<SA_NOCLDWAIT>, B<SA_RESETHAND>, B<SA_NODEFER>, and B<SA_SIGINFO>. Use of "
3656 "these latter values in I<sa_flags> may be less portable in applications "
3657 "intended for older UNIX implementations."
3661 #: build/C/man2/sigaction.2:729
3662 msgid "The B<SA_RESETHAND> flag is compatible with the SVr4 flag of the same name."
3666 #: build/C/man2/sigaction.2:739
3668 "The B<SA_NODEFER> flag is compatible with the SVr4 flag of the same name "
3669 "under kernels 1.3.9 and newer. On older kernels the Linux implementation "
3670 "allowed the receipt of any signal, not just the one we are installing "
3671 "(effectively overriding any I<sa_mask> settings)."
3675 #: build/C/man2/sigaction.2:745
3677 "B<sigaction>() can be called with a NULL second argument to query the "
3678 "current signal handler. It can also be used to check whether a given signal "
3679 "is valid for the current machine by calling it with NULL second and third "
3684 #: build/C/man2/sigaction.2:751
3686 "It is not possible to block B<SIGKILL> or B<SIGSTOP> (by specifying them in "
3687 "I<sa_mask>). Attempts to do so are silently ignored."
3691 #: build/C/man2/sigaction.2:755 build/C/man2/sigpending.2:65 build/C/man2/sigprocmask.2:131 build/C/man2/sigsuspend.2:104
3692 msgid "See B<sigsetops>(3) for details on manipulating signal sets."
3696 #: build/C/man2/sigaction.2:760
3698 "See B<signal>(7) for a list of the async-signal-safe functions that can be "
3699 "safely called inside from inside a signal handler."
3703 #: build/C/man2/sigaction.2:760
3705 msgid "Undocumented"
3709 #: build/C/man2/sigaction.2:770
3711 "Before the introduction of B<SA_SIGINFO> it was also possible to get some "
3712 "additional information, namely by using a I<sa_handler> with second argument "
3713 "of type I<struct sigcontext>. See the relevant kernel sources for details. "
3714 "This use is obsolete now."
3718 #: build/C/man2/sigaction.2:779
3720 "In kernels up to and including 2.6.13, specifying B<SA_NODEFER> in "
3721 "I<sa_flags> prevents not only the delivered signal from being masked during "
3722 "execution of the handler, but also the signals specified in I<sa_mask>. "
3723 "This bug was fixed in kernel 2.6.14."
3727 #: build/C/man2/sigaction.2:782
3728 msgid "See B<mprotect>(2)."
3732 #: build/C/man2/sigaction.2:801
3734 "B<kill>(1), B<kill>(2), B<killpg>(2), B<pause>(2), B<sigaltstack>(2), "
3735 "B<signal>(2), B<signalfd>(2), B<sigpending>(2), B<sigprocmask>(2), "
3736 "B<sigsuspend>(2), B<wait>(2), B<raise>(3), B<siginterrupt>(3), "
3737 "B<sigqueue>(3), B<sigsetops>(3), B<sigvec>(3), B<core>(5), B<signal>(7)"
3741 #: build/C/man2/sigaltstack.2:25
3747 #: build/C/man2/sigaltstack.2:25 build/C/man2/wait.2:50
3753 #: build/C/man2/sigaltstack.2:28
3754 msgid "sigaltstack - set and/or get signal stack context"
3758 #: build/C/man2/sigaltstack.2:32
3759 msgid "B<int sigaltstack(const stack_t *>I<ss>B<, stack_t *>I<oss>B<);>"
3763 #: build/C/man2/sigaltstack.2:39
3764 msgid "B<sigaltstack>():"
3768 #: build/C/man2/sigaltstack.2:46 build/C/man3/siginterrupt.3:51 build/C/man2/wait.2:79
3769 msgid "|| /* Since glibc 2.12: */ _POSIX_C_SOURCE\\ E<gt>=\\ 200809L"
3773 #: build/C/man2/sigaltstack.2:58
3775 "B<sigaltstack>() allows a process to define a new alternate signal stack "
3776 "and/or retrieve the state of an existing alternate signal stack. An "
3777 "alternate signal stack is used during the execution of a signal handler if "
3778 "the establishment of that handler (see B<sigaction>(2)) requested it."
3782 #: build/C/man2/sigaltstack.2:61
3784 "The normal sequence of events for using an alternate signal stack is the "
3789 #: build/C/man2/sigaltstack.2:61 build/C/man7/signal.7:383
3795 #: build/C/man2/sigaltstack.2:65
3796 msgid "Allocate an area of memory to be used for the alternate signal stack."
3800 #: build/C/man2/sigaltstack.2:65 build/C/man7/signal.7:387
3806 #: build/C/man2/sigaltstack.2:71
3808 "Use B<sigaltstack>() to inform the system of the existence and location of "
3809 "the alternate signal stack."
3813 #: build/C/man2/sigaltstack.2:71 build/C/man7/signal.7:407
3819 #: build/C/man2/sigaltstack.2:78
3821 "When establishing a signal handler using B<sigaction>(2), inform the system "
3822 "that the signal handler should be executed on the alternate signal stack by "
3823 "specifying the B<SA_ONSTACK> flag."
3827 #: build/C/man2/sigaltstack.2:86
3829 "The I<ss> argument is used to specify a new alternate signal stack, while "
3830 "the I<oss> argument is used to retrieve information about the currently "
3831 "established signal stack. If we are interested in performing just one of "
3832 "these tasks then the other argument can be specified as NULL. Each of these "
3833 "arguments is a structure of the following type:"
3837 #: build/C/man2/sigaltstack.2:94
3840 "typedef struct {\n"
3841 " void *ss_sp; /* Base address of stack */\n"
3842 " int ss_flags; /* Flags */\n"
3843 " size_t ss_size; /* Number of bytes in stack */\n"
3848 #: build/C/man2/sigaltstack.2:105
3850 "To establish a new alternate signal stack, I<ss.ss_flags> is set to zero, "
3851 "and I<ss.ss_sp> and I<ss.ss_size> specify the starting address and size of "
3852 "the stack. The constant B<SIGSTKSZ> is defined to be large enough to cover "
3853 "the usual size requirements for an alternate signal stack, and the constant "
3854 "B<MINSIGSTKSZ> defines the minimum size required to execute a signal "
3859 #: build/C/man2/sigaltstack.2:109
3861 "When a signal handler is invoked on the alternate stack, the kernel "
3862 "automatically aligns the address given in I<ss.ss_sp> to a suitable address "
3863 "boundary for the underlying hardware architecture."
3867 #: build/C/man2/sigaltstack.2:114
3869 "To disable an existing stack, specify I<ss.ss_flags> as B<SS_DISABLE>. In "
3870 "this case, the remaining fields in I<ss> are ignored."
3874 #: build/C/man2/sigaltstack.2:122
3876 "If I<oss> is not NULL, then it is used to return information about the "
3877 "alternate signal stack which was in effect prior to the call to "
3878 "B<sigaltstack>(). The I<oss.ss_sp> and I<oss.ss_size> fields return the "
3879 "starting address and size of that stack. The I<oss.ss_flags> may return "
3880 "either of the following values:"
3884 #: build/C/man2/sigaltstack.2:122
3886 msgid "B<SS_ONSTACK>"
3890 #: build/C/man2/sigaltstack.2:128
3892 "The process is currently executing on the alternate signal stack. (Note "
3893 "that it is not possible to change the alternate signal stack if the process "
3894 "is currently executing on it.)"
3898 #: build/C/man2/sigaltstack.2:128
3900 msgid "B<SS_DISABLE>"
3904 #: build/C/man2/sigaltstack.2:131
3905 msgid "The alternate signal stack is currently disabled."
3909 #: build/C/man2/sigaltstack.2:135
3911 "B<sigaltstack>() returns 0 on success, or -1 on failure with I<errno> set "
3912 "to indicate the error."
3916 #: build/C/man2/sigaltstack.2:140
3918 "Either I<ss> or I<oss> is not NULL and points to an area outside of the "
3919 "process's address space."
3923 #: build/C/man2/sigaltstack.2:145
3925 "I<ss> is not NULL and the I<ss_flags> field contains a nonzero value other "
3926 "than B<SS_DISABLE>."
3930 #: build/C/man2/sigaltstack.2:149
3932 "The specified size of the new alternate signal stack (I<ss.ss_size>) was "
3933 "less than B<MINSTKSZ>."
3937 #: build/C/man2/sigaltstack.2:154
3939 "An attempt was made to change the alternate signal stack while it was active "
3940 "(i.e., the process was already executing on the current alternate signal "
3945 #: build/C/man2/sigaltstack.2:156
3946 msgid "SUSv2, SVr4, POSIX.1-2001."
3950 #: build/C/man2/sigaltstack.2:164
3952 "The most common usage of an alternate signal stack is to handle the "
3953 "B<SIGSEGV> signal that is generated if the space available for the normal "
3954 "process stack is exhausted: in this case, a signal handler for B<SIGSEGV> "
3955 "cannot be invoked on the process stack; if we wish to handle it, we must use "
3956 "an alternate signal stack."
3960 #: build/C/man2/sigaltstack.2:174
3962 "Establishing an alternate signal stack is useful if a process expects that "
3963 "it may exhaust its standard stack. This may occur, for example, because the "
3964 "stack grows so large that it encounters the upwardly growing heap, or it "
3965 "reaches a limit established by a call to B<setrlimit(RLIMIT_STACK, &rlim)>. "
3966 "If the standard stack is exhausted, the kernel sends the process a "
3967 "B<SIGSEGV> signal. In these circumstances the only way to catch this signal "
3968 "is on an alternate signal stack."
3972 #: build/C/man2/sigaltstack.2:180
3974 "On most hardware architectures supported by Linux, stacks grow downward. "
3975 "B<sigaltstack>() automatically takes account of the direction of stack "
3980 #: build/C/man2/sigaltstack.2:189
3982 "Functions called from a signal handler executing on an alternate signal "
3983 "stack will also use the alternate signal stack. (This also applies to any "
3984 "handlers invoked for other signals while the process is executing on the "
3985 "alternate signal stack.) Unlike the standard stack, the system does not "
3986 "automatically extend the alternate signal stack. Exceeding the allocated "
3987 "size of the alternate signal stack will lead to unpredictable results."
3991 #: build/C/man2/sigaltstack.2:197
3993 "A successful call to B<execve>(2) removes any existing alternate signal "
3994 "stack. A child process created via B<fork>(2) inherits a copy of its "
3995 "parent's alternate signal stack settings."
3999 #: build/C/man2/sigaltstack.2:206
4001 "B<sigaltstack>() supersedes the older B<sigstack>() call. For backward "
4002 "compatibility, glibc also provides B<sigstack>(). All new applications "
4003 "should be written using B<sigaltstack>()."
4007 #: build/C/man2/sigaltstack.2:206 build/C/man3/sigpause.3:59
4013 #: build/C/man2/sigaltstack.2:213
4015 "4.2BSD had a B<sigstack>() system call. It used a slightly different "
4016 "struct, and had the major disadvantage that the caller had to know the "
4017 "direction of stack growth."
4021 #: build/C/man2/sigaltstack.2:216
4022 msgid "The following code segment demonstrates the use of B<sigaltstack>():"
4026 #: build/C/man2/sigaltstack.2:220
4028 msgid "stack_t ss;\n"
4032 #: build/C/man2/sigaltstack.2:228
4035 "ss.ss_sp = malloc(SIGSTKSZ);\n"
4036 "if (ss.ss_sp == NULL)\n"
4037 " /* Handle error */;\n"
4038 "ss.ss_size = SIGSTKSZ;\n"
4039 "ss.ss_flags = 0;\n"
4040 "if (sigaltstack(&ss, NULL) == -1)\n"
4041 " /* Handle error */;\n"
4045 #: build/C/man2/sigaltstack.2:237
4047 "B<execve>(2), B<setrlimit>(2), B<sigaction>(2), B<siglongjmp>(3), "
4048 "B<sigsetjmp>(3), B<signal>(7)"
4052 #: build/C/man7/sigevent.7:24
4058 #: build/C/man7/sigevent.7:24 build/C/man3/siginterrupt.3:29
4064 #: build/C/man7/sigevent.7:27
4065 msgid "sigevent - structure for notification from asynchronous routines"
4069 #: build/C/man7/sigevent.7:34
4072 "union sigval { /* Data passed with notification */\n"
4073 " int sival_int; /* Integer value */\n"
4074 " void *sival_ptr; /* Pointer value */\n"
4079 #: build/C/man7/sigevent.7:49
4082 "struct sigevent {\n"
4083 " int sigev_notify; /* Notification method */\n"
4084 " int sigev_signo; /* Notification signal */\n"
4085 " union sigval sigev_value; /* Data passed with\n"
4086 " notification */\n"
4087 " void (*sigev_notify_function) (union sigval);\n"
4088 " /* Function used for thread\n"
4089 " notification (SIGEV_THREAD) */\n"
4090 " void *sigev_notify_attributes;\n"
4091 " /* Attributes for notification thread\n"
4092 " (SIGEV_THREAD) */\n"
4093 " pid_t sigev_notify_thread_id;\n"
4094 " /* ID of thread to signal (SIGEV_THREAD_ID) */\n"
4099 #: build/C/man7/sigevent.7:58
4101 "The I<sigevent> structure is used by various APIs to describe the way a "
4102 "process is to be notified about an event (e.g., completion of an "
4103 "asynchronous request, expiration of a timer, or the arrival of a message)."
4107 #: build/C/man7/sigevent.7:66
4109 "The definition shown in the SYNOPSIS is approximate: some of the fields in "
4110 "the I<sigevent> structure may be defined as part of a union. Programs "
4111 "should only employ those fields relevant to the value specified in "
4116 #: build/C/man7/sigevent.7:71
4118 "The I<sigev_notify> field specifies how notification is to be performed. "
4119 "This field can have one of the following values:"
4123 #: build/C/man7/sigevent.7:71 build/C/man2/timer_create.2:105
4125 msgid "B<SIGEV_NONE>"
4129 #: build/C/man7/sigevent.7:74
4130 msgid "A \"null\" notification: don't do anything when the event occurs."
4134 #: build/C/man7/sigevent.7:74 build/C/man2/timer_create.2:110
4136 msgid "B<SIGEV_SIGNAL>"
4140 #: build/C/man7/sigevent.7:78
4141 msgid "Notify the process by sending the signal specified in I<sigev_signo>."
4145 #: build/C/man7/sigevent.7:85
4147 "If the signal is caught with a signal handler that was registered using the "
4148 "B<sigaction>(2) B<SA_SIGINFO> flag, then the following fields are set in "
4149 "the I<siginfo_t> structure that is passed as the second argument of the "
4154 #: build/C/man7/sigevent.7:90
4156 "This field is set to a value that depends on the API delivering the "
4161 #: build/C/man7/sigevent.7:90 build/C/man2/wait.2:301
4167 #: build/C/man7/sigevent.7:94
4169 "This field is set to the signal number (i.e., the same value as in "
4174 #: build/C/man7/sigevent.7:98
4175 msgid "This field is set to the value specified in I<sigev_value>."
4179 #: build/C/man7/sigevent.7:103
4181 "Depending on the API, other fields may also be set in the I<siginfo_t> "
4186 #: build/C/man7/sigevent.7:106
4188 "The same information is also available if the signal is accepted using "
4189 "B<sigwaitinfo>(2)."
4193 #: build/C/man7/sigevent.7:106 build/C/man2/timer_create.2:128
4195 msgid "B<SIGEV_THREAD>"
4199 #: build/C/man7/sigevent.7:123
4201 "Notify the process by invoking I<sigev_notify_function> \"as if\" it were "
4202 "the start function of a new thread. (Among the implementation possibilities "
4203 "here are that each timer notification could result in the creation of a new "
4204 "thread, or that a single thread is created to receive all notifications.) "
4205 "The function is invoked with I<sigev_value> as its sole argument. If "
4206 "I<sigev_notify_attributes> is not NULL, it should point to a "
4207 "I<pthread_attr_t> structure that defines attributes for the new thread (see "
4208 "B<pthread_attr_init>(3))."
4212 #: build/C/man7/sigevent.7:123 build/C/man2/timer_create.2:136
4214 msgid "B<SIGEV_THREAD_ID> (Linux-specific)"
4217 #. | SIGEV_SIGNAL vs not?
4219 #: build/C/man7/sigevent.7:128
4220 msgid "Currently used only by POSIX timers; see B<timer_create>(2)."
4224 #: build/C/man7/sigevent.7:130 build/C/man2/sigpending.2:61 build/C/man2/sigprocmask.2:101 build/C/man3/sigqueue.3:114 build/C/man3/sigsetops.3:128 build/C/man2/sigsuspend.2:82 build/C/man3/sigwait.3:79 build/C/man2/sigwaitinfo.2:128 build/C/man2/timer_create.2:193 build/C/man2/timer_delete.2:66 build/C/man2/timer_getoverrun.2:96 build/C/man2/timer_settime.2:205
4225 msgid "POSIX.1-2001."
4229 #: build/C/man7/sigevent.7:140
4231 "B<timer_create>(2), B<aio_fsync>(3), B<aio_read>(3), B<aio_write>(3), "
4232 "B<getaddrinfo_a>(3), B<lio_listio>(3), B<mq_notify>(3), B<aio>(7), "
4237 #: build/C/man3/siginterrupt.3:29
4239 msgid "SIGINTERRUPT"
4243 #: build/C/man3/siginterrupt.3:32
4244 msgid "siginterrupt - allow signals to interrupt system calls"
4248 #: build/C/man3/siginterrupt.3:37
4250 msgid "B<int siginterrupt(int >I<sig>B<, int >I<flag>B<);>\n"
4254 #: build/C/man3/siginterrupt.3:45
4255 msgid "B<siginterrupt>():"
4259 #: build/C/man3/siginterrupt.3:62
4261 "The B<siginterrupt>() function changes the restart behavior when a system "
4262 "call is interrupted by the signal I<sig>. If the I<flag> argument is false "
4263 "(0), then system calls will be restarted if interrupted by the specified "
4264 "signal I<sig>. This is the default behavior in Linux."
4268 #: build/C/man3/siginterrupt.3:67
4270 "If the I<flag> argument is true (1) and no data has been transferred, then a "
4271 "system call interrupted by the signal I<sig> will return -1 and I<errno> "
4272 "will be set to B<EINTR>."
4276 #: build/C/man3/siginterrupt.3:71
4278 "If the I<flag> argument is true (1) and data transfer has started, then the "
4279 "system call will be interrupted and will return the actual amount of data "
4284 #: build/C/man3/siginterrupt.3:76
4286 "The B<siginterrupt>() function returns 0 on success, or -1 if the signal "
4287 "number I<sig> is invalid."
4291 #: build/C/man3/siginterrupt.3:80
4292 msgid "The specified signal number is invalid."
4296 #: build/C/man3/siginterrupt.3:89
4298 "4.3BSD, POSIX.1-2001. POSIX.1-2008 marks B<siginterrupt>() as obsolete, "
4299 "recommending the use of B<sigaction>(2) with the B<SA_RESTART> flag "
4304 #: build/C/man3/siginterrupt.3:91
4305 msgid "B<signal>(2)"
4309 #: build/C/man2/signal.2:34 build/C/man7/signal.7:44
4315 #: build/C/man2/signal.2:34
4321 #: build/C/man2/signal.2:37
4322 msgid "signal - ANSI C signal handling"
4326 #: build/C/man2/signal.2:43
4327 msgid "B<sighandler_t signal(int >I<signum>B<, sighandler_t >I<handler>B<);>"
4331 #: build/C/man2/signal.2:52
4333 "The behavior of B<signal>() varies across UNIX versions, and has also "
4334 "varied historically across different versions of Linux. B<Avoid its use>: "
4335 "use B<sigaction>(2) instead. See I<Portability> below."
4339 #: build/C/man2/signal.2:62
4341 "B<signal>() sets the disposition of the signal I<signum> to I<handler>, "
4342 "which is either B<SIG_IGN>, B<SIG_DFL>, or the address of a "
4343 "programmer-defined function (a \"signal handler\")."
4347 #: build/C/man2/signal.2:66
4349 "If the signal I<signum> is delivered to the process, then one of the "
4350 "following happens:"
4354 #: build/C/man2/signal.2:71
4355 msgid "If the disposition is set to B<SIG_IGN>, then the signal is ignored."
4359 #: build/C/man2/signal.2:78
4361 "If the disposition is set to B<SIG_DFL>, then the default action associated "
4362 "with the signal (see B<signal>(7)) occurs."
4366 #: build/C/man2/signal.2:89
4368 "If the disposition is set to a function, then first either the disposition "
4369 "is reset to B<SIG_DFL>, or the signal is blocked (see I<Portability> below), "
4370 "and then I<handler> is called with argument I<signum>. If invocation of the "
4371 "handler caused the signal to be blocked, then the signal is unblocked upon "
4372 "return from the handler."
4376 #: build/C/man2/signal.2:95
4377 msgid "The signals B<SIGKILL> and B<SIGSTOP> cannot be caught or ignored."
4381 #: build/C/man2/signal.2:100
4383 "B<signal>() returns the previous value of the signal handler, or B<SIG_ERR> "
4388 #: build/C/man2/signal.2:105
4389 msgid "I<signum> is invalid."
4393 #: build/C/man2/signal.2:111
4394 msgid "The effects of B<signal>() in a multithreaded process are unspecified."
4398 #: build/C/man2/signal.2:136
4400 "See B<sigaction>(2) for details on what happens when B<SIGCHLD> is set to "
4405 #: build/C/man2/signal.2:141
4407 "See B<signal>(7) for a list of the async-signal-safe functions that can be "
4408 "safely called from inside a signal handler."
4412 #: build/C/man2/signal.2:156
4414 "The use of I<sighandler_t> is a GNU extension. Various versions of libc "
4415 "predefine this type; libc4 and libc5 define I<SignalHandler>; glibc defines "
4416 "I<sig_t> and, when B<_GNU_SOURCE> is defined, also I<sighandler_t>. Without "
4417 "use of such a type, the declaration of B<signal>() is the somewhat harder "
4422 #: build/C/man2/signal.2:160
4425 "B<void ( *>I<signal>B<(int >I<signum>B<, void (*>I<handler>B<)(int)) ) "
4430 #: build/C/man2/signal.2:162
4436 #: build/C/man2/signal.2:174
4438 "The only portable use of B<signal>() is to set a signal's disposition to "
4439 "B<SIG_DFL> or B<SIG_IGN>. The semantics when using B<signal>() to "
4440 "establish a signal handler vary across systems (and POSIX.1 explicitly "
4441 "permits this variation); B<do not use it for this purpose.>"
4445 #: build/C/man2/signal.2:180
4447 "POSIX.1 solved the portability mess by specifying B<sigaction>(2), which "
4448 "provides explicit control of the semantics when a signal handler is invoked; "
4449 "use that interface instead of B<signal>()."
4453 #: build/C/man2/signal.2:193
4455 "In the original UNIX systems, when a handler that was established using "
4456 "B<signal>() was invoked by the delivery of a signal, the disposition of the "
4457 "signal would be reset to B<SIG_DFL>, and the system did not block delivery "
4458 "of further instances of the signal. System V also provides these semantics "
4459 "for B<signal>(). This was bad because the signal might be delivered again "
4460 "before the handler had a chance to reestablish itself. Furthermore, rapid "
4461 "deliveries of the same signal could result in recursive invocations of the "
4466 #: build/C/man2/signal.2:203
4468 "BSD improved on this situation by changing the semantics of signal handling "
4469 "(but, unfortunately, silently changed the semantics when establishing a "
4470 "handler with B<signal>()). On BSD, when a signal handler is invoked, the "
4471 "signal disposition is not reset, and further instances of the signal are "
4472 "blocked from being delivered while the handler is executing."
4476 #: build/C/man2/signal.2:205
4477 msgid "The situation on Linux is as follows:"
4481 #: build/C/man2/signal.2:209
4482 msgid "The kernel's B<signal>() system call provides System V semantics."
4486 #: build/C/man2/signal.2:225
4488 "By default, in glibc 2 and later, the B<signal>() wrapper function does not "
4489 "invoke the kernel system call. Instead, it calls B<sigaction>(2) using "
4490 "flags that supply BSD semantics. This default behavior is provided as long "
4491 "as the B<_BSD_SOURCE> feature test macro is defined. By default, "
4492 "B<_BSD_SOURCE> is defined; it is also implicitly defined if one defines "
4493 "B<_GNU_SOURCE>, and can of course be explicitly defined."
4497 #. System V semantics are also provided if one uses the separate
4498 #. .BR sysv_signal (3)
4501 #: build/C/man2/signal.2:248
4503 "On glibc 2 and later, if the B<_BSD_SOURCE> feature test macro is not "
4504 "defined, then B<signal>() provides System V semantics. (The default "
4505 "implicit definition of B<_BSD_SOURCE> is not provided if one invokes "
4506 "B<gcc>(1) in one of its standard modes (I<-std=xxx> or I<-ansi>) or "
4507 "defines various other feature test macros such as B<_POSIX_SOURCE>, "
4508 "B<_XOPEN_SOURCE>, or B<_SVID_SOURCE>; see B<feature_test_macros>(7).)"
4512 #: build/C/man2/signal.2:259
4514 "The B<signal>() function in Linux libc4 and libc5 provide System V "
4515 "semantics. If one on a libc5 system includes I<E<lt>bsd/signal.hE<gt>> "
4516 "instead of I<E<lt>signal.hE<gt>>, then B<signal>() provides BSD semantics."
4520 #: build/C/man2/signal.2:278
4522 "B<kill>(1), B<alarm>(2), B<kill>(2), B<killpg>(2), B<pause>(2), "
4523 "B<sigaction>(2), B<signalfd>(2), B<sigpending>(2), B<sigprocmask>(2), "
4524 "B<sigsuspend>(2), B<bsd_signal>(3), B<raise>(3), B<siginterrupt>(3), "
4525 "B<sigqueue>(3), B<sigsetops>(3), B<sigvec>(3), B<sysv_signal>(3), "
4530 #: build/C/man7/signal.7:47
4531 msgid "signal - overview of signals"
4535 #: build/C/man7/signal.7:50
4537 "Linux supports both POSIX reliable signals (hereinafter \"standard "
4538 "signals\") and POSIX real-time signals."
4542 #: build/C/man7/signal.7:50
4544 msgid "Signal Dispositions"
4548 #: build/C/man7/signal.7:55
4550 "Each signal has a current I<disposition>, which determines how the process "
4551 "behaves when it is delivered the signal."
4555 #: build/C/man7/signal.7:58
4557 "The entries in the \"Action\" column of the tables below specify the default "
4558 "disposition for each signal, as follows:"
4562 #: build/C/man7/signal.7:58
4568 #: build/C/man7/signal.7:60
4569 msgid "Default action is to terminate the process."
4573 #: build/C/man7/signal.7:60
4579 #: build/C/man7/signal.7:62
4580 msgid "Default action is to ignore the signal."
4584 #: build/C/man7/signal.7:62
4590 #: build/C/man7/signal.7:65
4591 msgid "Default action is to terminate the process and dump core (see B<core>(5))."
4595 #: build/C/man7/signal.7:65
4601 #: build/C/man7/signal.7:67
4602 msgid "Default action is to stop the process."
4606 #: build/C/man7/signal.7:67
4612 #: build/C/man7/signal.7:69
4613 msgid "Default action is to continue the process if it is currently stopped."
4617 #: build/C/man7/signal.7:91
4619 "A process can change the disposition of a signal using B<sigaction>(2) or "
4620 "B<signal>(2). (The latter is less portable when establishing a signal "
4621 "handler; see B<signal>(2) for details.) Using these system calls, a "
4622 "process can elect one of the following behaviors to occur on delivery of the "
4623 "signal: perform the default action; ignore the signal; or catch the signal "
4624 "with a I<signal handler>, a programmer-defined function that is "
4625 "automatically invoked when the signal is delivered. (By default, the signal "
4626 "handler is invoked on the normal process stack. It is possible to arrange "
4627 "that the signal handler uses an alternate stack; see B<sigaltstack>(2) for "
4628 "a discussion of how to do this and when it might be useful.)"
4632 #: build/C/man7/signal.7:95
4634 "The signal disposition is a per-process attribute: in a multithreaded "
4635 "application, the disposition of a particular signal is the same for all "
4640 #: build/C/man7/signal.7:103
4642 msgid "Sending a Signal"
4646 #: build/C/man7/signal.7:106
4648 "The following system calls and library functions allow the caller to send a "
4653 #: build/C/man7/signal.7:106
4659 #: build/C/man7/signal.7:109
4660 msgid "Sends a signal to the calling thread."
4664 #: build/C/man7/signal.7:109
4670 #: build/C/man7/signal.7:114
4672 "Sends a signal to a specified process, to all members of a specified process "
4673 "group, or to all processes on the system."
4677 #: build/C/man7/signal.7:114
4679 msgid "B<killpg>(2)"
4683 #: build/C/man7/signal.7:117
4684 msgid "Sends a signal to all of the members of a specified process group."
4688 #: build/C/man7/signal.7:117
4690 msgid "B<pthread_kill>(3)"
4694 #: build/C/man7/signal.7:121
4696 "Sends a signal to a specified POSIX thread in the same process as the "
4701 #: build/C/man7/signal.7:121
4703 msgid "B<tgkill>(2)"
4707 #: build/C/man7/signal.7:126
4709 "Sends a signal to a specified thread within a specific process. (This is "
4710 "the system call used to implement B<pthread_kill>(3).)"
4714 #: build/C/man7/signal.7:129
4715 msgid "Sends a real-time signal with accompanying data to a specified process."
4719 #: build/C/man7/signal.7:129
4721 msgid "Waiting for a Signal to be Caught"
4725 #: build/C/man7/signal.7:133
4727 "The following system calls suspend execution of the calling process or "
4728 "thread until a signal is caught (or an unhandled signal terminates the "
4733 #: build/C/man7/signal.7:133
4739 #: build/C/man7/signal.7:136
4740 msgid "Suspends execution until any signal is caught."
4744 #: build/C/man7/signal.7:136
4746 msgid "B<sigsuspend>(2)"
4750 #: build/C/man7/signal.7:140
4752 "Temporarily changes the signal mask (see below) and suspends execution until "
4753 "one of the unmasked signals is caught."
4757 #: build/C/man7/signal.7:140
4759 msgid "Synchronously Accepting a Signal"
4763 #: build/C/man7/signal.7:147
4765 "Rather than asynchronously catching a signal via a signal handler, it is "
4766 "possible to synchronously accept the signal, that is, to block execution "
4767 "until the signal is delivered, at which point the kernel returns information "
4768 "about the signal to the caller. There are two general ways to do this:"
4772 #: build/C/man7/signal.7:155
4774 "B<sigwaitinfo>(2), B<sigtimedwait>(2), and B<sigwait>(3) suspend execution "
4775 "until one of the signals in a specified set is delivered. Each of these "
4776 "calls returns information about the delivered signal."
4780 #: build/C/man7/signal.7:168
4782 "B<signalfd>(2) returns a file descriptor that can be used to read "
4783 "information about signals that are delivered to the caller. Each B<read>(2) "
4784 "from this file descriptor blocks until one of the signals in the set "
4785 "specified in the B<signalfd>(2) call is delivered to the caller. The "
4786 "buffer returned by B<read>(2) contains a structure describing the signal."
4790 #: build/C/man7/signal.7:168
4792 msgid "Signal Mask and Pending Signals"
4796 #: build/C/man7/signal.7:175
4798 "A signal may be I<blocked>, which means that it will not be delivered until "
4799 "it is later unblocked. Between the time when it is generated and when it is "
4800 "delivered a signal is said to be I<pending>."
4804 #: build/C/man7/signal.7:184
4806 "Each thread in a process has an independent I<signal mask>, which indicates "
4807 "the set of signals that the thread is currently blocking. A thread can "
4808 "manipulate its signal mask using B<pthread_sigmask>(3). In a traditional "
4809 "single-threaded application, B<sigprocmask>(2) can be used to manipulate "
4814 #: build/C/man7/signal.7:190 build/C/man2/sigprocmask.2:113
4816 "A child created via B<fork>(2) inherits a copy of its parent's signal mask; "
4817 "the signal mask is preserved across B<execve>(2)."
4821 #: build/C/man7/signal.7:207
4823 "A signal may be generated (and thus pending) for a process as a whole "
4824 "(e.g., when sent using B<kill>(2)) or for a specific thread (e.g., certain "
4825 "signals, such as B<SIGSEGV> and B<SIGFPE>, generated as a consequence of "
4826 "executing a specific machine-language instruction are thread directed, as "
4827 "are signals targeted at a specific thread using B<pthread_kill>(3)). A "
4828 "process-directed signal may be delivered to any one of the threads that does "
4829 "not currently have the signal blocked. If more than one of the threads has "
4830 "the signal unblocked, then the kernel chooses an arbitrary thread to which "
4831 "to deliver the signal."
4835 #: build/C/man7/signal.7:214
4837 "A thread can obtain the set of signals that it currently has pending using "
4838 "B<sigpending>(2). This set will consist of the union of the set of pending "
4839 "process-directed signals and the set of signals pending for the calling "
4844 #: build/C/man7/signal.7:220 build/C/man2/sigpending.2:76
4846 "A child created via B<fork>(2) initially has an empty pending signal set; "
4847 "the pending signal set is preserved across an B<execve>(2)."
4851 #: build/C/man7/signal.7:220
4853 msgid "Standard Signals"
4856 #. parisc is a law unto itself
4858 #: build/C/man7/signal.7:230
4860 "Linux supports the standard signals listed below. Several signal numbers "
4861 "are architecture-dependent, as indicated in the \"Value\" column. (Where "
4862 "three values are given, the first one is usually valid for alpha and sparc, "
4863 "the middle one for ix86, ia64, ppc, s390, arm and sh, and the last one for "
4864 "mips. A - denotes that a signal is absent on the corresponding "
4869 #: build/C/man7/signal.7:232
4870 msgid "First the signals described in the original POSIX.1-1990 standard."
4874 #: build/C/man7/signal.7:236 build/C/man7/signal.7:272 build/C/man7/signal.7:301
4876 msgid "Signal\tValue\tAction\tComment\n"
4880 #: build/C/man7/signal.7:237
4882 msgid "SIGHUP\t\\01\tTerm\tHangup detected on controlling terminal\n"
4886 #: build/C/man7/signal.7:238
4888 msgid "\t\t\tor death of controlling process\n"
4892 #: build/C/man7/signal.7:239
4894 msgid "SIGINT\t\\02\tTerm\tInterrupt from keyboard\n"
4898 #: build/C/man7/signal.7:240
4900 msgid "SIGQUIT\t\\03\tCore\tQuit from keyboard\n"
4904 #: build/C/man7/signal.7:241
4906 msgid "SIGILL\t\\04\tCore\tIllegal Instruction\n"
4910 #: build/C/man7/signal.7:242
4912 msgid "SIGABRT\t\\06\tCore\tAbort signal from B<abort>(3)\n"
4916 #: build/C/man7/signal.7:243
4918 msgid "SIGFPE\t\\08\tCore\tFloating point exception\n"
4922 #: build/C/man7/signal.7:244
4924 msgid "SIGKILL\t\\09\tTerm\tKill signal\n"
4928 #: build/C/man7/signal.7:245
4930 msgid "SIGSEGV\t11\tCore\tInvalid memory reference\n"
4934 #: build/C/man7/signal.7:246
4936 msgid "SIGPIPE\t13\tTerm\tBroken pipe: write to pipe with no\n"
4940 #: build/C/man7/signal.7:247
4942 msgid "\t\t\treaders\n"
4946 #: build/C/man7/signal.7:248
4948 msgid "SIGALRM\t14\tTerm\tTimer signal from B<alarm>(2)\n"
4952 #: build/C/man7/signal.7:249
4954 msgid "SIGTERM\t15\tTerm\tTermination signal\n"
4958 #: build/C/man7/signal.7:250
4960 msgid "SIGUSR1\t30,10,16\tTerm\tUser-defined signal 1\n"
4964 #: build/C/man7/signal.7:251
4966 msgid "SIGUSR2\t31,12,17\tTerm\tUser-defined signal 2\n"
4970 #: build/C/man7/signal.7:252
4972 msgid "SIGCHLD\t20,17,18\tIgn\tChild stopped or terminated\n"
4976 #: build/C/man7/signal.7:253
4978 msgid "SIGCONT\t19,18,25\tCont\tContinue if stopped\n"
4982 #: build/C/man7/signal.7:254
4984 msgid "SIGSTOP\t17,19,23\tStop\tStop process\n"
4988 #: build/C/man7/signal.7:255
4990 msgid "SIGTSTP\t18,20,24\tStop\tStop typed at tty\n"
4994 #: build/C/man7/signal.7:256
4996 msgid "SIGTTIN\t21,21,26\tStop\ttty input for background process\n"
5000 #: build/C/man7/signal.7:257
5002 msgid "SIGTTOU\t22,22,27\tStop\ttty output for background process\n"
5006 #: build/C/man7/signal.7:265
5007 msgid "The signals B<SIGKILL> and B<SIGSTOP> cannot be caught, blocked, or ignored."
5011 #: build/C/man7/signal.7:268
5013 "Next the signals not in the POSIX.1-1990 standard but described in SUSv2 and "
5018 #: build/C/man7/signal.7:273
5020 msgid "SIGBUS\t10,7,10\tCore\tBus error (bad memory access)\n"
5024 #: build/C/man7/signal.7:274
5026 msgid "SIGPOLL\t\tTerm\tPollable event (Sys V).\n"
5030 #: build/C/man7/signal.7:275
5032 msgid "\t\t\tSynonym for B<SIGIO>\n"
5036 #: build/C/man7/signal.7:276
5038 msgid "SIGPROF\t27,27,29\tTerm\tProfiling timer expired\n"
5042 #: build/C/man7/signal.7:277
5044 msgid "SIGSYS\t12,31,12\tCore\tBad argument to routine (SVr4)\n"
5048 #: build/C/man7/signal.7:278
5050 msgid "SIGTRAP\t5\tCore\tTrace/breakpoint trap\n"
5054 #: build/C/man7/signal.7:279
5056 msgid "SIGURG\t16,23,21\tIgn\tUrgent condition on socket (4.2BSD)\n"
5060 #: build/C/man7/signal.7:280
5062 msgid "SIGVTALRM\t26,26,28\tTerm\tVirtual alarm clock (4.2BSD)\n"
5066 #: build/C/man7/signal.7:281
5068 msgid "SIGXCPU\t24,24,30\tCore\tCPU time limit exceeded (4.2BSD)\n"
5072 #: build/C/man7/signal.7:282
5074 msgid "SIGXFSZ\t25,25,31\tCore\tFile size limit exceeded (4.2BSD)\n"
5078 #: build/C/man7/signal.7:295
5080 "Up to and including Linux 2.2, the default behavior for B<SIGSYS>, "
5081 "B<SIGXCPU>, B<SIGXFSZ>, and (on architectures other than SPARC and MIPS) "
5082 "B<SIGBUS> was to terminate the process (without a core dump). (On some "
5083 "other UNIX systems the default action for B<SIGXCPU> and B<SIGXFSZ> is to "
5084 "terminate the process without a core dump.) Linux 2.4 conforms to the "
5085 "POSIX.1-2001 requirements for these signals, terminating the process with a "
5090 #: build/C/man7/signal.7:297
5091 msgid "Next various other signals."
5095 #: build/C/man7/signal.7:302
5097 msgid "SIGIOT\t6\tCore\tIOT trap. A synonym for B<SIGABRT>\n"
5101 #: build/C/man7/signal.7:303
5103 msgid "SIGEMT\t7,-,7\tTerm\n"
5107 #: build/C/man7/signal.7:304
5109 msgid "SIGSTKFLT\t-,16,-\tTerm\tStack fault on coprocessor (unused)\n"
5113 #: build/C/man7/signal.7:305
5115 msgid "SIGIO\t23,29,22\tTerm\tI/O now possible (4.2BSD)\n"
5119 #: build/C/man7/signal.7:306
5121 msgid "SIGCLD\t-,-,18\tIgn\tA synonym for B<SIGCHLD>\n"
5125 #: build/C/man7/signal.7:307
5127 msgid "SIGPWR\t29,30,19\tTerm\tPower failure (System V)\n"
5131 #: build/C/man7/signal.7:308
5133 msgid "SIGINFO\t29,-,-\t\tA synonym for B<SIGPWR>\n"
5137 #: build/C/man7/signal.7:309
5139 msgid "SIGLOST\t-,-,-\tTerm\tFile lock lost\n"
5143 #: build/C/man7/signal.7:310
5145 msgid "SIGWINCH\t28,28,20\tIgn\tWindow resize signal (4.3BSD, Sun)\n"
5149 #: build/C/man7/signal.7:311
5151 msgid "SIGUNUSED\t-,31,-\tCore\tSynonymous with B<SIGSYS>\n"
5155 #: build/C/man7/signal.7:321
5156 msgid "(Signal 29 is B<SIGINFO> / B<SIGPWR> on an alpha but B<SIGLOST> on a sparc.)"
5160 #: build/C/man7/signal.7:327
5162 "B<SIGEMT> is not specified in POSIX.1-2001, but nevertheless appears on most "
5163 "other UNIX systems, where its default action is typically to terminate the "
5164 "process with a core dump."
5168 #: build/C/man7/signal.7:331
5170 "B<SIGPWR> (which is not specified in POSIX.1-2001) is typically ignored by "
5171 "default on those other UNIX systems where it appears."
5175 #: build/C/man7/signal.7:335
5177 "B<SIGIO> (which is not specified in POSIX.1-2001) is ignored by default on "
5178 "several other UNIX systems."
5181 #. parisc is the only exception: SIGSYS is 12, SIGUNUSED is 31
5183 #: build/C/man7/signal.7:342
5185 "Where defined, B<SIGUNUSED> is synonymous with B<SIGSYS> on most "
5190 #: build/C/man7/signal.7:342
5192 msgid "Real-time Signals"
5196 #: build/C/man7/signal.7:352
5198 "Linux supports real-time signals as originally defined in the POSIX.1b "
5199 "real-time extensions (and now included in POSIX.1-2001). The range of "
5200 "supported real-time signals is defined by the macros B<SIGRTMIN> and "
5201 "B<SIGRTMAX>. POSIX.1-2001 requires that an implementation support at least "
5202 "B<_POSIX_RTSIG_MAX> (8) real-time signals."
5206 #: build/C/man7/signal.7:374
5208 "The Linux kernel supports a range of 32 different real-time signals, "
5209 "numbered 33 to 64. However, the glibc POSIX threads implementation "
5210 "internally uses two (for NPTL) or three (for LinuxThreads) real-time signals "
5211 "(see B<pthreads>(7)), and adjusts the value of B<SIGRTMIN> suitably (to 34 "
5212 "or 35). Because the range of available real-time signals varies according "
5213 "to the glibc threading implementation (and this variation can occur at run "
5214 "time according to the available kernel and glibc), and indeed the range of "
5215 "real-time signals varies across UNIX systems, programs should I<never refer "
5216 "to real-time signals using hard-coded numbers>, but instead should always "
5217 "refer to real-time signals using the notation B<SIGRTMIN>+n, and include "
5218 "suitable (run-time) checks that B<SIGRTMIN>+n does not exceed B<SIGRTMAX>."
5222 #: build/C/man7/signal.7:378
5224 "Unlike standard signals, real-time signals have no predefined meanings: the "
5225 "entire set of real-time signals can be used for application-defined "
5230 #: build/C/man7/signal.7:381
5232 "The default action for an unhandled real-time signal is to terminate the "
5233 "receiving process."
5237 #: build/C/man7/signal.7:383
5238 msgid "Real-time signals are distinguished by the following:"
5242 #: build/C/man7/signal.7:387
5244 "Multiple instances of real-time signals can be queued. By contrast, if "
5245 "multiple instances of a standard signal are delivered while that signal is "
5246 "currently blocked, then only one instance is queued."
5250 #: build/C/man7/signal.7:407
5252 "If the signal is sent using B<sigqueue>(3), an accompanying value (either an "
5253 "integer or a pointer) can be sent with the signal. If the receiving process "
5254 "establishes a handler for this signal using the B<SA_SIGINFO> flag to "
5255 "B<sigaction>(2) then it can obtain this data via the I<si_value> field of "
5256 "the I<siginfo_t> structure passed as the second argument to the handler. "
5257 "Furthermore, the I<si_pid> and I<si_uid> fields of this structure can be "
5258 "used to obtain the PID and real user ID of the process sending the signal."
5262 #: build/C/man7/signal.7:416
5264 "Real-time signals are delivered in a guaranteed order. Multiple real-time "
5265 "signals of the same type are delivered in the order they were sent. If "
5266 "different real-time signals are sent to a process, they are delivered "
5267 "starting with the lowest-numbered signal. (I.e., low-numbered signals have "
5268 "highest priority.) By contrast, if multiple standard signals are pending "
5269 "for a process, the order in which they are delivered is unspecified."
5273 #: build/C/man7/signal.7:421
5275 "If both standard and real-time signals are pending for a process, POSIX "
5276 "leaves it unspecified which is delivered first. Linux, like many other "
5277 "implementations, gives priority to standard signals in this case."
5281 #: build/C/man7/signal.7:444
5283 "According to POSIX, an implementation should permit at least "
5284 "B<_POSIX_SIGQUEUE_MAX> (32) real-time signals to be queued to a process. "
5285 "However, Linux does things differently. In kernels up to and including "
5286 "2.6.7, Linux imposes a system-wide limit on the number of queued real-time "
5287 "signals for all processes. This limit can be viewed and (with privilege) "
5288 "changed via the I</proc/sys/kernel/rtsig-max> file. A related file, "
5289 "I</proc/sys/kernel/rtsig-nr>, can be used to find out how many real-time "
5290 "signals are currently queued. In Linux 2.6.8, these I</proc> interfaces "
5291 "were replaced by the B<RLIMIT_SIGPENDING> resource limit, which specifies a "
5292 "per-user limit for queued signals; see B<setrlimit>(2) for further details."
5296 #: build/C/man7/signal.7:444
5298 msgid "Async-signal-safe functions"
5302 #: build/C/man7/signal.7:453
5304 "A signal handler function must be very careful, since processing elsewhere "
5305 "may be interrupted at some arbitrary point in the execution of the program. "
5306 "POSIX has the concept of \"safe function\". If a signal interrupts the "
5307 "execution of an unsafe function, and I<handler> calls an unsafe function, "
5308 "then the behavior of the program is undefined."
5312 #: build/C/man7/signal.7:457
5314 "POSIX.1-2004 (also known as POSIX.1-2001 Technical Corrigendum 2) requires "
5315 "an implementation to guarantee that the following functions can be safely "
5316 "called inside a signal handler:"
5320 #: build/C/man7/signal.7:578
5380 "posix_trace_event()\n"
5430 "timer_getoverrun()\n"
5444 #: build/C/man7/signal.7:583
5446 "POSIX.1-2008 removes fpathconf(), pathconf(), and sysconf() from the above "
5447 "list, and adds the following functions:"
5451 #: build/C/man7/signal.7:606
5477 #: build/C/man7/signal.7:608
5479 msgid "Interruption of System Calls and Library Functions by Signal Handlers"
5483 #: build/C/man7/signal.7:611
5485 "If a signal handler is invoked while a system call or library function call "
5486 "is blocked, then either:"
5490 #: build/C/man7/signal.7:613
5491 msgid "the call is automatically restarted after the signal handler returns; or"
5495 #: build/C/man7/signal.7:616
5496 msgid "the call fails with the error B<EINTR>."
5500 #: build/C/man7/signal.7:624
5502 "Which of these two behaviors occurs depends on the interface and whether or "
5503 "not the signal handler was established using the B<SA_RESTART> flag (see "
5504 "B<sigaction>(2)). The details vary across UNIX systems; below, the details "
5508 #. The following system calls use ERESTARTSYS,
5509 #. so that they are restartable
5511 #: build/C/man7/signal.7:633
5513 "If a blocked call to one of the following interfaces is interrupted by a "
5514 "signal handler, then the call will be automatically restarted after the "
5515 "signal handler returns if the B<SA_RESTART> flag was used; otherwise the "
5516 "call will fail with the error B<EINTR>:"
5520 #: build/C/man7/signal.7:649
5522 "B<read>(2), B<readv>(2), B<write>(2), B<writev>(2), and B<ioctl>(2) calls "
5523 "on \"slow\" devices. A \"slow\" device is one where the I/O call may block "
5524 "for an indefinite time, for example, a terminal, pipe, or socket. (A disk "
5525 "is not a slow device according to this definition.) If an I/O call on a "
5526 "slow device has already transferred some data by the time it is interrupted "
5527 "by a signal handler, then the call will return a success status (normally, "
5528 "the number of bytes transferred)."
5532 #: build/C/man7/signal.7:653
5533 msgid "B<open>(2), if it can block (e.g., when opening a FIFO; see B<fifo>(7))."
5537 #: build/C/man7/signal.7:660
5538 msgid "B<wait>(2), B<wait3>(2), B<wait4>(2), B<waitid>(2), and B<waitpid>(2)."
5541 #. If a timeout (setsockopt()) is in effect on the socket, then these
5542 #. system calls switch to using EINTR. Consequently, they and are not
5543 #. automatically restarted, and they show the stop/cont behavior
5544 #. described below. (Verified from 2.6.26 source, and by experiment; mtk)
5546 #: build/C/man7/signal.7:676
5548 "Socket interfaces: B<accept>(2), B<connect>(2), B<recv>(2), B<recvfrom>(2), "
5549 "B<recvmsg>(2), B<send>(2), B<sendto>(2), and B<sendmsg>(2), unless a timeout "
5550 "has been set on the socket (see below)."
5554 #: build/C/man7/signal.7:682
5555 msgid "File locking interfaces: B<flock>(2) and B<fcntl>(2) B<F_SETLKW>."
5559 #: build/C/man7/signal.7:689
5561 "POSIX message queue interfaces: B<mq_receive>(3), B<mq_timedreceive>(3), "
5562 "B<mq_send>(3), and B<mq_timedsend>(3)."
5566 #: build/C/man7/signal.7:694
5568 "B<futex>(2) B<FUTEX_WAIT> (since Linux 2.6.22; beforehand, always failed "
5573 #: build/C/man7/signal.7:701
5575 "POSIX semaphore interfaces: B<sem_wait>(3) and B<sem_timedwait>(3) (since "
5576 "Linux 2.6.22; beforehand, always failed with B<EINTR>)."
5579 #. These are the system calls that give EINTR or ERESTARTNOHAND
5580 #. on interruption by a signal handler.
5582 #: build/C/man7/signal.7:712
5584 "The following interfaces are never restarted after being interrupted by a "
5585 "signal handler, regardless of the use of B<SA_RESTART>; they always fail "
5586 "with the error B<EINTR> when interrupted by a signal handler:"
5590 #: build/C/man7/signal.7:732 build/C/man7/signal.7:806
5592 "Socket interfaces, when a timeout has been set on the socket using "
5593 "B<setsockopt>(2): B<accept>(2), B<recv>(2), B<recvfrom>(2), and "
5594 "B<recvmsg>(2), if a receive timeout (B<SO_RCVTIMEO>) has been set; "
5595 "B<connect>(2), B<send>(2), B<sendto>(2), and B<sendmsg>(2), if a send "
5596 "timeout (B<SO_SNDTIMEO>) has been set."
5600 #: build/C/man7/signal.7:739
5602 "Interfaces used to wait for signals: B<pause>(2), B<sigsuspend>(2), "
5603 "B<sigtimedwait>(2), and B<sigwaitinfo>(2)."
5607 #: build/C/man7/signal.7:748
5609 "File descriptor multiplexing interfaces: B<epoll_wait>(2), "
5610 "B<epoll_pwait>(2), B<poll>(2), B<ppoll>(2), B<select>(2), and B<pselect>(2)."
5613 #. On some other systems, SA_RESTART does restart these system calls
5615 #: build/C/man7/signal.7:756
5617 "System V IPC interfaces: B<msgrcv>(2), B<msgsnd>(2), B<semop>(2), and "
5622 #: build/C/man7/signal.7:762
5623 msgid "Sleep interfaces: B<clock_nanosleep>(2), B<nanosleep>(2), and B<usleep>(3)."
5627 #: build/C/man7/signal.7:767 build/C/man7/signal.7:820
5628 msgid "B<read>(2) from an B<inotify>(7) file descriptor."
5632 #: build/C/man7/signal.7:769
5633 msgid "B<io_getevents>(2)."
5637 #: build/C/man7/signal.7:775
5639 "The B<sleep>(3) function is also never restarted if interrupted by a "
5640 "handler, but gives a success return: the number of seconds remaining to "
5645 #: build/C/man7/signal.7:775
5647 msgid "Interruption of System Calls and Library Functions by Stop Signals"
5651 #: build/C/man7/signal.7:784
5653 "On Linux, even in the absence of signal handlers, certain blocking "
5654 "interfaces can fail with the error B<EINTR> after the process is stopped by "
5655 "one of the stop signals and then resumed via B<SIGCONT>. This behavior is "
5656 "not sanctioned by POSIX.1, and doesn't occur on other systems."
5660 #: build/C/man7/signal.7:786
5661 msgid "The Linux interfaces that display this behavior are:"
5665 #: build/C/man7/signal.7:809
5666 msgid "B<epoll_wait>(2), B<epoll_pwait>(2)."
5670 #: build/C/man7/signal.7:812
5671 msgid "B<semop>(2), B<semtimedop>(2)."
5675 #: build/C/man7/signal.7:815
5676 msgid "B<sigtimedwait>(2), B<sigwaitinfo>(2)."
5680 #: build/C/man7/signal.7:826
5682 "Linux 2.6.21 and earlier: B<futex>(2) B<FUTEX_WAIT>, B<sem_timedwait>(3), "
5687 #: build/C/man7/signal.7:830
5688 msgid "Linux 2.6.8 and earlier: B<msgrcv>(2), B<msgsnd>(2)."
5692 #: build/C/man7/signal.7:833
5693 msgid "Linux 2.4 and earlier: B<nanosleep>(2)."
5697 #: build/C/man7/signal.7:836
5698 msgid "POSIX.1, except as noted."
5702 #: build/C/man7/signal.7:845
5704 "B<SIGIO> and B<SIGLOST> have the same value. The latter is commented out in "
5705 "the kernel source, but the build process of some software still thinks that "
5706 "signal 29 is B<SIGLOST>."
5710 #: build/C/man7/signal.7:878
5712 "B<kill>(1), B<getrlimit>(2), B<kill>(2), B<killpg>(2), "
5713 "B<rt_sigqueueinfo>(2), B<setitimer>(2), B<setrlimit>(2), B<sgetmask>(2), "
5714 "B<sigaction>(2), B<sigaltstack>(2), B<signal>(2), B<signalfd>(2), "
5715 "B<sigpending>(2), B<sigprocmask>(2), B<sigsuspend>(2), B<sigwaitinfo>(2), "
5716 "B<abort>(3), B<bsd_signal>(3), B<longjmp>(3), B<raise>(3), "
5717 "B<pthread_sigqueue>(3), B<sigqueue>(3), B<sigset>(3), B<sigsetops>(3), "
5718 "B<sigvec>(3), B<sigwait>(3), B<strsignal>(3), B<sysv_signal>(3), B<core>(5), "
5719 "B<proc>(5), B<pthreads>(7), B<sigevent>(7)"
5723 #: build/C/man2/signalfd.2:19
5729 #: build/C/man2/signalfd.2:19
5735 #: build/C/man2/signalfd.2:22
5736 msgid "signalfd - create a file descriptor for accepting signals"
5740 #: build/C/man2/signalfd.2:24
5741 msgid "B<#include E<lt>sys/signalfd.hE<gt>>"
5745 #: build/C/man2/signalfd.2:26
5746 msgid "B<int signalfd(int >I<fd>B<, const sigset_t *>I<mask>B<, int >I<flags>B<);>"
5750 #: build/C/man2/signalfd.2:37
5752 "B<signalfd>() creates a file descriptor that can be used to accept signals "
5753 "targeted at the caller. This provides an alternative to the use of a signal "
5754 "handler or B<sigwaitinfo>(2), and has the advantage that the file descriptor "
5755 "may be monitored by B<select>(2), B<poll>(2), and B<epoll>(7)."
5759 #: build/C/man2/signalfd.2:57
5761 "The I<mask> argument specifies the set of signals that the caller wishes to "
5762 "accept via the file descriptor. This argument is a signal set whose "
5763 "contents can be initialized using the macros described in B<sigsetops>(3). "
5764 "Normally, the set of signals to be received via the file descriptor should "
5765 "be blocked using B<sigprocmask>(2), to prevent the signals being handled "
5766 "according to their default dispositions. It is not possible to receive "
5767 "B<SIGKILL> or B<SIGSTOP> signals via a signalfd file descriptor; these "
5768 "signals are silently ignored if specified in I<mask>."
5772 #: build/C/man2/signalfd.2:71
5774 "If the I<fd> argument is -1, then the call creates a new file descriptor and "
5775 "associates the signal set specified in I<mask> with that descriptor. If "
5776 "I<fd> is not -1, then it must specify a valid existing signalfd file "
5777 "descriptor, and I<mask> is used to replace the signal set associated with "
5782 #: build/C/man2/signalfd.2:76
5784 "Starting with Linux 2.6.27, the following values may be bitwise ORed in "
5785 "I<flags> to change the behaviour of B<signalfd>():"
5789 #: build/C/man2/signalfd.2:76
5791 msgid "B<SFD_NONBLOCK>"
5795 #: build/C/man2/signalfd.2:84
5797 msgid "B<SFD_CLOEXEC>"
5801 #: build/C/man2/signalfd.2:101
5803 "B<signalfd>() returns a file descriptor that supports the following "
5808 #: build/C/man2/signalfd.2:120
5810 "If one or more of the signals specified in I<mask> is pending for the "
5811 "process, then the buffer supplied to B<read>(2) is used to return one or "
5812 "more I<signalfd_siginfo> structures (see below) that describe the signals. "
5813 "The B<read>(2) returns information for as many signals as are pending and "
5814 "will fit in the supplied buffer. The buffer must be at least "
5815 "I<sizeof(struct signalfd_siginfo)> bytes. The return value of the "
5816 "B<read>(2) is the total number of bytes read."
5820 #: build/C/man2/signalfd.2:128
5822 "As a consequence of the B<read>(2), the signals are consumed, so that they "
5823 "are no longer pending for the process (i.e., will not be caught by signal "
5824 "handlers, and cannot be accepted using B<sigwaitinfo>(2))."
5828 #: build/C/man2/signalfd.2:139
5830 "If none of the signals in I<mask> is pending for the process, then the "
5831 "B<read>(2) either blocks until one of the signals in I<mask> is generated "
5832 "for the process, or fails with the error B<EAGAIN> if the file descriptor "
5833 "has been made nonblocking."
5837 #: build/C/man2/signalfd.2:152
5839 "The file descriptor is readable (the B<select>(2) I<readfds> argument; the "
5840 "B<poll>(2) B<POLLIN> flag) if one or more of the signals in I<mask> is "
5841 "pending for the process."
5845 #: build/C/man2/signalfd.2:159
5847 "The signalfd file descriptor also supports the other file-descriptor "
5848 "multiplexing APIs: B<pselect>(2), B<ppoll>(2), and B<epoll>(7)."
5852 #: build/C/man2/signalfd.2:164
5854 "When the file descriptor is no longer required it should be closed. When "
5855 "all file descriptors associated with the same signalfd object have been "
5856 "closed, the resources for object are freed by the kernel."
5860 #: build/C/man2/signalfd.2:164
5862 msgid "The signalfd_siginfo structure"
5866 #: build/C/man2/signalfd.2:170
5868 "The format of the I<signalfd_siginfo> structure(s) returned by B<read>(2)s "
5869 "from a signalfd file descriptor is as follows:"
5872 #. ssi_trapno is unused on most arches
5874 #: build/C/man2/signalfd.2:195
5877 "struct signalfd_siginfo {\n"
5878 " uint32_t ssi_signo; /* Signal number */\n"
5879 " int32_t ssi_errno; /* Error number (unused) */\n"
5880 " int32_t ssi_code; /* Signal code */\n"
5881 " uint32_t ssi_pid; /* PID of sender */\n"
5882 " uint32_t ssi_uid; /* Real UID of sender */\n"
5883 " int32_t ssi_fd; /* File descriptor (SIGIO) */\n"
5884 " uint32_t ssi_tid; /* Kernel timer ID (POSIX timers)\n"
5885 " uint32_t ssi_band; /* Band event (SIGIO) */\n"
5886 " uint32_t ssi_overrun; /* POSIX timer overrun count */\n"
5887 " uint32_t ssi_trapno; /* Trap number that caused signal */\n"
5888 " int32_t ssi_status; /* Exit status or signal (SIGCHLD) */\n"
5889 " int32_t ssi_int; /* Integer sent by sigqueue(3) */\n"
5890 " uint64_t ssi_ptr; /* Pointer sent by sigqueue(3) */\n"
5891 " uint64_t ssi_utime; /* User CPU time consumed (SIGCHLD) */\n"
5892 " uint64_t ssi_stime; /* System CPU time consumed (SIGCHLD) */\n"
5893 " uint64_t ssi_addr; /* Address that generated signal\n"
5894 " (for hardware-generated signals) */\n"
5895 " uint8_t pad[I<X>]; /* Pad size to 128 bytes (allow for\n"
5896 " additional fields in the future) */\n"
5901 #: build/C/man2/signalfd.2:218
5903 "Each of the fields in this structure is analogous to the similarly named "
5904 "field in the I<siginfo_t> structure. The I<siginfo_t> structure is "
5905 "described in B<sigaction>(2). Not all fields in the returned "
5906 "I<signalfd_siginfo> structure will be valid for a specific signal; the set "
5907 "of valid fields can be determined from the value returned in the I<ssi_code> "
5908 "field. This field is the analog of the I<siginfo_t> I<si_code> field; see "
5909 "B<sigaction>(2) for details."
5913 #: build/C/man2/signalfd.2:218 build/C/man2/timerfd_create.2:268
5915 msgid "fork(2) semantics"
5919 #: build/C/man2/signalfd.2:226
5921 "After a B<fork>(2), the child inherits a copy of the signalfd file "
5922 "descriptor. A B<read>(2) from the file descriptor in the child will return "
5923 "information about signals queued to the child."
5927 #: build/C/man2/signalfd.2:226 build/C/man2/timerfd_create.2:280
5929 msgid "execve(2) semantics"
5933 #: build/C/man2/signalfd.2:238
5935 "Just like any other file descriptor, a signalfd file descriptor remains open "
5936 "across an B<execve>(2), unless it has been marked for close-on-exec (see "
5937 "B<fcntl>(2)). Any signals that were available for reading before the "
5938 "B<execve>(2) remain available to the newly loaded program. (This is "
5939 "analogous to traditional signal semantics, where a blocked signal that is "
5940 "pending remains pending across an B<execve>(2).)"
5944 #: build/C/man2/signalfd.2:238
5946 msgid "Thread semantics"
5950 #: build/C/man2/signalfd.2:248
5952 "The semantics of signalfd file descriptors in a multithreaded program mirror "
5953 "the standard semantics for signals. In other words, when a thread reads "
5954 "from a signalfd file descriptor, it will read the signals that are directed "
5955 "to the thread itself and the signals that are directed to the process (i.e., "
5956 "the entire thread group). (A thread will not be able to read signals that "
5957 "are directed to other threads in the process.)"
5961 #: build/C/man2/signalfd.2:262
5963 "On success, B<signalfd>() returns a signalfd file descriptor; this is "
5964 "either a new file descriptor (if I<fd> was -1), or I<fd> if I<fd> was a "
5965 "valid signalfd file descriptor. On error, -1 is returned and I<errno> is "
5966 "set to indicate the error."
5970 #: build/C/man2/signalfd.2:263 build/C/man2/timerfd_create.2:337
5976 #: build/C/man2/signalfd.2:268
5977 msgid "The I<fd> file descriptor is not a valid file descriptor."
5982 #. argument is not equal to
5983 #. .IR sizeof(sigset_t) ;
5985 #: build/C/man2/signalfd.2:276
5986 msgid "I<fd> is not a valid signalfd file descriptor."
5990 #: build/C/man2/signalfd.2:283 build/C/man2/timerfd_create.2:319
5991 msgid "I<flags> is invalid; or, in Linux 2.6.26 or earlier, I<flags> is nonzero."
5995 #: build/C/man2/signalfd.2:286 build/C/man2/timerfd_create.2:322
5996 msgid "The per-process limit of open file descriptors has been reached."
6000 #: build/C/man2/signalfd.2:296
6001 msgid "There was insufficient memory to create a new signalfd file descriptor."
6004 #. signalfd() is in glibc 2.7, but reportedly does not build
6006 #: build/C/man2/signalfd.2:304
6008 "B<signalfd>() is available on Linux since kernel 2.6.22. Working support "
6009 "is provided in glibc since version 2.8. The B<signalfd4>() system call "
6010 "(see NOTES) is available on Linux since kernel 2.6.27."
6014 #: build/C/man2/signalfd.2:309
6015 msgid "B<signalfd>() and B<signalfd4>() are Linux-specific."
6019 #: build/C/man2/signalfd.2:319
6021 "The underlying Linux system call requires an additional argument, I<size_t "
6022 "sizemask>, which specifies the size of the I<mask> argument. The glibc "
6023 "B<signalfd>() wrapper function does not include this argument, since it "
6024 "provides the required value for the underlying system call."
6028 #: build/C/man2/signalfd.2:333
6030 "A process can create multiple signalfd file descriptors. This makes it "
6031 "possible to accept different signals on different file descriptors. (This "
6032 "may be useful if monitoring the file descriptors using B<select>(2), "
6033 "B<poll>(2), or B<epoll>(7): the arrival of different signals will make "
6034 "different descriptors ready.) If a signal appears in the I<mask> of more "
6035 "than one of the file descriptors, then occurrences of that signal can be "
6036 "read (once) from any one of the descriptors."
6040 #: build/C/man2/signalfd.2:349
6042 "There are two underlying Linux system calls: B<signalfd>() and the more "
6043 "recent B<signalfd4>(). The former system call does not implement a I<flags> "
6044 "argument. The latter system call implements the I<flags> values described "
6045 "above. Starting with glibc 2.9, the B<signalfd>() wrapper function will "
6046 "use B<signalfd4>() where it is available."
6049 #. The fix also was put into 2.6.24.5
6051 #: build/C/man2/signalfd.2:357
6053 "In kernels before 2.6.25, the I<ssi_ptr> and I<ssi_int> fields are not "
6054 "filled in with the data accompanying a signal sent by B<sigqueue>(3)."
6058 #: build/C/man2/signalfd.2:367
6060 "The program below accepts the signals B<SIGINT> and B<SIGQUIT> via a "
6061 "signalfd file descriptor. The program terminates after accepting a "
6062 "B<SIGQUIT> signal. The following shell session demonstrates the use of the "
6067 #: build/C/man2/signalfd.2:378
6070 "$B< ./signalfd_demo>\n"
6071 "B<^C> # Control-C generates SIGINT\n"
6075 "B<^\\e> # Control-\\e generates SIGQUIT\n"
6081 #: build/C/man2/signalfd.2:388
6084 "#include E<lt>sys/signalfd.hE<gt>\n"
6085 "#include E<lt>signal.hE<gt>\n"
6086 "#include E<lt>unistd.hE<gt>\n"
6087 "#include E<lt>stdlib.hE<gt>\n"
6088 "#include E<lt>stdio.hE<gt>\n"
6092 #: build/C/man2/signalfd.2:399
6096 "main(int argc, char *argv[])\n"
6100 " struct signalfd_siginfo fdsi;\n"
6105 #: build/C/man2/signalfd.2:403
6108 " sigemptyset(&mask);\n"
6109 " sigaddset(&mask, SIGINT);\n"
6110 " sigaddset(&mask, SIGQUIT);\n"
6114 #: build/C/man2/signalfd.2:406
6117 " /* Block signals so that they aren\\(aqt handled\n"
6118 " according to their default dispositions */\n"
6122 #: build/C/man2/signalfd.2:409
6125 " if (sigprocmask(SIG_BLOCK, &mask, NULL) == -1)\n"
6126 " handle_error(\"sigprocmask\");\n"
6130 #: build/C/man2/signalfd.2:413
6133 " sfd = signalfd(-1, &mask, 0);\n"
6135 " handle_error(\"signalfd\");\n"
6139 #: build/C/man2/signalfd.2:418
6143 " s = read(sfd, &fdsi, sizeof(struct signalfd_siginfo));\n"
6144 " if (s != sizeof(struct signalfd_siginfo))\n"
6145 " handle_error(\"read\");\n"
6149 #: build/C/man2/signalfd.2:429
6152 " if (fdsi.ssi_signo == SIGINT) {\n"
6153 " printf(\"Got SIGINT\\en\");\n"
6154 " } else if (fdsi.ssi_signo == SIGQUIT) {\n"
6155 " printf(\"Got SIGQUIT\\en\");\n"
6156 " exit(EXIT_SUCCESS);\n"
6158 " printf(\"Read unexpected signal\\en\");\n"
6165 #: build/C/man2/signalfd.2:443
6167 "B<eventfd>(2), B<poll>(2), B<read>(2), B<select>(2), B<sigaction>(2), "
6168 "B<sigprocmask>(2), B<sigwaitinfo>(2), B<timerfd_create>(2), B<sigsetops>(3), "
6169 "B<sigwait>(3), B<epoll>(7), B<signal>(7)"
6173 #: build/C/man3/sigpause.3:23
6179 #: build/C/man3/sigpause.3:23
6185 #: build/C/man3/sigpause.3:26
6186 msgid "sigpause - atomically release blocked signals and wait for interrupt"
6190 #: build/C/man3/sigpause.3:31
6192 msgid "B<int sigpause(int >I<sigmask>B<); /* BSD */>\n"
6196 #: build/C/man3/sigpause.3:33
6198 msgid "B<int sigpause(int >I<sig>B<); /* System V / UNIX 95 */>\n"
6202 #: build/C/man3/sigpause.3:39
6203 msgid "Don't use this function. Use B<sigsuspend>(2) instead."
6207 #: build/C/man3/sigpause.3:46
6209 "The function B<sigpause>() is designed to wait for some signal. It changes "
6210 "the process's signal mask (set of blocked signals), and then waits for a "
6211 "signal to arrive. Upon arrival of a signal, the original signal mask is "
6216 #: build/C/man3/sigpause.3:54
6218 "If B<sigpause>() returns, it was interrupted by a signal and the return "
6219 "value is -1 with I<errno> set to B<EINTR>."
6223 #: build/C/man3/sigpause.3:58
6224 msgid "The System V version of B<sigpause>() is standardized in POSIX.1-2001."
6227 #. __xpg_sigpause: UNIX 95, spec 1170, SVID, SVr4, XPG
6229 #: build/C/man3/sigpause.3:75
6231 "The classical BSD version of this function appeared in 4.2BSD. It sets the "
6232 "process's signal mask to I<sigmask>. UNIX 95 standardized the incompatible "
6233 "System V version of this function, which removes only the specified signal "
6234 "I<sig> from the process's signal mask. The unfortunate situation with two "
6235 "incompatible functions with the same name was solved by the "
6236 "B<\\%sigsuspend>(2) function, that takes a I<sigset_t *> argument (instead "
6241 #: build/C/man3/sigpause.3:78
6243 "On Linux, this routine is a system call only on the Sparc (sparc64) "
6248 #: build/C/man3/sigpause.3:80
6249 msgid "Libc4 and libc5 only know about the BSD version."
6253 #. For the BSD version, one usually uses a zero
6255 #. to indicate that no signals are to be blocked.
6257 #: build/C/man3/sigpause.3:96
6259 "Glibc uses the BSD version if the B<_BSD_SOURCE> feature test macro is "
6260 "defined and none of B<_POSIX_SOURCE>, B<_POSIX_C_SOURCE>, B<_XOPEN_SOURCE>, "
6261 "B<_GNU_SOURCE>, or B<_SVID_SOURCE> is defined. Otherwise, the System V "
6266 #: build/C/man3/sigpause.3:104
6268 "B<kill>(2), B<sigaction>(2), B<sigprocmask>(2), B<sigsuspend>(2), "
6269 "B<sigblock>(3), B<sigvec>(3), B<feature_test_macros>(7)"
6273 #: build/C/man2/sigpending.2:27
6279 #: build/C/man2/sigpending.2:27
6285 #: build/C/man2/sigpending.2:30
6286 msgid "sigpending - examine pending signals"
6290 #: build/C/man2/sigpending.2:34
6291 msgid "B<int sigpending(sigset_t *>I<set>B<);>"
6295 #: build/C/man2/sigpending.2:43
6297 "B<sigpending>(): _POSIX_C_SOURCE\\ E<gt>=\\ 1 || _XOPEN_SOURCE || "
6302 #: build/C/man2/sigpending.2:51
6304 "B<sigpending>() returns the set of signals that are pending for delivery to "
6305 "the calling thread (i.e., the signals which have been raised while "
6306 "blocked). The mask of pending signals is returned in I<set>."
6310 #: build/C/man2/sigpending.2:54
6311 msgid "B<sigpending>() returns 0 on success and -1 on error."
6315 #: build/C/man2/sigpending.2:59
6317 "I<set> points to memory which is not a valid part of the process address "
6322 #: build/C/man2/sigpending.2:70
6324 "The set of signals that is pending for a thread is the union of the set of "
6325 "signals that is pending for that thread and the set of signals that is "
6326 "pending for the process as a whole; see B<signal>(7)."
6330 #: build/C/man2/sigpending.2:82
6332 "In versions of glibc up to and including 2.2.1, there is a bug in the "
6333 "wrapper function for B<sigpending>() which means that information about "
6334 "pending real-time signals is not correctly returned."
6338 #: build/C/man2/sigpending.2:90
6340 "B<kill>(2), B<sigaction>(2), B<signal>(2), B<sigprocmask>(2), "
6341 "B<sigsuspend>(2), B<sigsetops>(3), B<signal>(7)"
6345 #: build/C/man2/sigprocmask.2:27
6351 #: build/C/man2/sigprocmask.2:30
6352 msgid "sigprocmask - examine and change blocked signals"
6356 #: build/C/man2/sigprocmask.2:35
6358 "B<int sigprocmask(int >I<how>B<, const sigset_t *>I<set>B<,> B<sigset_t "
6363 #: build/C/man2/sigprocmask.2:44
6365 "B<sigprocmask>(): _POSIX_C_SOURCE\\ E<gt>=\\ 1 || _XOPEN_SOURCE || "
6370 #: build/C/man2/sigprocmask.2:53
6372 "B<sigprocmask>() is used to fetch and/or change the signal mask of the "
6373 "calling thread. The signal mask is the set of signals whose delivery is "
6374 "currently blocked for the caller (see also B<signal>(7) for more details)."
6378 #: build/C/man2/sigprocmask.2:57
6379 msgid "The behavior of the call is dependent on the value of I<how>, as follows."
6383 #: build/C/man2/sigprocmask.2:57
6385 msgid "B<SIG_BLOCK>"
6389 #: build/C/man2/sigprocmask.2:62
6391 "The set of blocked signals is the union of the current set and the I<set> "
6396 #: build/C/man2/sigprocmask.2:62
6398 msgid "B<SIG_UNBLOCK>"
6402 #: build/C/man2/sigprocmask.2:68
6404 "The signals in I<set> are removed from the current set of blocked signals. "
6405 "It is permissible to attempt to unblock a signal which is not blocked."
6409 #: build/C/man2/sigprocmask.2:68
6411 msgid "B<SIG_SETMASK>"
6415 #: build/C/man2/sigprocmask.2:72
6416 msgid "The set of blocked signals is set to the argument I<set>."
6420 #: build/C/man2/sigprocmask.2:77
6422 "If I<oldset> is non-NULL, the previous value of the signal mask is stored in "
6427 #: build/C/man2/sigprocmask.2:86
6429 "If I<set> is NULL, then the signal mask is unchanged (i.e., I<how> is "
6430 "ignored), but the current value of the signal mask is nevertheless returned "
6431 "in I<oldset> (if it is not NULL)."
6435 #: build/C/man2/sigprocmask.2:91
6437 "The use of B<sigprocmask>() is unspecified in a multithreaded process; see "
6438 "B<pthread_sigmask>(3)."
6442 #: build/C/man2/sigprocmask.2:94
6443 msgid "B<sigprocmask>() returns 0 on success and -1 on error."
6447 #: build/C/man2/sigprocmask.2:99
6448 msgid "B<EINVAL> The value specified in I<how> was invalid."
6452 #: build/C/man2/sigprocmask.2:105
6454 "It is not possible to block B<SIGKILL> or B<SIGSTOP>. Attempts to do so are "
6459 #: build/C/man2/sigprocmask.2:107
6460 msgid "Each of the threads in a process has its own signal mask."
6464 #: build/C/man2/sigprocmask.2:127
6466 "If B<SIGBUS>, B<SIGFPE>, B<SIGILL>, or B<SIGSEGV> are generated while they "
6467 "are blocked, the result is undefined, unless the signal was generated by "
6468 "B<kill>(2), B<sigqueue>(3), or B<raise>(3)."
6472 #: build/C/man2/sigprocmask.2:142
6474 "B<kill>(2), B<pause>(2), B<sigaction>(2), B<signal>(2), B<sigpending>(2), "
6475 "B<sigsuspend>(2), B<pthread_sigmask>(3), B<sigqueue>(3), B<sigsetops>(3), "
6480 #: build/C/man3/sigqueue.3:26
6486 #: build/C/man3/sigqueue.3:29
6487 msgid "sigqueue, rt_sigqueueinfo - queue a signal and data to a process"
6491 #: build/C/man3/sigqueue.3:33
6493 "B<int sigqueue(pid_t >I<pid>B<, int >I<sig>B<, const union sigval "
6498 #: build/C/man3/sigqueue.3:41
6499 msgid "B<sigqueue>(): _POSIX_C_SOURCE\\ E<gt>=\\ 199309L"
6503 #: build/C/man3/sigqueue.3:53
6505 "B<sigqueue>() sends the signal specified in I<sig> to the process whose PID "
6506 "is given in I<pid>. The permissions required to send a signal are the same "
6507 "as for B<kill>(2). As with B<kill>(2), the null signal (0) can be used to "
6508 "check if a process with a given PID exists."
6512 #: build/C/man3/sigqueue.3:58
6514 "The I<value> argument is used to specify an accompanying item of data "
6515 "(either an integer or a pointer value) to be sent with the signal, and has "
6516 "the following type:"
6520 #: build/C/man3/sigqueue.3:65
6525 " void *sival_ptr;\n"
6530 #: build/C/man3/sigqueue.3:81
6532 "If the receiving process has installed a handler for this signal using the "
6533 "B<SA_SIGINFO> flag to B<sigaction>(2), then it can obtain this data via the "
6534 "I<si_value> field of the I<siginfo_t> structure passed as the second "
6535 "argument to the handler. Furthermore, the I<si_code> field of that "
6536 "structure will be set to B<SI_QUEUE>."
6540 #: build/C/man3/sigqueue.3:89
6542 "On success, B<sigqueue>() returns 0, indicating that the signal was "
6543 "successfully queued to the receiving process. Otherwise -1 is returned and "
6544 "I<errno> is set to indicate the error."
6548 #: build/C/man3/sigqueue.3:100
6549 msgid "I<sig> was invalid."
6553 #: build/C/man3/sigqueue.3:106
6555 "The process does not have permission to send the signal to the receiving "
6556 "process. For the required permissions, see B<kill>(2)."
6560 #: build/C/man3/sigqueue.3:110
6561 msgid "No process has a PID matching I<pid>."
6565 #: build/C/man3/sigqueue.3:112
6566 msgid "This system call first appeared in Linux 2.2."
6570 #: build/C/man3/sigqueue.3:122
6572 "If this function results in the sending of a signal to the process that "
6573 "invoked it, and that signal was not blocked by the calling thread, and no "
6574 "other threads were willing to handle this signal (either by having it "
6575 "unblocked, or by waiting for it using B<sigwait>(3)), then at least some "
6576 "signal must be delivered to this thread before this function returns."
6580 #: build/C/man3/sigqueue.3:137
6582 "On Linux, this function is implemented using the B<rt_sigqueueinfo>(2) "
6583 "system call. The system call differs in its third argument, which is the "
6584 "I<siginfo_t> structure that will be supplied to the receiving process's "
6585 "signal handler or returned by the receiving process's B<sigtimedwait>(2) "
6586 "call. Inside the glibc B<sigqueue>() wrapper, this argument, I<uinfo>, is "
6587 "initialized as follows:"
6591 #: build/C/man3/sigqueue.3:145
6594 "uinfo.si_signo = sig; /* argument supplied to sigqueue() */\n"
6595 "uinfo.si_code = SI_QUEUE;\n"
6596 "uinfo.si_pid = getpid(); /* Process ID of sender */\n"
6597 "uinfo.si_uid = getuid(); /* Real UID of sender */\n"
6598 "uinfo.si_value = val; /* argument supplied to sigqueue() */\n"
6602 #: build/C/man3/sigqueue.3:155
6604 "B<kill>(2), B<rt_sigqueueinfo>(2), B<sigaction>(2), B<signal>(2), "
6605 "B<pthread_sigqueue>(3), B<sigwait>(3), B<signal>(7)"
6609 #: build/C/man2/sigreturn.2:27
6615 #: build/C/man2/sigreturn.2:27
6621 #: build/C/man2/sigreturn.2:30
6622 msgid "sigreturn - return from signal handler and cleanup stack frame"
6626 #: build/C/man2/sigreturn.2:32
6627 msgid "B<int sigreturn(unsigned long >I<__unused>B<);>"
6631 #: build/C/man2/sigreturn.2:40
6633 "When the Linux kernel creates the stack frame for a signal handler, a call "
6634 "to B<sigreturn>() is inserted into the stack frame so that upon return from "
6635 "the signal handler, B<sigreturn>() will be called."
6639 #: build/C/man2/sigreturn.2:51
6641 "This B<sigreturn>() call undoes everything that was done\\(emchanging the "
6642 "process's signal mask, switching stacks (see B<sigaltstack>(2))\\(emin order "
6643 "to invoke the signal handler: it restores the process's signal mask, "
6644 "switches stacks, and restores the process's context (registers, processor "
6645 "flags), so that the process directly resumes execution at the point where it "
6646 "was interrupted by the signal."
6650 #: build/C/man2/sigreturn.2:54
6651 msgid "B<sigreturn>() never returns."
6655 #: build/C/man2/sigreturn.2:54
6661 #: build/C/man2/sigreturn.2:56
6662 msgid "/usr/src/linux/arch/i386/kernel/signal.c"
6666 #: build/C/man2/sigreturn.2:58
6667 msgid "/usr/src/linux/arch/alpha/kernel/entry.S"
6671 #: build/C/man2/sigreturn.2:62
6673 "B<sigreturn>() is specific to Linux and should not be used in programs "
6674 "intended to be portable."
6678 #: build/C/man2/sigreturn.2:72
6680 "The B<sigreturn>() call is used by the kernel to implement signal "
6681 "handlers. It should B<never> be called directly. Better yet, the specific "
6682 "use of the I<__unused> argument varies depending on the architecture."
6686 #: build/C/man2/sigreturn.2:77
6687 msgid "B<kill>(2), B<sigaltstack>(2), B<signal>(2), B<signal>(7)"
6691 #: build/C/man3/sigset.3:24
6697 #: build/C/man3/sigset.3:27
6698 msgid "sigset, sighold, sigrelse, sigignore - System V signal API"
6702 #: build/C/man3/sigset.3:33
6703 msgid "B<sighandler_t sigset(int >I<sig>B<, sighandler_t >I<disp>B<);>"
6707 #: build/C/man3/sigset.3:35
6708 msgid "B<int sighold(int >I<sig>B<);>"
6712 #: build/C/man3/sigset.3:37
6713 msgid "B<int sigrelse(int >I<sig>B<);>"
6717 #: build/C/man3/sigset.3:39
6718 msgid "B<int sigignore(int >I<sig>B<);>"
6722 #: build/C/man3/sigset.3:50
6723 msgid "B<sigset>(), B<sighold>(), B<sigrelse>(), B<sigignore>():"
6727 #: build/C/man3/sigset.3:54
6728 msgid "_XOPEN_SOURCE\\ E<gt>=\\ 500 || _XOPEN_SOURCE\\ &&\\ _XOPEN_SOURCE_EXTENDED"
6732 #: build/C/man3/sigset.3:63
6734 "These functions are provided in glibc as a compatibility interface for "
6735 "programs that make use of the historical System V signal API. This API is "
6736 "obsolete: new applications should use the POSIX signal API (B<sigaction>(2), "
6737 "B<sigprocmask>(2), etc.)"
6741 #: build/C/man3/sigset.3:72
6743 "The B<sigset>() function modifies the disposition of the signal I<sig>. "
6744 "The I<disp> argument can be the address of a signal handler function, or one "
6745 "of the following constants:"
6749 #: build/C/man3/sigset.3:72
6755 #: build/C/man3/sigset.3:77
6756 msgid "Reset the disposition of I<sig> to the default."
6760 #: build/C/man3/sigset.3:77
6766 #: build/C/man3/sigset.3:81
6767 msgid "Ignore I<sig>."
6771 #: build/C/man3/sigset.3:81
6777 #: build/C/man3/sigset.3:88
6779 "Add I<sig> to the process's signal mask, but leave the disposition of I<sig> "
6784 #: build/C/man3/sigset.3:94
6786 "If I<disp> specifies the address of a signal handler, then I<sig> is added "
6787 "to the process's signal mask during execution of the handler."
6791 #: build/C/man3/sigset.3:102
6793 "If I<disp> was specified as a value other than B<SIG_HOLD>, then I<sig> is "
6794 "removed from the process's signal mask."
6798 #: build/C/man3/sigset.3:108 build/C/man3/sigvec.3:85
6799 msgid "The dispositions for B<SIGKILL> and B<SIGSTOP> cannot be changed."
6803 #: build/C/man3/sigset.3:114
6804 msgid "The B<sighold>() function adds I<sig> to the calling process's signal mask."
6808 #: build/C/man3/sigset.3:120
6810 "The B<sigrelse>() function removes I<sig> from the calling process's signal "
6815 #: build/C/man3/sigset.3:127
6816 msgid "The B<sigignore>() function sets the disposition of I<sig> to B<SIG_IGN>."
6820 #: build/C/man3/sigset.3:143
6822 "On success, B<sigset>() returns B<SIG_HOLD> if I<sig> was blocked before "
6823 "the call, or the signal's previous disposition if it was not blocked before "
6824 "the call. On error, B<sigset>() returns -1, with I<errno> set to indicate "
6825 "the error. (But see BUGS below.)"
6829 #: build/C/man3/sigset.3:152
6831 "The B<sighold>(), B<sigrelse>(), and B<sigignore>() functions return 0 on "
6832 "success; on error, these functions return -1 and set I<errno> to indicate "
6837 #: build/C/man3/sigset.3:159
6839 "For B<sigset>() see the ERRORS under B<sigaction>(2) and "
6840 "B<sigprocmask>(2)."
6844 #: build/C/man3/sigset.3:166
6845 msgid "For B<sighold>() and B<sigrelse>() see the ERRORS under B<sigprocmask>(2)."
6849 #: build/C/man3/sigset.3:171
6850 msgid "For B<sigignore>(), see the errors under B<sigaction>(2)."
6854 #: build/C/man3/sigset.3:188
6856 "SVr4, POSIX.1-2001. These functions are obsolete: do not use them in new "
6857 "programs. POSIX.1-2008 marks B<sighold>(), B<sigignore>(), B<sigpause>(), "
6858 "B<sigrelse>(), and B<sigset>() as obsolete, recommending the use of "
6859 "B<sigaction>(2), B<sigprocmask>(2), B<pthread_sigmask>(3), and "
6860 "B<sigsuspend>(2) instead."
6864 #: build/C/man3/sigset.3:190
6865 msgid "These functions appeared in glibc version 2.1."
6869 #: build/C/man3/sigset.3:196
6871 "The I<sighandler_t> type is a GNU extension; it is only used on this page to "
6872 "make the B<sigset>() prototype more easily readable."
6876 #: build/C/man3/sigset.3:204
6878 "The B<sigset>() function provides reliable signal handling semantics (as "
6879 "when calling B<sigaction>(2) with I<sa_mask> equal to 0)."
6883 #: build/C/man3/sigset.3:222
6885 "On System V, the B<signal>() function provides unreliable semantics (as "
6886 "when calling B<sigaction>(2) with I<sa_mask> equal to I<SA_RESETHAND | "
6887 "SA_NODEFER>). On BSD, B<signal>() provides reliable semantics. "
6888 "POSIX.1-2001 leaves these aspects of B<signal>() unspecified. See "
6889 "B<signal>(2) for further details."
6893 #: build/C/man3/sigset.3:230 build/C/man3/sigvec.3:250
6895 "In order to wait for a signal, BSD and System V both provided a function "
6896 "named B<sigpause>(3), but this function has a different argument on the two "
6897 "systems. See B<sigpause>(3) for details."
6901 #: build/C/man3/sigset.3:239
6903 "In versions of glibc before 2.2, B<sigset>() did not unblock I<sig> if "
6904 "I<disp> was specified as a value other than B<SIG_HOLD>."
6907 #. See http://sourceware.org/bugzilla/show_bug.cgi?id=1951
6909 #: build/C/man3/sigset.3:264
6911 "In versions of glibc before 2.5, B<sigset>() does not correctly return the "
6912 "previous disposition of the signal in two cases. First, if I<disp> is "
6913 "specified as B<SIG_HOLD>, then a successful B<sigset>() always returns "
6914 "B<SIG_HOLD>. Instead, it should return the previous disposition of the "
6915 "signal (unless the signal was blocked, in which case B<SIG_HOLD> should be "
6916 "returned). Second, if the signal is currently blocked, then the return "
6917 "value of a successful B<sigset>() should be B<SIG_HOLD>. Instead, the "
6918 "previous disposition of the signal is returned. These problems have been "
6919 "fixed since glibc 2.5."
6923 #: build/C/man3/sigset.3:274
6925 "B<kill>(2), B<pause>(2), B<sigaction>(2), B<signal>(2), B<sigprocmask>(2), "
6926 "B<raise>(3), B<sigpause>(3), B<sigvec>(3), B<signal>(7)"
6930 #: build/C/man3/sigsetops.3:29
6936 #: build/C/man3/sigsetops.3:29
6942 #: build/C/man3/sigsetops.3:33
6944 "sigemptyset, sigfillset, sigaddset, sigdelset, sigismember - POSIX signal "
6949 #: build/C/man3/sigsetops.3:37
6950 msgid "B<int sigemptyset(sigset_t *>I<set>B<);>"
6954 #: build/C/man3/sigsetops.3:39
6955 msgid "B<int sigfillset(sigset_t *>I<set>B<);>"
6959 #: build/C/man3/sigsetops.3:41
6960 msgid "B<int sigaddset(sigset_t *>I<set>B<, int >I<signum>B<);>"
6964 #: build/C/man3/sigsetops.3:43
6965 msgid "B<int sigdelset(sigset_t *>I<set>B<, int >I<signum>B<);>"
6969 #: build/C/man3/sigsetops.3:45
6970 msgid "B<int sigismember(const sigset_t *>I<set>B<, int >I<signum>B<);>"
6974 #: build/C/man3/sigsetops.3:57
6976 "B<sigemptyset>(), B<sigfillset>(), B<sigaddset>(), B<sigdelset>(), "
6981 #: build/C/man3/sigsetops.3:59
6982 msgid "_POSIX_C_SOURCE\\ E<gt>=\\ 1 || _XOPEN_SOURCE || _POSIX_SOURCE"
6986 #: build/C/man3/sigsetops.3:63
6987 msgid "These functions allow the manipulation of POSIX signal sets."
6991 #: build/C/man3/sigsetops.3:68
6993 "B<sigemptyset>() initializes the signal set given by I<set> to empty, with "
6994 "all signals excluded from the set."
6998 #: build/C/man3/sigsetops.3:73
6999 msgid "B<sigfillset>() initializes I<set> to full, including all signals."
7003 #: build/C/man3/sigsetops.3:81
7005 "B<sigaddset>() and B<sigdelset>() add and delete respectively signal "
7006 "I<signum> from I<set>."
7010 #: build/C/man3/sigsetops.3:87
7011 msgid "B<sigismember>() tests whether I<signum> is a member of I<set>."
7015 #: build/C/man3/sigsetops.3:105
7017 "Objects of type I<sigset_t> must be initialized by a call to either "
7018 "B<sigemptyset>() or B<sigfillset>() before being passed to the functions "
7019 "B<sigaddset>(), B<sigdelset>() and B<sigismember>() or the additional "
7020 "glibc functions described below (B<sigisemptyset>(), B<sigandset>(), and "
7021 "B<sigorset>()). The results are undefined if this is not done."
7025 #: build/C/man3/sigsetops.3:112
7027 "B<sigemptyset>(), B<sigfillset>(), B<sigaddset>(), and B<sigdelset>() "
7028 "return 0 on success and -1 on error."
7032 #: build/C/man3/sigsetops.3:121
7034 "B<sigismember>() returns 1 if I<signum> is a member of I<set>, 0 if "
7035 "I<signum> is not a member, and -1 on error."
7039 #: build/C/man3/sigsetops.3:126
7040 msgid "I<sig> is not a valid signal."
7044 #: build/C/man3/sigsetops.3:129
7050 #: build/C/man3/sigsetops.3:135
7052 "If the B<_GNU_SOURCE> feature test macro is defined, then "
7053 "I<E<lt>signal.hE<gt>> exposes three other functions for manipulating signal "
7058 #: build/C/man3/sigsetops.3:135
7060 msgid "B<int sigisemptyset(sigset_t *>I<set>B<);>"
7064 #: build/C/man3/sigsetops.3:140
7065 msgid "returns 1 if I<set> contains no signals, and 0 otherwise."
7069 #: build/C/man3/sigsetops.3:140
7072 "B<int sigorset(sigset_t *>I<dest>B<, sigset_t *>I<left>B<, sigset_t "
7077 #: build/C/man3/sigsetops.3:149
7078 msgid "places the union of the sets I<left> and I<right> in I<dest>."
7082 #: build/C/man3/sigsetops.3:149
7085 "B<int sigandset(sigset_t *>I<dest>B<, sigset_t *>I<left>B<, sigset_t "
7090 #: build/C/man3/sigsetops.3:158
7091 msgid "places the intersection of the sets I<left> and I<right> in I<dest>."
7095 #: build/C/man3/sigsetops.3:163
7096 msgid "B<sigorset>() and B<sigandset>() return 0 on success, and -1 on failure."
7100 #: build/C/man3/sigsetops.3:166
7102 "These functions are nonstandard (a few other systems provide similar "
7103 "functions) and their use should be avoided in portable applications."
7107 #: build/C/man3/sigsetops.3:171
7108 msgid "B<sigaction>(2), B<sigpending>(2), B<sigprocmask>(2), B<sigsuspend>(2)"
7112 #: build/C/man2/sigsuspend.2:27
7118 #: build/C/man2/sigsuspend.2:27
7124 #: build/C/man2/sigsuspend.2:30
7125 msgid "sigsuspend - wait for a signal"
7129 #: build/C/man2/sigsuspend.2:34
7130 msgid "B<int sigsuspend(const sigset_t *>I<mask>B<);>"
7134 #: build/C/man2/sigsuspend.2:43
7136 "B<sigsuspend>(): _POSIX_C_SOURCE\\ E<gt>=\\ 1 || _XOPEN_SOURCE || "
7141 #: build/C/man2/sigsuspend.2:51
7143 "B<sigsuspend>() temporarily replaces the signal mask of the calling process "
7144 "with the mask given by I<mask> and then suspends the process until delivery "
7145 "of a signal whose action is to invoke a signal handler or to terminate a "
7150 #: build/C/man2/sigsuspend.2:60
7152 "If the signal terminates the process, then B<sigsuspend>() does not "
7153 "return. If the signal is caught, then B<sigsuspend>() returns after the "
7154 "signal handler returns, and the signal mask is restored to the state before "
7155 "the call to B<sigsuspend>()."
7159 #: build/C/man2/sigsuspend.2:68
7161 "It is not possible to block B<SIGKILL> or B<SIGSTOP>; specifying these "
7162 "signals in I<mask>, has no effect on the process's signal mask."
7166 #: build/C/man2/sigsuspend.2:72
7167 msgid "B<sigsuspend>() always returns -1, normally with the error B<EINTR>."
7171 #: build/C/man2/sigsuspend.2:77
7173 "I<mask> points to memory which is not a valid part of the process address "
7178 #: build/C/man2/sigsuspend.2:80
7179 msgid "The call was interrupted by a signal."
7183 #: build/C/man2/sigsuspend.2:100
7185 "Normally, B<sigsuspend>() is used in conjunction with B<sigprocmask>(2) in "
7186 "order to prevent delivery of a signal during the execution of a critical "
7187 "code section. The caller first blocks the signals with B<sigprocmask>(2). "
7188 "When the critical code has completed, the caller then waits for the signals "
7189 "by calling B<sigsuspend>() with the signal mask that was returned by "
7190 "B<sigprocmask>(2) (in the I<oldset> argument)."
7194 #: build/C/man2/sigsuspend.2:114
7196 "B<kill>(2), B<pause>(2), B<sigaction>(2), B<signal>(2), B<sigprocmask>(2), "
7197 "B<sigwaitinfo>(2), B<sigsetops>(3), B<sigwait>(3), B<signal>(7)"
7201 #: build/C/man3/sigvec.3:24
7207 #: build/C/man3/sigvec.3:27
7208 msgid "sigvec, sigblock, sigsetmask, siggetmask, sigmask - BSD signal API"
7212 #: build/C/man3/sigvec.3:31
7214 "B<int sigvec(int >I<sig>B<, struct sigvec *>I<vec>B<, struct sigvec "
7219 #: build/C/man3/sigvec.3:33
7220 msgid "B<int sigmask(int >I<signum>B<);>"
7224 #: build/C/man3/sigvec.3:35
7225 msgid "B<int sigblock(int >I<mask>B<);>"
7229 #: build/C/man3/sigvec.3:37
7230 msgid "B<int sigsetmask(int >I<mask>B<);>"
7234 #: build/C/man3/sigvec.3:39
7235 msgid "B<int siggetmask(void);>"
7239 #: build/C/man3/sigvec.3:47
7240 msgid "All functions shown above: _BSD_SOURCE"
7244 #: build/C/man3/sigvec.3:54
7246 "These functions are provided in glibc as a compatibility interface for "
7247 "programs that make use of the historical BSD signal API. This API is "
7248 "obsolete: new applications should use the POSIX signal API (B<sigaction>(2), "
7249 "B<sigprocmask>(2), etc.)"
7253 #: build/C/man3/sigvec.3:79
7255 "The B<sigvec>() function sets and/or gets the disposition of the signal "
7256 "I<sig> (like the POSIX B<sigaction>(2)). If I<vec> is not NULL, it points "
7257 "to a I<sigvec> structure that defines the new disposition for I<sig>. If "
7258 "I<ovec> is not NULL, it points to a I<sigvec> structure that is used to "
7259 "return the previous disposition of I<sig>. To obtain the current "
7260 "disposition of I<sig> without changing it, specify NULL for I<vec>, and a "
7261 "non-NULL pointer for I<ovec>."
7265 #: build/C/man3/sigvec.3:89
7266 msgid "The I<sigvec> structure has the following form:"
7270 #: build/C/man3/sigvec.3:97
7274 " void (*sv_handler)(); /* Signal disposition */\n"
7275 " int sv_mask; /* Signals to be blocked in handler */\n"
7276 " int sv_flags; /* Flags */\n"
7281 #: build/C/man3/sigvec.3:108
7283 "The I<sv_handler> field specifies the disposition of the signal, and is "
7284 "either: the address of a signal handler function; or B<SIG_DFL> meaning the "
7285 "default disposition applies for the signal; or B<SIG_IGN> meaning that the "
7286 "signal is ignored."
7290 #: build/C/man3/sigvec.3:122
7292 "If I<sv_handler> specifies the address of a signal handler, then I<sv_mask> "
7293 "specifies a mask of signals that are to be blocked while the handler is "
7294 "executing. In addition, the signal for which the handler is invoked is also "
7295 "blocked by default. Attempts to block B<SIGKILL> or B<SIGSTOP> are silently "
7300 #: build/C/man3/sigvec.3:129
7302 "If I<sv_handler> specifies the address of a signal handler, then the "
7303 "I<sv_flags> field specifies flags controlling what happens when the handler "
7304 "is called. This field may contain zero or more of the following flags:"
7308 #: build/C/man3/sigvec.3:129
7310 msgid "B<SV_INTERRUPT>"
7314 #: build/C/man3/sigvec.3:137
7316 "If the signal handler interrupts a blocking system call, then upon return "
7317 "from the handler the system call will not be restarted: instead it will fail "
7318 "with the error B<EINTR>. If this flag is not specified, then system calls "
7319 "are restarted by default."
7323 #: build/C/man3/sigvec.3:137
7325 msgid "B<SV_RESETHAND>"
7329 #: build/C/man3/sigvec.3:146
7331 "Reset the disposition of the signal to the default before calling the signal "
7332 "handler. If this flag is not specified, then the handler remains "
7333 "established until explicitly removed by a later call to B<sigvec>() or "
7334 "until the process performs an B<execve>(2)."
7338 #: build/C/man3/sigvec.3:146
7340 msgid "B<SV_ONSTACK>"
7344 #: build/C/man3/sigvec.3:153
7346 "Handle the signal on the alternate signal stack (historically established "
7347 "under BSD using the obsolete B<sigstack>() function; the POSIX replacement "
7348 "is B<sigaltstack>(2))."
7352 #: build/C/man3/sigvec.3:163
7354 "The B<sigmask>() function constructs and returns a \"signal mask\" for "
7355 "I<signum>. For example, we can initialize the I<vec.sv_mask> field given to "
7356 "B<sigvec>() using code such as the following:"
7360 #: build/C/man3/sigvec.3:168
7363 " vec.sv_mask = sigmask(SIGQUIT) | sigpause(SIGABRT);\n"
7364 " /* Block SIGQUIT and SIGABRT during\n"
7365 " handler execution */\n"
7369 #: build/C/man3/sigvec.3:183
7371 "The B<sigblock>() function adds the signals in I<mask> to the process's "
7372 "signal mask (like POSIX I<sigprocmask(SIG_BLOCK)>), and returns the "
7373 "process's previous signal mask. Attempts to block B<SIGKILL> or B<SIGSTOP> "
7374 "are silently ignored."
7378 #: build/C/man3/sigvec.3:191
7380 "The B<sigsetmask>() function sets the process's signal mask to the value "
7381 "given in I<mask> (like POSIX I<sigprocmask(SIG_SETMASK)>), and returns the "
7382 "process's previous signal mask."
7386 #: build/C/man3/sigvec.3:197
7388 "The B<siggetmask>() function returns the process's current signal mask. "
7389 "This call is equivalent to I<sigblock(0)>."
7393 #: build/C/man3/sigvec.3:203
7395 "The B<sigvec>() function returns 0 on success; on error, it returns -1 and "
7396 "sets I<errno> to indicate the error."
7400 #: build/C/man3/sigvec.3:209
7402 "The B<sigblock>() and B<sigsetmask>() functions return the previous signal "
7407 #: build/C/man3/sigvec.3:214
7408 msgid "The B<sigmask>() function returns the signal mask for I<signum>."
7412 #: build/C/man3/sigvec.3:219
7413 msgid "See the ERRORS under B<sigaction>(2) and B<sigprocmask>(2)."
7417 #: build/C/man3/sigvec.3:225
7419 "All of these functions were in 4.3BSD, except B<siggetmask>(), whose origin "
7420 "is unclear. These functions are obsolete: do not use them in new programs."
7424 #: build/C/man3/sigvec.3:242
7426 "On 4.3BSD, the B<signal>() function provided reliable semantics (as when "
7427 "calling B<sigvec>() with I<vec.sv_mask> equal to 0). On System V, "
7428 "B<signal>() provides unreliable semantics. POSIX.1-2001 leaves these "
7429 "aspects of B<signal>() unspecified. See B<signal>(2) for further details."
7433 #: build/C/man3/sigvec.3:260
7435 "B<kill>(2), B<pause>(2), B<sigaction>(2), B<signal>(2), B<sigprocmask>(2), "
7436 "B<raise>(3), B<sigpause>(3), B<sigset>(3), B<signal>(7)"
7440 #: build/C/man3/sigwait.3:24
7446 #: build/C/man3/sigwait.3:24
7452 #: build/C/man3/sigwait.3:27
7453 msgid "sigwait - wait for a signal"
7457 #: build/C/man3/sigwait.3:32
7459 msgid "B< int sigwait(const sigset_t *>I<set>B<, int *>I<sig>B<);>\n"
7463 #: build/C/man3/sigwait.3:42
7464 msgid "B<sigwait>(): _POSIX_C_SOURCE\\ E<gt>=\\ 1 || _XOPEN_SOURCE || _POSIX_SOURCE"
7468 #: build/C/man3/sigwait.3:53
7470 "The B<sigwait>() function suspends execution of the calling thread until "
7471 "the delivery of one of the signals specified in the signal set I<set>. The "
7472 "function accepts the signal (removes it from the pending list of signals), "
7473 "and returns the signal number in I<sig>."
7477 #: build/C/man3/sigwait.3:59
7479 "The operation of B<sigwait>() is the same as B<sigwaitinfo>(2), except "
7484 #: build/C/man3/sigwait.3:64
7486 "B<sigwait>() only returns the signal number, rather than a I<siginfo_t> "
7487 "structure describing the signal."
7491 #: build/C/man3/sigwait.3:66
7492 msgid "The return values of the two functions are different."
7496 #: build/C/man3/sigwait.3:71
7498 "On success, B<sigwait>() returns 0. On error, it returns a positive error "
7499 "number (listed in ERRORS)."
7502 #. Does not occur for glibc.
7504 #: build/C/man3/sigwait.3:77
7505 msgid "I<set> contains an invalid signal number."
7509 #: build/C/man3/sigwait.3:83
7510 msgid "B<sigwait>() is implemented using B<sigtimedwait>(2)."
7514 #: build/C/man3/sigwait.3:83
7520 #: build/C/man3/sigwait.3:86
7521 msgid "See B<pthread_sigmask>(3)."
7525 #: build/C/man3/sigwait.3:94
7527 "B<sigaction>(2), B<signalfd>(2), B<sigpending>(2), B<sigsuspend>(2), "
7528 "B<sigwaitinfo>(2), B<sigsetops>(3), B<signal>(7)"
7532 #: build/C/man2/sigwaitinfo.2:23
7538 #: build/C/man2/sigwaitinfo.2:23
7544 #: build/C/man2/sigwaitinfo.2:26
7545 msgid "sigwaitinfo, sigtimedwait - synchronously wait for queued signals"
7549 #: build/C/man2/sigwaitinfo.2:31
7551 msgid "B<int sigwaitinfo(const sigset_t *>I<set>B<, siginfo_t *>I<info>B<);>\n"
7555 #: build/C/man2/sigwaitinfo.2:34
7558 "B<int sigtimedwait(const sigset_t *>I<set>B<, siginfo_t *>I<info>B<, >\n"
7559 "B< const struct timespec *>I<timeout>B<);>\n"
7563 #: build/C/man2/sigwaitinfo.2:44
7564 msgid "B<sigwaitinfo>(), B<sigtimedwait>(): _POSIX_C_SOURCE\\ E<gt>=\\ 199309L"
7568 #: build/C/man2/sigwaitinfo.2:54
7570 "B<sigwaitinfo>() suspends execution of the calling thread until one of the "
7571 "signals in I<set> is delivered. (If one of the signals in I<set> is already "
7572 "pending for the calling thread, B<sigwaitinfo>() will return immediately "
7573 "with information about that signal.)"
7577 #: build/C/man2/sigwaitinfo.2:66
7579 "B<sigwaitinfo>() removes the delivered signal from the set of pending "
7580 "signals and returns the signal number as its function result. If the "
7581 "I<info> argument is not NULL, then it returns a structure of type "
7582 "I<siginfo_t> (see B<sigaction>(2)) containing information about the signal."
7586 #: build/C/man2/sigwaitinfo.2:72
7588 "Signals returned via B<sigwaitinfo>() are delivered in the usual order; see "
7589 "B<signal>(7) for further details."
7593 #: build/C/man2/sigwaitinfo.2:81
7595 "B<sigtimedwait>() operates in exactly the same way as B<sigwaitinfo>() "
7596 "except that it has an additional argument, I<timeout>, which enables an "
7597 "upper bound to be placed on the time for which the thread is suspended. "
7598 "This argument is of the following type:"
7602 #: build/C/man2/sigwaitinfo.2:88
7605 "struct timespec {\n"
7606 " long tv_sec; /* seconds */\n"
7607 " long tv_nsec; /* nanoseconds */\n"
7612 #: build/C/man2/sigwaitinfo.2:98
7614 "If both fields of this structure are specified as 0, a poll is performed: "
7615 "B<sigtimedwait>() returns immediately, either with information about a "
7616 "signal that was pending for the caller, or with an error if none of the "
7617 "signals in I<set> was pending."
7621 #: build/C/man2/sigwaitinfo.2:107
7623 "On success, both B<sigwaitinfo>() and B<sigtimedwait>() return a signal "
7624 "number (i.e., a value greater than zero). On failure both calls return -1, "
7625 "with I<errno> set to indicate the error."
7629 #: build/C/man2/sigwaitinfo.2:116
7631 "No signal in I<set> was delivered within the I<timeout> period specified to "
7632 "B<sigtimedwait>()."
7636 #: build/C/man2/sigwaitinfo.2:122
7638 "The wait was interrupted by a signal handler; see B<signal>(7). (This "
7639 "handler was for a signal other than one of those in I<set>.)"
7643 #: build/C/man2/sigwaitinfo.2:126
7644 msgid "I<timeout> was invalid."
7648 #: build/C/man2/sigwaitinfo.2:145
7650 "In normal usage, the calling program blocks the signals in I<set> via a "
7651 "prior call to B<sigprocmask>(2) (so that the default disposition for these "
7652 "signals does not occur if they are delivered between successive calls to "
7653 "B<sigwaitinfo>() or B<sigtimedwait>()) and does not establish handlers for "
7654 "these signals. In a multithreaded program, the signal should be blocked in "
7655 "all threads to prevent the signal being delivered to a thread other than the "
7656 "one calling B<sigwaitinfo>() or B<sigtimedwait>())."
7660 #: build/C/man2/sigwaitinfo.2:150
7662 "The set of signals that is pending for a given thread is the union of the "
7663 "set of signals that is pending specifically for that thread and the set of "
7664 "signals that is pending for the process as a whole (see B<signal>(7))."
7668 #: build/C/man2/sigwaitinfo.2:156
7669 msgid "Attempts to wait for B<SIGKILL> and B<SIGSTOP> are silently ignored."
7673 #: build/C/man2/sigwaitinfo.2:165
7675 "If multiple threads of a process are blocked waiting for the same signal(s) "
7676 "in B<sigwaitinfo>() or B<sigtimedwait>(), then exactly one of the threads "
7677 "will actually receive the signal if it is delivered to the process as a "
7678 "whole; which of the threads receives the signal is indeterminate."
7682 #: build/C/man2/sigwaitinfo.2:174
7684 "POSIX leaves the meaning of a NULL value for the I<timeout> argument of "
7685 "B<sigtimedwait>() unspecified, permitting the possibility that this has the "
7686 "same meaning as a call to B<sigwaitinfo>(), and indeed this is what is done "
7691 #: build/C/man2/sigwaitinfo.2:179
7693 "On Linux, B<sigwaitinfo>() is a library function implemented on top of "
7694 "B<sigtimedwait>()."
7698 #: build/C/man2/sigwaitinfo.2:191
7700 "B<kill>(2), B<sigaction>(2), B<signal>(2), B<signalfd>(2), B<sigpending>(2), "
7701 "B<sigprocmask>(2), B<sigqueue>(3), B<sigsetops>(3), B<sigwait>(3), "
7702 "B<signal>(7), B<time>(7)"
7706 #: build/C/man3/sysv_signal.3:23
7712 #: build/C/man3/sysv_signal.3:23
7718 #: build/C/man3/sysv_signal.3:26
7719 msgid "sysv_signal - signal handling with System V semantics"
7723 #: build/C/man3/sysv_signal.3:28
7724 msgid "B<#define _GNU_SOURCE> /* See feature_test_macros(7) */"
7728 #: build/C/man3/sysv_signal.3:34
7729 msgid "B<sighandler_t sysv_signal(int >I<signum>B<, sighandler_t >I<handler>B<);>"
7733 #: build/C/man3/sysv_signal.3:39
7735 "The B<sysv_signal>() function takes the same arguments, and performs the "
7736 "same task, as B<signal>(2)."
7740 #: build/C/man3/sysv_signal.3:49
7742 "However B<sysv_signal>() provides the System V unreliable signal semantics, "
7743 "that is: a) the disposition of the signal is reset to the default when the "
7744 "handler is invoked; b) delivery of further instances of the signal is not "
7745 "blocked while the signal handler is executing; and c) if the handler "
7746 "interrupts (certain) blocking system calls, then the system call is not "
7747 "automatically restarted."
7751 #: build/C/man3/sysv_signal.3:55
7753 "The B<sysv_signal>() function returns the previous value of the signal "
7754 "handler, or B<SIG_ERR> on error."
7758 #: build/C/man3/sysv_signal.3:60
7759 msgid "This function is nonstandard."
7763 #: build/C/man3/sysv_signal.3:66
7764 msgid "Use of B<sysv_signal>() should be avoided; use B<sigaction>(2) instead."
7768 #: build/C/man3/sysv_signal.3:77
7770 "On older Linux systems, B<sysv_signal>() and B<signal>(2) were "
7771 "equivalent. But on newer systems, B<signal>(2) provides reliable signal "
7772 "semantics; see B<signal>(2) for details."
7776 #: build/C/man3/sysv_signal.3:90
7777 msgid "B<sigaction>(2), B<signal>(2), B<bsd_signal>(3), B<signal>(7)"
7781 #: build/C/man2/timer_create.2:29
7783 msgid "TIMER_CREATE"
7787 #: build/C/man2/timer_create.2:29
7793 #: build/C/man2/timer_create.2:32
7794 msgid "timer_create - create a POSIX per-process timer"
7798 #: build/C/man2/timer_create.2:36
7801 "B<#include E<lt>signal.hE<gt>>\n"
7802 "B<#include E<lt>time.hE<gt>>\n"
7806 #: build/C/man2/timer_create.2:39
7809 "B<int timer_create(clockid_t >I<clockid>B<, struct sigevent *>I<sevp>B<,>\n"
7810 "B< timer_t *>I<timerid>B<);>\n"
7814 #: build/C/man2/timer_create.2:42 build/C/man2/timer_delete.2:34 build/C/man2/timer_getoverrun.2:34 build/C/man2/timer_settime.2:38
7815 msgid "Link with I<-lrt>."
7819 #: build/C/man2/timer_create.2:50
7820 msgid "B<timer_create>(): _POSIX_C_SOURCE\\ E<gt>=\\ 199309L"
7824 #: build/C/man2/timer_create.2:58
7826 "B<timer_create>() creates a new per-process interval timer. The ID of the "
7827 "new timer is returned in the buffer pointed to by I<timerid>, which must be "
7828 "a non-NULL pointer. This ID is unique within the process, until the timer "
7829 "is deleted. The new timer is initially disarmed."
7833 #: build/C/man2/timer_create.2:63
7835 "The I<clockid> argument specifies the clock that the new timer uses to "
7836 "measure time. It can be specified as one of the following values:"
7840 #: build/C/man2/timer_create.2:63
7842 msgid "B<CLOCK_REALTIME>"
7846 #: build/C/man2/timer_create.2:66
7847 msgid "A settable system-wide real-time clock."
7851 #: build/C/man2/timer_create.2:66
7853 msgid "B<CLOCK_MONOTONIC>"
7856 #. Note: the CLOCK_MONOTONIC_RAW clock added for clock_gettime()
7857 #. in 2.6.28 is not supported for POSIX timers -- mtk, Feb 2009
7859 #: build/C/man2/timer_create.2:73
7861 "A nonsettable monotonically increasing clock that measures time from some "
7862 "unspecified point in the past that does not change after system startup."
7866 #: build/C/man2/timer_create.2:73
7868 msgid "B<CLOCK_PROCESS_CPUTIME_ID> (since Linux 2.6.12)"
7872 #: build/C/man2/timer_create.2:77
7874 "A clock that measures (user and system) CPU time consumed by (all of the "
7875 "threads in) the calling process."
7879 #: build/C/man2/timer_create.2:77
7881 msgid "B<CLOCK_THREAD_CPUTIME_ID> (since Linux 2.6.12)"
7884 #. The CLOCK_MONOTONIC_RAW that was added in 2.6.28 can't be used
7885 #. to create a timer -- mtk, Feb 2009
7887 #: build/C/man2/timer_create.2:83
7889 "A clock that measures (user and system) CPU time consumed by the calling "
7894 #: build/C/man2/timer_create.2:92
7896 "As well as the above values, I<clockid> can be specified as the I<clockid> "
7897 "returned by a call to B<clock_getcpuclockid>(3) or "
7898 "B<pthread_getcpuclockid>(3)."
7902 #: build/C/man2/timer_create.2:101
7904 "The I<sevp> argument points to a I<sigevent> structure that specifies how "
7905 "the caller should be notified when the timer expires. For the definition "
7906 "and general details of this structure, see B<sigevent>(7)."
7910 #: build/C/man2/timer_create.2:105
7911 msgid "The I<sevp.sigev_notify> field can have the following values:"
7915 #: build/C/man2/timer_create.2:110
7917 "Don't asynchronously notify when the timer expires. Progress of the timer "
7918 "can be monitored using B<timer_gettime>(2)."
7922 #: build/C/man2/timer_create.2:128
7924 "Upon timer expiration, generate the signal I<sigev_signo> for the process. "
7925 "See B<sigevent>(7) for general details. The I<si_code> field of the "
7926 "I<siginfo_t> structure will be set to B<SI_TIMER>. At any point in time, at "
7927 "most one signal is queued to the process for a given timer; see "
7928 "B<timer_getoverrun>(2) for more details."
7932 #: build/C/man2/timer_create.2:136
7934 "Upon timer expiration, invoke I<sigev_notify_function> as if it were the "
7935 "start function of a new thread. See B<sigevent>(7) for details."
7939 #: build/C/man2/timer_create.2:150
7941 "As for B<SIGEV_SIGNAL>, but the signal is targeted at the thread whose ID is "
7942 "given in I<sigev_notify_thread_id>, which must be a thread in the same "
7943 "process as the caller. The I<sigev_notify_thread_id> field specifies a "
7944 "kernel thread ID, that is, the value returned by B<clone>(2) or "
7945 "B<gettid>(2). This flag is only intended for use by threading libraries."
7949 #: build/C/man2/timer_create.2:165
7951 "Specifying I<sevp> as NULL is equivalent to specifying a pointer to a "
7952 "I<sigevent> structure in which I<sigev_notify> is B<SIGEV_SIGNAL>, "
7953 "I<sigev_signo> is B<SIGALRM>, and I<sigev_value.sival_int> is the timer ID."
7957 #: build/C/man2/timer_create.2:173
7959 "On success, B<timer_create>() returns 0, and the ID of the new timer is "
7960 "placed in I<*timerid>. On failure, -1 is returned, and I<errno> is set to "
7961 "indicate the error."
7965 #: build/C/man2/timer_create.2:177
7966 msgid "Temporary error during kernel allocation of timer structures."
7970 #: build/C/man2/timer_create.2:185
7972 "Clock ID, I<sigev_notify>, I<sigev_signo>, or I<sigev_notify_thread_id> is "
7976 #. glibc layer: malloc()
7978 #: build/C/man2/timer_create.2:189
7979 msgid "Could not allocate memory."
7983 #: build/C/man2/timer_create.2:191 build/C/man2/timer_delete.2:64 build/C/man2/timer_getoverrun.2:94
7984 msgid "This system call is available since Linux 2.6."
7988 #: build/C/man2/timer_create.2:196
7989 msgid "A program may create multiple interval timers using B<timer_create>()."
7993 #: build/C/man2/timer_create.2:201
7995 "Timers are not inherited by the child of a B<fork>(2), and are disarmed and "
7996 "deleted during an B<execve>(2)."
8000 #: build/C/man2/timer_create.2:209
8002 "The kernel preallocates a \"queued real-time signal\" for each timer created "
8003 "using B<timer_create>(). Consequently, the number of timers is limited by "
8004 "the B<RLIMIT_SIGPENDING> resource limit (see B<setrlimit>(2))."
8008 #: build/C/man2/timer_create.2:214
8010 "The timers created by B<timer_create>() are commonly known as \"POSIX "
8011 "(interval) timers\". The POSIX timers API consists of the following "
8016 #: build/C/man2/timer_create.2:217
8017 msgid "B<timer_create>(): Create a timer."
8021 #: build/C/man2/timer_create.2:220
8022 msgid "B<timer_settime>(2): Arm (start) or disarm (stop) a timer."
8026 #: build/C/man2/timer_create.2:224
8028 "B<timer_gettime>(2): Fetch the time remaining until the next expiration of a "
8029 "timer, along with the interval setting of the timer."
8033 #: build/C/man2/timer_create.2:227
8035 "B<timer_getoverrun>(2): Return the overrun count for the last timer "
8040 #: build/C/man2/timer_create.2:230
8041 msgid "B<timer_delete>(2): Disarm and delete a timer."
8045 #: build/C/man2/timer_create.2:233
8047 "Part of the implementation of the POSIX timers API is provided by glibc. In "
8052 #: build/C/man2/timer_create.2:237
8054 "The functionality for B<SIGEV_THREAD> is implemented within glibc, rather "
8058 #. See the glibc source file kernel-posix-timers.h for the structure
8059 #. that glibc uses to map userspace timer IDs to kernel timer IDs
8060 #. The kernel-level timer ID is exposed via siginfo.si_tid.
8062 #: build/C/man2/timer_create.2:243
8064 "The timer IDs presented at user level are maintained by glibc, which maps "
8065 "these IDs to the timer IDs employed by the kernel."
8069 #: build/C/man2/timer_create.2:251
8071 "The POSIX timers system calls first appeared in Linux 2.6. Prior to this, "
8072 "glibc provided an incomplete userspace implementation (B<CLOCK_REALTIME> "
8073 "timers only) using POSIX threads, and current glibc falls back to this "
8074 "implementation on systems running pre-2.6 Linux kernels."
8078 #: build/C/man2/timer_create.2:263
8080 "The program below takes two arguments: a sleep period in seconds, and a "
8081 "timer frequency in nanoseconds. The program establishes a handler for the "
8082 "signal it uses for the timer, blocks that signal, creates and arms a timer "
8083 "that expires with the given frequency, sleeps for the specified number of "
8084 "seconds, and then unblocks the timer signal. Assuming that the timer "
8085 "expired at least once while the program slept, the signal handler will be "
8086 "invoked, and the handler displays some information about the timer "
8087 "notification. The program terminates after one invocation of the signal "
8092 #: build/C/man2/timer_create.2:268
8094 "In the following example run, the program sleeps for 1 second, after "
8095 "creating a timer that has a frequency of 100 nanoseconds. By the time the "
8096 "signal is unblocked and delivered, there have been around ten million "
8101 #: build/C/man2/timer_create.2:280
8104 "$ B<./a.out 1 100>\n"
8105 "Establishing handler for signal 34\n"
8106 "Blocking signal 34\n"
8107 "timer ID is 0x804c008\n"
8108 "Sleeping for 1 seconds\n"
8109 "Unblocking signal 34\n"
8110 "Caught signal 34\n"
8111 " sival_ptr = 0xbfb174f4; *sival_ptr = 0x804c008\n"
8112 " overrun count = 10004886\n"
8116 #: build/C/man2/timer_create.2:282
8118 msgid "Program Source"
8122 #: build/C/man2/timer_create.2:290
8125 "#include E<lt>stdlib.hE<gt>\n"
8126 "#include E<lt>unistd.hE<gt>\n"
8127 "#include E<lt>stdio.hE<gt>\n"
8128 "#include E<lt>signal.hE<gt>\n"
8129 "#include E<lt>time.hE<gt>\n"
8133 #: build/C/man2/timer_create.2:293
8136 "#define CLOCKID CLOCK_REALTIME\n"
8137 "#define SIG SIGRTMIN\n"
8141 #: build/C/man2/timer_create.2:296
8144 "#define errExit(msg) do { perror(msg); exit(EXIT_FAILURE); \\e\n"
8149 #: build/C/man2/timer_create.2:302
8153 "print_siginfo(siginfo_t *si)\n"
8160 #: build/C/man2/timer_create.2:304
8162 msgid " tidp = si-E<gt>si_value.sival_ptr;\n"
8166 #: build/C/man2/timer_create.2:307
8169 " printf(\" sival_ptr = %p; \", si-E<gt>si_value.sival_ptr);\n"
8170 " printf(\" *sival_ptr = 0x%lx\\en\", (long) *tidp);\n"
8174 #: build/C/man2/timer_create.2:314
8177 " or = timer_getoverrun(*tidp);\n"
8179 " errExit(\"timer_getoverrun\");\n"
8181 " printf(\" overrun count = %d\\en\", or);\n"
8186 #: build/C/man2/timer_create.2:321
8190 "handler(int sig, siginfo_t *si, void *uc)\n"
8192 " /* Note: calling printf() from a signal handler is not\n"
8193 " strictly correct, since printf() is not async-signal-safe;\n"
8194 " see signal(7) */\n"
8198 #: build/C/man2/timer_create.2:326
8201 " printf(\"Caught signal %d\\en\", sig);\n"
8202 " print_siginfo(si);\n"
8203 " signal(sig, SIG_IGN);\n"
8208 #: build/C/man2/timer_create.2:336
8212 "main(int argc, char *argv[])\n"
8214 " timer_t timerid;\n"
8215 " struct sigevent sev;\n"
8216 " struct itimerspec its;\n"
8217 " long long freq_nanosecs;\n"
8219 " struct sigaction sa;\n"
8223 #: build/C/man2/timer_create.2:342
8226 " if (argc != 3) {\n"
8227 " fprintf(stderr, \"Usage: %s E<lt>sleep-secsE<gt> "
8228 "E<lt>freq-nanosecsE<gt>\\en\",\n"
8230 " exit(EXIT_FAILURE);\n"
8235 #: build/C/man2/timer_create.2:344
8237 msgid " /* Establish handler for timer signal */\n"
8241 #: build/C/man2/timer_create.2:351
8244 " printf(\"Establishing handler for signal %d\\en\", SIG);\n"
8245 " sa.sa_flags = SA_SIGINFO;\n"
8246 " sa.sa_sigaction = handler;\n"
8247 " sigemptyset(&sa.sa_mask);\n"
8248 " if (sigaction(SIG, &sa, NULL) == -1)\n"
8249 " errExit(\"sigaction\");\n"
8253 #: build/C/man2/timer_create.2:353
8255 msgid " /* Block timer signal temporarily */\n"
8259 #: build/C/man2/timer_create.2:359
8262 " printf(\"Blocking signal %d\\en\", SIG);\n"
8263 " sigemptyset(&mask);\n"
8264 " sigaddset(&mask, SIG);\n"
8265 " if (sigprocmask(SIG_SETMASK, &mask, NULL) == -1)\n"
8266 " errExit(\"sigprocmask\");\n"
8270 #: build/C/man2/timer_create.2:361
8272 msgid " /* Create the timer */\n"
8276 #: build/C/man2/timer_create.2:367
8279 " sev.sigev_notify = SIGEV_SIGNAL;\n"
8280 " sev.sigev_signo = SIG;\n"
8281 " sev.sigev_value.sival_ptr = &timerid;\n"
8282 " if (timer_create(CLOCKID, &sev, &timerid) == -1)\n"
8283 " errExit(\"timer_create\");\n"
8287 #: build/C/man2/timer_create.2:369
8289 msgid " printf(\"timer ID is 0x%lx\\en\", (long) timerid);\n"
8293 #: build/C/man2/timer_create.2:371
8295 msgid " /* Start the timer */\n"
8299 #: build/C/man2/timer_create.2:377
8302 " freq_nanosecs = atoll(argv[2]);\n"
8303 " its.it_value.tv_sec = freq_nanosecs / 1000000000;\n"
8304 " its.it_value.tv_nsec = freq_nanosecs % 1000000000;\n"
8305 " its.it_interval.tv_sec = its.it_value.tv_sec;\n"
8306 " its.it_interval.tv_nsec = its.it_value.tv_nsec;\n"
8310 #: build/C/man2/timer_create.2:380
8313 " if (timer_settime(timerid, 0, &its, NULL) == -1)\n"
8314 " errExit(\"timer_settime\");\n"
8318 #: build/C/man2/timer_create.2:383
8321 " /* Sleep for a while; meanwhile, the timer may expire\n"
8322 " multiple times */\n"
8326 #: build/C/man2/timer_create.2:386
8329 " printf(\"Sleeping for %d seconds\\en\", atoi(argv[1]));\n"
8330 " sleep(atoi(argv[1]));\n"
8334 #: build/C/man2/timer_create.2:389
8337 " /* Unlock the timer signal, so that timer notification\n"
8338 " can be delivered */\n"
8342 #: build/C/man2/timer_create.2:393
8345 " printf(\"Unblocking signal %d\\en\", SIG);\n"
8346 " if (sigprocmask(SIG_UNBLOCK, &mask, NULL) == -1)\n"
8347 " errExit(\"sigprocmask\");\n"
8351 #: build/C/man2/timer_create.2:396 build/C/man2/timerfd_create.2:533
8354 " exit(EXIT_SUCCESS);\n"
8359 #: build/C/man2/timer_create.2:410
8361 "B<clock_gettime>(2), B<setitimer>(2), B<timer_delete>(2), "
8362 "B<timer_getoverrun>(2), B<timer_settime>(2), B<timerfd_create>(2), "
8363 "B<clock_getcpuclockid>(3), B<pthread_getcpuclockid>(3), B<pthreads>(7), "
8364 "B<sigevent>(7), B<signal>(7), B<time>(7)"
8368 #: build/C/man2/timer_delete.2:23
8370 msgid "TIMER_DELETE"
8374 #: build/C/man2/timer_delete.2:23 build/C/man2/timer_getoverrun.2:23 build/C/man2/timer_settime.2:23
8380 #: build/C/man2/timer_delete.2:26
8381 msgid "timer_delete - delete a POSIX per-process timer"
8385 #: build/C/man2/timer_delete.2:29 build/C/man2/timer_getoverrun.2:29 build/C/man2/timer_settime.2:30
8387 msgid "B<#include E<lt>time.hE<gt>>\n"
8391 #: build/C/man2/timer_delete.2:31
8393 msgid "B<int timer_delete(timer_t >I<timerid>B<);>\n"
8397 #: build/C/man2/timer_delete.2:42
8398 msgid "B<timer_delete>(): _POSIX_C_SOURCE\\ E<gt>=\\ 199309L"
8402 #: build/C/man2/timer_delete.2:50
8404 "B<timer_delete>() deletes the timer whose ID is given in I<timerid>. If "
8405 "the timer was armed at the time of this call, it is disarmed before being "
8406 "deleted. The treatment of any pending signal generated by the deleted timer "
8411 #: build/C/man2/timer_delete.2:57
8413 "On success, B<timer_delete>() returns 0. On failure, -1 is returned, and "
8414 "I<errno> is set to indicate the error."
8418 #: build/C/man2/timer_delete.2:62 build/C/man2/timer_getoverrun.2:92
8419 msgid "I<timerid> is not a valid timer ID."
8423 #: build/C/man2/timer_delete.2:72
8425 "B<clock_gettime>(2), B<timer_create>(2), B<timer_getoverrun>(2), "
8426 "B<timer_settime>(2), B<time>(7)"
8430 #: build/C/man2/timer_getoverrun.2:23
8432 msgid "TIMER_GETOVERRUN"
8436 #: build/C/man2/timer_getoverrun.2:26
8437 msgid "timer_getoverrun - get overrun count for a POSIX per-process timer"
8441 #: build/C/man2/timer_getoverrun.2:31
8443 msgid "B<int timer_getoverrun(timer_t >I<timerid>B<);>\n"
8447 #: build/C/man2/timer_getoverrun.2:42
8448 msgid "B<timer_getoverrun>(): _POSIX_C_SOURCE\\ E<gt>=\\ 199309L"
8452 #: build/C/man2/timer_getoverrun.2:53
8454 "B<timer_getoverrun>() returns the \"overrun count\" for the timer referred "
8455 "to by I<timerid>. An application can use the overrun count to accurately "
8456 "calculate the number of timer expirations that would have occurred over a "
8457 "given time interval. Timer overruns can occur both when receiving "
8458 "expiration notifications via signals (B<SIGEV_SIGNAL>), and via threads "
8459 "(B<SIGEV_THREAD>)."
8463 #: build/C/man2/timer_getoverrun.2:73
8465 "When expiration notifications are delivered via a signal, overruns can occur "
8466 "as follows. Regardless of whether or not a real-time signal is used for "
8467 "timer notifications, the system queues at most one signal per timer. (This "
8468 "is the behavior specified by POSIX.1-2001. The alternative, queuing one "
8469 "signal for each timer expiration, could easily result in overflowing the "
8470 "allowed limits for queued signals on the system.) Because of system "
8471 "scheduling delays, or because the signal may be temporarily blocked, there "
8472 "can be a delay between the time when the notification signal is generated "
8473 "and the time when it is delivered (e.g., caught by a signal handler) or "
8474 "accepted (e.g., using B<sigwaitinfo>(2)). In this interval, further timer "
8475 "expirations may occur. The timer overrun count is the number of additional "
8476 "timer expirations that occurred between the time when the signal was "
8477 "generated and when it was delivered or accepted."
8481 #: build/C/man2/timer_getoverrun.2:79
8483 "Timer overruns can also occur when expiration notifications are delivered "
8484 "via invocation of a thread, since there may be an arbitrary delay between an "
8485 "expiration of the timer and the invocation of the notification thread, and "
8486 "in that delay interval, additional timer expirations may occur"
8490 #: build/C/man2/timer_getoverrun.2:87
8492 "On success, B<timer_getoverrun>() returns the overrun count of the "
8493 "specified timer; this count may be 0 if no overruns have occurred. On "
8494 "failure, -1 is returned, and I<errno> is set to indicate the error."
8498 #: build/C/man2/timer_getoverrun.2:108
8500 "When timer notifications are delivered via signals (B<SIGEV_SIGNAL>), on "
8501 "Linux it is also possible to obtain the overrun count via the I<si_overrun> "
8502 "field of the I<siginfo_t> structure (see B<sigaction>(2)). This allows an "
8503 "application to avoid the overhead of making a system call to obtain the "
8504 "overrun count, but is a nonportable extension to POSIX.1-2001."
8507 #. FIXME . Austin bug filed, 11 Feb 09
8509 #: build/C/man2/timer_getoverrun.2:112
8511 "POSIX.1-2001 only discusses timer overruns in the context of timer "
8512 "notifications using signals."
8515 #. Bug filed: http://bugzilla.kernel.org/show_bug.cgi?id=12665
8516 #. http://thread.gmane.org/gmane.linux.kernel/113276/
8518 #: build/C/man2/timer_getoverrun.2:125
8520 "POSIX.1-2001 specifies that if the timer overrun count is equal to or "
8521 "greater than an implementation-defined maximum, B<DELAYTIMER_MAX>, then "
8522 "B<timer_getoverrun>() should return B<DELAYTIMER_MAX>. However, Linux does "
8523 "not implement this feature: instead, if the timer overrun value exceeds the "
8524 "maximum representable integer, the counter cycles, starting once more from "
8529 #: build/C/man2/timer_getoverrun.2:128 build/C/man2/timer_settime.2:208
8530 msgid "See B<timer_create>(2)."
8534 #: build/C/man2/timer_getoverrun.2:138
8536 "B<clock_gettime>(2), B<sigaction>(2), B<signalfd>(2), B<sigwaitinfo>(2), "
8537 "B<timer_create>(2), B<timer_delete>(2), B<timer_settime>(2), B<signal>(7), "
8542 #: build/C/man2/timer_settime.2:23
8544 msgid "TIMER_SETTIME"
8548 #: build/C/man2/timer_settime.2:27
8550 "timer_settime, timer_gettime - arm/disarm and fetch state of POSIX "
8555 #: build/C/man2/timer_settime.2:35
8558 "B<int timer_settime(timer_t >I<timerid>B<, int >I<flags>B<,>\n"
8559 "B< const struct itimerspec *>I<new_value>B<,>\n"
8560 "B< struct itimerspec * >I<old_value>B<);>\n"
8561 "B<int timer_gettime(timer_t >I<timerid>B<, struct itimerspec "
8562 "*>I<curr_value>B<);>\n"
8566 #: build/C/man2/timer_settime.2:47
8567 msgid "B<timer_settime>(), B<timer_gettime>(): _POSIX_C_SOURCE\\ E<gt>=\\ 199309L"
8571 #: build/C/man2/timer_settime.2:60
8573 "B<timer_settime>() arms or disarms the timer identified by I<timerid>. The "
8574 "I<new_value> argument is an I<itimerspec> structure that specifies the new "
8575 "initial value and the new interval for the timer. The I<itimerspec> "
8576 "structure is defined as follows:"
8580 #: build/C/man2/timer_settime.2:67 build/C/man2/timerfd_create.2:127
8583 "struct timespec {\n"
8584 " time_t tv_sec; /* Seconds */\n"
8585 " long tv_nsec; /* Nanoseconds */\n"
8590 #: build/C/man2/timer_settime.2:72
8593 "struct itimerspec {\n"
8594 " struct timespec it_interval; /* Timer interval */\n"
8595 " struct timespec it_value; /* Initial expiration */\n"
8600 #: build/C/man2/timer_settime.2:84
8602 "Each of the substructures of the I<itimerspec> structure is a I<timespec> "
8603 "structure that allows a time value to be specified in seconds and "
8604 "nanoseconds. These time values are measured according to the clock that was "
8605 "specified when the timer was created by B<timer_create>(2)"
8609 #: build/C/man2/timer_settime.2:98
8611 "If I<new_value-E<gt>it_value> specifies a nonzero value (i.e., either "
8612 "subfield is nonzero), then B<timer_settime>() arms (starts) the timer, "
8613 "setting it to initially expire at the given time. (If the timer was already "
8614 "armed, then the previous settings are overwritten.) If "
8615 "I<new_value-E<gt>it_value> specifies a zero value (i.e., both subfields are "
8616 "zero), then the timer is disarmed."
8620 #: build/C/man2/timer_settime.2:110
8622 "The I<new_value-E<gt>it_interval> field specifies the period of the timer, "
8623 "in seconds and nanoseconds. If this field is nonzero, then each time that "
8624 "an armed timer expires, the timer is reloaded from the value specified in "
8625 "I<new_value-E<gt>it_interval>. If I<new_value-E<gt>it_interval> specifies a "
8626 "zero value then the timer expires just once, at the time specified by "
8630 #. By experiment: the overrun count is set correctly, for CLOCK_REALTIME.
8632 #: build/C/man2/timer_settime.2:131
8634 "By default, the initial expiration time specified in "
8635 "I<new_value-E<gt>it_value> is interpreted relative to the current time on "
8636 "the timer's clock at the time of the call. This can be modified by "
8637 "specifying B<TIMER_ABSTIME> in I<flags>, in which case "
8638 "I<new_value-E<gt>it_value> is interpreted as an absolute value as measured "
8639 "on the timer's clock; that is, the timer will expire when the clock value "
8640 "reaches the value specified by I<new_value-E<gt>it_value>. If the specified "
8641 "absolute time has already passed, then the timer expires immediately, and "
8642 "the overrun count (see B<timer_getoverrun>(2)) will be set correctly."
8645 #. Similar remarks might apply with respect to process and thread CPU time
8646 #. clocks, but these clocks are not currently (2.6.28) settable on Linux.
8648 #: build/C/man2/timer_settime.2:141
8650 "If the value of the B<CLOCK_REALTIME> clock is adjusted while an absolute "
8651 "timer based on that clock is armed, then the expiration of the timer will be "
8652 "appropriately adjusted. Adjustments to the B<CLOCK_REALTIME> clock have no "
8653 "effect on relative timers based on that clock."
8657 #: build/C/man2/timer_settime.2:149
8659 "If I<old_value> is not NULL, then it returns the previous interval of the "
8660 "timer (in I<old_value-E<gt>it_interval>) and the amount of time until the "
8661 "timer would previously have next expired (in I<old_value-E<gt>it_value>)."
8665 #: build/C/man2/timer_settime.2:169
8667 "B<timer_gettime>() returns the time until next expiration, and the "
8668 "interval, for the timer specified by I<timerid>, in the buffer pointed to by "
8669 "I<curr_value>. The time remaining until the next timer expiration is "
8670 "returned in I<curr_value-E<gt>it_value>; this is always a relative value, "
8671 "regardless of whether the B<TIMER_ABSTIME> flag was used when arming the "
8672 "timer. If the value returned in I<curr_value-E<gt>it_value> is zero, then "
8673 "the timer is currently disarmed. The timer interval is returned in "
8674 "I<curr_value-E<gt>it_interval>. If the value returned in "
8675 "I<curr_value-E<gt>it_interval> is zero, then this is a \"one-shot\" timer."
8679 #: build/C/man2/timer_settime.2:178
8681 "On success, B<timer_settime>() and B<timer_gettime>() return 0. On error, "
8682 "-1 is returned, and I<errno> is set to indicate the error."
8686 #: build/C/man2/timer_settime.2:180
8687 msgid "These functions may fail with the following errors:"
8691 #: build/C/man2/timer_settime.2:187
8692 msgid "I<new_value>, I<old_value>, or I<curr_value> is not a valid pointer."
8695 #. FIXME . eventually: invalid value in flags
8697 #: build/C/man2/timer_settime.2:192
8698 msgid "I<timerid> is invalid."
8702 #: build/C/man2/timer_settime.2:195
8703 msgid "B<timer_settime>() may fail with the following errors:"
8707 #: build/C/man2/timer_settime.2:201
8709 "I<new_value.it_value> is negative; or I<new_value.it_value.tv_nsec> is "
8710 "negative or greater than 999,999,999."
8714 #: build/C/man2/timer_settime.2:203
8715 msgid "These system calls are available since Linux 2.6."
8719 #: build/C/man2/timer_settime.2:212
8720 msgid "B<timer_create>(2), B<timer_getoverrun>(2), B<time>(7)"
8724 #: build/C/man2/timerfd_create.2:20
8726 msgid "TIMERFD_CREATE"
8730 #: build/C/man2/timerfd_create.2:20
8736 #: build/C/man2/timerfd_create.2:24
8738 "timerfd_create, timerfd_settime, timerfd_gettime - timers that notify via "
8743 #: build/C/man2/timerfd_create.2:27
8745 msgid "B<#include E<lt>sys/timerfd.hE<gt>>\n"
8749 #: build/C/man2/timerfd_create.2:29
8751 msgid "B<int timerfd_create(int >I<clockid>B<, int >I<flags>B<);>\n"
8755 #: build/C/man2/timerfd_create.2:33
8758 "B<int timerfd_settime(int >I<fd>B<, int >I<flags>B<,>\n"
8759 "B< const struct itimerspec *>I<new_value>B<,>\n"
8760 "B< struct itimerspec *>I<old_value>B<);>\n"
8764 #: build/C/man2/timerfd_create.2:35
8766 msgid "B<int timerfd_gettime(int >I<fd>B<, struct itimerspec *>I<curr_value>B<);>\n"
8770 #: build/C/man2/timerfd_create.2:48
8772 "These system calls create and operate on a timer that delivers timer "
8773 "expiration notifications via a file descriptor. They provide an alternative "
8774 "to the use of B<setitimer>(2) or B<timer_create>(2), with the advantage "
8775 "that the file descriptor may be monitored by B<select>(2), B<poll>(2), and "
8780 #: build/C/man2/timerfd_create.2:60
8782 "The use of these three system calls is analogous to the use of "
8783 "B<timer_create>(2), B<timer_settime>(2), and B<timer_gettime>(2). (There is "
8784 "no analog of B<timer_getoverrun>(2), since that functionality is provided by "
8785 "B<read>(2), as described below.)"
8789 #: build/C/man2/timerfd_create.2:60
8791 msgid "timerfd_create()"
8795 #: build/C/man2/timerfd_create.2:79
8797 "B<timerfd_create>() creates a new timer object, and returns a file "
8798 "descriptor that refers to that timer. The I<clockid> argument specifies the "
8799 "clock that is used to mark the progress of the timer, and must be either "
8800 "B<CLOCK_REALTIME> or B<CLOCK_MONOTONIC>. B<CLOCK_REALTIME> is a settable "
8801 "system-wide clock. B<CLOCK_MONOTONIC> is a nonsettable clock that is not "
8802 "affected by discontinuous changes in the system clock (e.g., manual changes "
8803 "to system time). The current value of each of these clocks can be retrieved "
8804 "using B<clock_gettime>(2)."
8808 #: build/C/man2/timerfd_create.2:84
8810 "Starting with Linux 2.6.27, the following values may be bitwise ORed in "
8811 "I<flags> to change the behavior of B<timerfd_create>():"
8815 #: build/C/man2/timerfd_create.2:84
8817 msgid "B<TFD_NONBLOCK>"
8821 #: build/C/man2/timerfd_create.2:92
8823 msgid "B<TFD_CLOEXEC>"
8827 #: build/C/man2/timerfd_create.2:106
8829 "In Linux versions up to and including 2.6.26, I<flags> must be specified as "
8834 #: build/C/man2/timerfd_create.2:106
8836 msgid "timerfd_settime()"
8840 #: build/C/man2/timerfd_create.2:111
8842 "B<timerfd_settime>() arms (starts) or disarms (stops) the timer referred "
8843 "to by the file descriptor I<fd>."
8847 #: build/C/man2/timerfd_create.2:120
8849 "The I<new_value> argument specifies the initial expiration and interval for "
8850 "the timer. The I<itimer> structure used for this argument contains two "
8851 "fields, each of which is in turn a structure of type I<timespec>:"
8855 #: build/C/man2/timerfd_create.2:132
8858 "struct itimerspec {\n"
8859 " struct timespec it_interval; /* Interval for periodic timer */\n"
8860 " struct timespec it_value; /* Initial expiration */\n"
8865 #: build/C/man2/timerfd_create.2:144
8867 "I<new_value.it_value> specifies the initial expiration of the timer, in "
8868 "seconds and nanoseconds. Setting either field of I<new_value.it_value> to a "
8869 "nonzero value arms the timer. Setting both fields of I<new_value.it_value> "
8870 "to zero disarms the timer."
8874 #: build/C/man2/timerfd_create.2:153
8876 "Setting one or both fields of I<new_value.it_interval> to nonzero values "
8877 "specifies the period, in seconds and nanoseconds, for repeated timer "
8878 "expirations after the initial expiration. If both fields of "
8879 "I<new_value.it_interval> are zero, the timer expires just once, at the time "
8880 "specified by I<new_value.it_value>."
8884 #: build/C/man2/timerfd_create.2:169
8886 "The I<flags> argument is either 0, to start a relative timer "
8887 "(I<new_value.it_value> specifies a time relative to the current value of the "
8888 "clock specified by I<clockid>), or B<TFD_TIMER_ABSTIME>, to start an "
8889 "absolute timer (I<new_value.it_value> specifies an absolute time for the "
8890 "clock specified by I<clockid>; that is, the timer will expire when the value "
8891 "of that clock reaches the value specified in I<new_value.it_value>)."
8895 #: build/C/man2/timerfd_create.2:180
8897 "If the I<old_value> argument is not NULL, then the I<itimerspec> structure "
8898 "that it points to is used to return the setting of the timer that was "
8899 "current at the time of the call; see the description of B<timerfd_gettime>() "
8904 #: build/C/man2/timerfd_create.2:180
8906 msgid "timerfd_gettime()"
8910 #: build/C/man2/timerfd_create.2:189
8912 "B<timerfd_gettime>() returns, in I<curr_value>, an I<itimerspec> structure "
8913 "that contains the current setting of the timer referred to by the file "
8918 #: build/C/man2/timerfd_create.2:199
8920 "The I<it_value> field returns the amount of time until the timer will next "
8921 "expire. If both fields of this structure are zero, then the timer is "
8922 "currently disarmed. This field always contains a relative value, regardless "
8923 "of whether the B<TFD_TIMER_ABSTIME> flag was specified when setting the "
8928 #: build/C/man2/timerfd_create.2:206
8930 "The I<it_interval> field returns the interval of the timer. If both fields "
8931 "of this structure are zero, then the timer is set to expire just once, at "
8932 "the time specified by I<curr_value.it_value>."
8936 #: build/C/man2/timerfd_create.2:206
8938 msgid "Operating on a timer file descriptor"
8942 #: build/C/man2/timerfd_create.2:210
8944 "The file descriptor returned by B<timerfd_create>() supports the following "
8949 #: build/C/man2/timerfd_create.2:224
8951 "If the timer has already expired one or more times since its settings were "
8952 "last modified using B<timerfd_settime>(), or since the last successful "
8953 "B<read>(2), then the buffer given to B<read>(2) returns an unsigned 8-byte "
8954 "integer (I<uint64_t>) containing the number of expirations that have "
8955 "occurred. (The returned value is in host byte order, i.e., the native byte "
8956 "order for integers on the host machine.)"
8960 #: build/C/man2/timerfd_create.2:237
8962 "If no timer expirations have occurred at the time of the B<read>(2), then "
8963 "the call either blocks until the next timer expiration, or fails with the "
8964 "error B<EAGAIN> if the file descriptor has been made nonblocking (via the "
8965 "use of the B<fcntl>(2) B<F_SETFL> operation to set the B<O_NONBLOCK> flag)."
8969 #: build/C/man2/timerfd_create.2:243
8971 "A B<read>(2) will fail with the error B<EINVAL> if the size of the supplied "
8972 "buffer is less than 8 bytes."
8976 #: build/C/man2/timerfd_create.2:254
8978 "The file descriptor is readable (the B<select>(2) I<readfds> argument; the "
8979 "B<poll>(2) B<POLLIN> flag) if one or more timer expirations have occurred."
8983 #: build/C/man2/timerfd_create.2:261
8985 "The file descriptor also supports the other file-descriptor multiplexing "
8986 "APIs: B<pselect>(2), B<ppoll>(2), and B<epoll>(7)."
8990 #: build/C/man2/timerfd_create.2:268
8992 "When the file descriptor is no longer required it should be closed. When "
8993 "all file descriptors associated with the same timer object have been closed, "
8994 "the timer is disarmed and its resources are freed by the kernel."
8998 #: build/C/man2/timerfd_create.2:280
9000 "After a B<fork>(2), the child inherits a copy of the file descriptor created "
9001 "by B<timerfd_create>(). The file descriptor refers to the same underlying "
9002 "timer object as the corresponding file descriptor in the parent, and "
9003 "B<read>(2)s in the child will return information about expirations of the "
9008 #: build/C/man2/timerfd_create.2:286
9010 "A file descriptor created by B<timerfd_create>() is preserved across "
9011 "B<execve>(2), and continues to generate timer expirations if the timer was "
9016 #: build/C/man2/timerfd_create.2:293
9018 "On success, B<timerfd_create>() returns a new file descriptor. On error, "
9019 "-1 is returned and I<errno> is set to indicate the error."
9023 #: build/C/man2/timerfd_create.2:301
9025 "B<timerfd_settime>() and B<timerfd_gettime>() return 0 on success; on "
9026 "error they return -1, and set I<errno> to indicate the error."
9030 #: build/C/man2/timerfd_create.2:304
9031 msgid "B<timerfd_create>() can fail with the following errors:"
9035 #: build/C/man2/timerfd_create.2:312
9036 msgid "The I<clockid> argument is neither B<CLOCK_MONOTONIC> nor B<CLOCK_REALTIME>;"
9040 #: build/C/man2/timerfd_create.2:332
9041 msgid "There was insufficient kernel memory to create the timer."
9045 #: build/C/man2/timerfd_create.2:337
9047 "B<timerfd_settime>() and B<timerfd_gettime>() can fail with the following "
9052 #: build/C/man2/timerfd_create.2:341
9053 msgid "I<fd> is not a valid file descriptor."
9057 #: build/C/man2/timerfd_create.2:352
9058 msgid "I<fd> is not a valid timerfd file descriptor."
9062 #: build/C/man2/timerfd_create.2:355
9063 msgid "B<timerfd_settime>() can also fail with the following errors:"
9067 #: build/C/man2/timerfd_create.2:361
9069 "I<new_value> is not properly initialized (one of the I<tv_nsec> falls "
9070 "outside the range zero to 999,999,999)."
9073 #. This case only checked since 2.6.29, and 2.2.2[78].some-stable-version.
9074 #. In older kernel versions, no check was made for invalid flags.
9076 #: build/C/man2/timerfd_create.2:367
9077 msgid "I<flags> is invalid."
9081 #: build/C/man2/timerfd_create.2:370
9083 "These system calls are available on Linux since kernel 2.6.25. Library "
9084 "support is provided by glibc since version 2.8."
9088 #: build/C/man2/timerfd_create.2:381
9090 "The following program creates a timer and then monitors its progress. The "
9091 "program accepts up to three command-line arguments. The first argument "
9092 "specifies the number of seconds for the initial expiration of the timer. "
9093 "The second argument specifies the interval for the timer, in seconds. The "
9094 "third argument specifies the number of times the program should allow the "
9095 "timer to expire before terminating. The second and third command-line "
9096 "arguments are optional."
9100 #: build/C/man2/timerfd_create.2:383 build/C/man2/wait.2:541
9101 msgid "The following shell session demonstrates the use of the program:"
9105 #: build/C/man2/timerfd_create.2:398
9108 "$B< a.out 3 1 100>\n"
9109 "0.000: timer started\n"
9110 "3.000: read: 1; total=1\n"
9111 "4.000: read: 1; total=2\n"
9112 "B<^Z > # type control-Z to suspend the program\n"
9113 "[1]+ Stopped ./timerfd3_demo 3 1 100\n"
9114 "$ B<fg> # Resume execution after a few seconds\n"
9116 "9.660: read: 5; total=7\n"
9117 "10.000: read: 1; total=8\n"
9118 "11.000: read: 1; total=9\n"
9119 "B<^C > # type control-C to suspend the program\n"
9122 #. The commented out code here is what we currently need until
9123 #. the required stuff is in glibc
9126 #. /* Link with -lrt */
9127 #. #define _GNU_SOURCE
9128 #. #include <sys/syscall.h>
9129 #. #include <unistd.h>
9130 #. #include <time.h>
9131 #. #if defined(__i386__)
9132 #. #define __NR_timerfd_create 322
9133 #. #define __NR_timerfd_settime 325
9134 #. #define __NR_timerfd_gettime 326
9138 #. timerfd_create(int clockid, int flags)
9140 #. return syscall(__NR_timerfd_create, clockid, flags);
9144 #. timerfd_settime(int fd, int flags, struct itimerspec *new_value,
9145 #. struct itimerspec *curr_value)
9147 #. return syscall(__NR_timerfd_settime, fd, flags, new_value,
9152 #. timerfd_gettime(int fd, struct itimerspec *curr_value)
9154 #. return syscall(__NR_timerfd_gettime, fd, curr_value);
9157 #. #define TFD_TIMER_ABSTIME (1 << 0)
9159 #. ////////////////////////////////////////////////////////////
9161 #: build/C/man2/timerfd_create.2:447
9164 "#include E<lt>sys/timerfd.hE<gt>\n"
9165 "#include E<lt>time.hE<gt>\n"
9166 "#include E<lt>unistd.hE<gt>\n"
9167 "#include E<lt>stdlib.hE<gt>\n"
9168 "#include E<lt>stdio.hE<gt>\n"
9169 "#include E<lt>stdint.hE<gt> /* Definition of uint64_t */\n"
9173 #: build/C/man2/timerfd_create.2:450
9176 "#define handle_error(msg) \\e\n"
9177 " do { perror(msg); exit(EXIT_FAILURE); } while (0)\n"
9181 #: build/C/man2/timerfd_create.2:458
9185 "print_elapsed_time(void)\n"
9187 " static struct timespec start;\n"
9188 " struct timespec curr;\n"
9189 " static int first_call = 1;\n"
9190 " int secs, nsecs;\n"
9194 #: build/C/man2/timerfd_create.2:464
9197 " if (first_call) {\n"
9198 " first_call = 0;\n"
9199 " if (clock_gettime(CLOCK_MONOTONIC, &start) == -1)\n"
9200 " handle_error(\"clock_gettime\");\n"
9205 #: build/C/man2/timerfd_create.2:467
9208 " if (clock_gettime(CLOCK_MONOTONIC, &curr) == -1)\n"
9209 " handle_error(\"clock_gettime\");\n"
9213 #: build/C/man2/timerfd_create.2:476
9216 " secs = curr.tv_sec - start.tv_sec;\n"
9217 " nsecs = curr.tv_nsec - start.tv_nsec;\n"
9218 " if (nsecs E<lt> 0) {\n"
9220 " nsecs += 1000000000;\n"
9222 " printf(\"%d.%03d: \", secs, (nsecs + 500000) / 1000000);\n"
9227 #: build/C/man2/timerfd_create.2:485
9231 "main(int argc, char *argv[])\n"
9233 " struct itimerspec new_value;\n"
9234 " int max_exp, fd;\n"
9235 " struct timespec now;\n"
9236 " uint64_t exp, tot_exp;\n"
9241 #: build/C/man2/timerfd_create.2:491
9244 " if ((argc != 2) && (argc != 4)) {\n"
9245 " fprintf(stderr, \"%s init-secs [interval-secs max-exp]\\en\",\n"
9247 " exit(EXIT_FAILURE);\n"
9252 #: build/C/man2/timerfd_create.2:494
9255 " if (clock_gettime(CLOCK_REALTIME, &now) == -1)\n"
9256 " handle_error(\"clock_gettime\");\n"
9260 #: build/C/man2/timerfd_create.2:497
9263 " /* Create a CLOCK_REALTIME absolute timer with initial\n"
9264 " expiration and interval as specified in command line */\n"
9268 #: build/C/man2/timerfd_create.2:508
9271 " new_value.it_value.tv_sec = now.tv_sec + atoi(argv[1]);\n"
9272 " new_value.it_value.tv_nsec = now.tv_nsec;\n"
9273 " if (argc == 2) {\n"
9274 " new_value.it_interval.tv_sec = 0;\n"
9277 " new_value.it_interval.tv_sec = atoi(argv[2]);\n"
9278 " max_exp = atoi(argv[3]);\n"
9280 " new_value.it_interval.tv_nsec = 0;\n"
9284 #: build/C/man2/timerfd_create.2:512
9287 " fd = timerfd_create(CLOCK_REALTIME, 0);\n"
9289 " handle_error(\"timerfd_create\");\n"
9293 #: build/C/man2/timerfd_create.2:515
9296 " if (timerfd_settime(fd, TFD_TIMER_ABSTIME, &new_value, NULL) == -1)\n"
9297 " handle_error(\"timerfd_settime\");\n"
9301 #: build/C/man2/timerfd_create.2:518
9304 " print_elapsed_time();\n"
9305 " printf(\"timer started\\en\");\n"
9309 #: build/C/man2/timerfd_create.2:523
9312 " for (tot_exp = 0; tot_exp E<lt> max_exp;) {\n"
9313 " s = read(fd, &exp, sizeof(uint64_t));\n"
9314 " if (s != sizeof(uint64_t))\n"
9315 " handle_error(\"read\");\n"
9319 #: build/C/man2/timerfd_create.2:530
9322 " tot_exp += exp;\n"
9323 " print_elapsed_time();\n"
9324 " printf(\"read: %llu; total=%llu\\en\",\n"
9325 " (unsigned long long) exp,\n"
9326 " (unsigned long long) tot_exp);\n"
9332 #: build/C/man2/timerfd_create.2:540
9334 "Currently, B<timerfd_create>() supports fewer types of clock IDs than "
9335 "B<timer_create>(2)."
9339 #: build/C/man2/timerfd_create.2:552
9341 "B<eventfd>(2), B<poll>(2), B<read>(2), B<select>(2), B<setitimer>(2), "
9342 "B<signalfd>(2), B<timer_create>(2), B<timer_gettime>(2), "
9343 "B<timer_settime>(2), B<epoll>(7), B<time>(7)"
9347 #: build/C/man2/tkill.2:29
9353 #: build/C/man2/tkill.2:32
9354 msgid "tkill, tgkill - send a signal to a thread"
9358 #: build/C/man2/tkill.2:35
9360 msgid "B<int tkill(int >I<tid>B<, int >I<sig>B<);>\n"
9364 #: build/C/man2/tkill.2:37
9366 msgid "B<int tgkill(int >I<tgid>B<, int >I<tid>B<, int >I<sig>B<);>\n"
9370 #: build/C/man2/tkill.2:51
9372 "B<tgkill>() sends the signal I<sig> to the thread with the thread ID I<tid> "
9373 "in the thread group I<tgid>. (By contrast, B<kill>(2) can only be used to "
9374 "send a signal to a process (i.e., thread group) as a whole, and the signal "
9375 "will be delivered to an arbitrary thread within that process.)"
9379 #: build/C/man2/tkill.2:59
9381 "B<tkill>() is an obsolete predecessor to B<tgkill>(). It only allows the "
9382 "target thread ID to be specified, which may result in the wrong thread being "
9383 "signaled if a thread terminates and its thread ID is recycled. Avoid using "
9388 #: build/C/man2/tkill.2:66
9389 msgid "If I<tgid> is specified as -1, B<tgkill>() is equivalent to B<tkill>()."
9393 #: build/C/man2/tkill.2:69
9395 "These are the raw system call interfaces, meant for internal thread library "
9400 #: build/C/man2/tkill.2:77
9401 msgid "An invalid thread ID, thread group ID, or signal was specified."
9405 #: build/C/man2/tkill.2:82
9406 msgid "Permission denied. For the required permissions, see B<kill>(2)."
9410 #: build/C/man2/tkill.2:85
9411 msgid "No process with the specified thread ID (and thread group ID) exists."
9415 #: build/C/man2/tkill.2:90
9417 "B<tkill>() is supported since Linux 2.4.19 / 2.5.4. B<tgkill>() was added "
9422 #: build/C/man2/tkill.2:96
9424 "B<tkill>() and B<tgkill>() are Linux-specific and should not be used in "
9425 "programs that are intended to be portable."
9429 #: build/C/man2/tkill.2:102
9431 "See the description of B<CLONE_THREAD> in B<clone>(2) for an explanation of "
9436 #: build/C/man2/tkill.2:105
9438 "Glibc does not provide wrappers for these system calls; call them using "
9443 #: build/C/man2/tkill.2:110
9444 msgid "B<clone>(2), B<gettid>(2), B<kill>(2), B<rt_sigqueueinfo>(2)"
9448 #: build/C/man2/wait.2:50
9454 #: build/C/man2/wait.2:53
9455 msgid "wait, waitpid, waitid - wait for process to change state"
9459 #: build/C/man2/wait.2:55
9460 msgid "B<#include E<lt>sys/types.hE<gt>>"
9464 #: build/C/man2/wait.2:57
9465 msgid "B<#include E<lt>sys/wait.hE<gt>>"
9469 #: build/C/man2/wait.2:59
9470 msgid "B<pid_t wait(int *>I<status>B<);>"
9474 #: build/C/man2/wait.2:61
9475 msgid "B<pid_t waitpid(pid_t >I<pid>B<, int *>I<status>B<, int >I<options>B<);>"
9479 #: build/C/man2/wait.2:64
9481 "B<int waitid(idtype_t >I<idtype>B<, id_t >I<id>B<, siginfo_t *>I<infop>B<, "
9482 "int >I<options>B<);>"
9486 #: build/C/man2/wait.2:73
9487 msgid "B<waitid>():"
9491 #: build/C/man2/wait.2:77
9493 "_SVID_SOURCE || _XOPEN_SOURCE\\ E<gt>=\\ 500 || _XOPEN_SOURCE\\ &&\\ "
9494 "_XOPEN_SOURCE_EXTENDED"
9498 #: build/C/man2/wait.2:92
9500 "All of these system calls are used to wait for state changes in a child of "
9501 "the calling process, and obtain information about the child whose state has "
9502 "changed. A state change is considered to be: the child terminated; the "
9503 "child was stopped by a signal; or the child was resumed by a signal. In the "
9504 "case of a terminated child, performing a wait allows the system to release "
9505 "the resources associated with the child; if a wait is not performed, then "
9506 "the terminated child remains in a \"zombie\" state (see NOTES below)."
9510 #: build/C/man2/wait.2:104
9512 "If a child has already changed state, then these calls return immediately. "
9513 "Otherwise they block until either a child changes state or a signal handler "
9514 "interrupts the call (assuming that system calls are not automatically "
9515 "restarted using the B<SA_RESTART> flag of B<sigaction>(2)). In the "
9516 "remainder of this page, a child whose state has changed and which has not "
9517 "yet been waited upon by one of these system calls is termed I<waitable>."
9521 #: build/C/man2/wait.2:104
9523 msgid "wait() and waitpid()"
9527 #: build/C/man2/wait.2:112
9529 "The B<wait>() system call suspends execution of the calling process until "
9530 "one of its children terminates. The call I<wait(&status)> is equivalent to:"
9534 #: build/C/man2/wait.2:115
9536 msgid " waitpid(-1, &status, 0);\n"
9540 #: build/C/man2/wait.2:129
9542 "The B<waitpid>() system call suspends execution of the calling process "
9543 "until a child specified by I<pid> argument has changed state. By default, "
9544 "B<waitpid>() waits only for terminated children, but this behavior is "
9545 "modifiable via the I<options> argument, as described below."
9549 #: build/C/man2/wait.2:133
9550 msgid "The value of I<pid> can be:"
9554 #: build/C/man2/wait.2:133
9560 #: build/C/man2/wait.2:137
9562 "meaning wait for any child process whose process group ID is equal to the "
9563 "absolute value of I<pid>."
9567 #: build/C/man2/wait.2:137
9573 #: build/C/man2/wait.2:139
9574 msgid "meaning wait for any child process."
9578 #: build/C/man2/wait.2:139
9584 #: build/C/man2/wait.2:142
9586 "meaning wait for any child process whose process group ID is equal to that "
9587 "of the calling process."
9591 #: build/C/man2/wait.2:142
9597 #: build/C/man2/wait.2:146
9598 msgid "meaning wait for the child whose process ID is equal to the value of I<pid>."
9602 #: build/C/man2/wait.2:150
9603 msgid "The value of I<options> is an OR of zero or more of the following constants:"
9607 #: build/C/man2/wait.2:150 build/C/man2/wait.2:279
9613 #: build/C/man2/wait.2:153
9614 msgid "return immediately if no child has exited."
9618 #: build/C/man2/wait.2:153
9620 msgid "B<WUNTRACED>"
9624 #: build/C/man2/wait.2:162
9626 "also return if a child has stopped (but not traced via B<ptrace>(2)). "
9627 "Status for I<traced> children which have stopped is provided even if this "
9628 "option is not specified."
9632 #: build/C/man2/wait.2:162
9634 msgid "B<WCONTINUED> (since Linux 2.6.10)"
9638 #: build/C/man2/wait.2:166
9639 msgid "also return if a stopped child has been resumed by delivery of B<SIGCONT>."
9643 #: build/C/man2/wait.2:168
9644 msgid "(For Linux-only options, see below.)"
9648 #: build/C/man2/wait.2:182
9650 "If I<status> is not NULL, B<wait>() and B<waitpid>() store status "
9651 "information in the I<int> to which it points. This integer can be inspected "
9652 "with the following macros (which take the integer itself as an argument, not "
9653 "a pointer to it, as is done in B<wait>() and B<waitpid>()!):"
9657 #: build/C/man2/wait.2:182
9659 msgid "B<WIFEXITED(>I<status>B<)>"
9663 #: build/C/man2/wait.2:190
9665 "returns true if the child terminated normally, that is, by calling "
9666 "B<exit>(3) or B<_exit>(2), or by returning from main()."
9670 #: build/C/man2/wait.2:190
9672 msgid "B<WEXITSTATUS(>I<status>B<)>"
9676 #: build/C/man2/wait.2:203
9678 "returns the exit status of the child. This consists of the least "
9679 "significant 8 bits of the I<status> argument that the child specified in a "
9680 "call to B<exit>(3) or B<_exit>(2) or as the argument for a return "
9681 "statement in main(). This macro should only be employed if B<WIFEXITED> "
9686 #: build/C/man2/wait.2:203
9688 msgid "B<WIFSIGNALED(>I<status>B<)>"
9692 #: build/C/man2/wait.2:206
9693 msgid "returns true if the child process was terminated by a signal."
9697 #: build/C/man2/wait.2:206
9699 msgid "B<WTERMSIG(>I<status>B<)>"
9703 #: build/C/man2/wait.2:213
9705 "returns the number of the signal that caused the child process to "
9706 "terminate. This macro should only be employed if B<WIFSIGNALED> returned "
9711 #: build/C/man2/wait.2:213
9713 msgid "B<WCOREDUMP(>I<status>B<)>"
9717 #: build/C/man2/wait.2:222
9719 "returns true if the child produced a core dump. This macro should only be "
9720 "employed if B<WIFSIGNALED> returned true. This macro is not specified in "
9721 "POSIX.1-2001 and is not available on some UNIX implementations (e.g., AIX, "
9722 "SunOS). Only use this enclosed in #ifdef WCOREDUMP ... #endif."
9726 #: build/C/man2/wait.2:222
9728 msgid "B<WIFSTOPPED(>I<status>B<)>"
9732 #: build/C/man2/wait.2:229
9734 "returns true if the child process was stopped by delivery of a signal; this "
9735 "is only possible if the call was done using B<WUNTRACED> or when the child "
9736 "is being traced (see B<ptrace>(2))."
9740 #: build/C/man2/wait.2:229
9742 msgid "B<WSTOPSIG(>I<status>B<)>"
9746 #: build/C/man2/wait.2:235
9748 "returns the number of the signal which caused the child to stop. This macro "
9749 "should only be employed if B<WIFSTOPPED> returned true."
9753 #: build/C/man2/wait.2:235
9755 msgid "B<WIFCONTINUED(>I<status>B<)>"
9759 #: build/C/man2/wait.2:240
9761 "(since Linux 2.6.10) returns true if the child process was resumed by "
9762 "delivery of B<SIGCONT>."
9766 #: build/C/man2/wait.2:240
9772 #: build/C/man2/wait.2:245
9774 "The B<waitid>() system call (available since Linux 2.6.9) provides more "
9775 "precise control over which child state changes to wait for."
9779 #: build/C/man2/wait.2:251
9781 "The I<idtype> and I<id> arguments select the child(ren) to wait for, as "
9786 #: build/C/man2/wait.2:251
9788 msgid "I<idtype> == B<P_PID>"
9792 #: build/C/man2/wait.2:254
9793 msgid "Wait for the child whose process ID matches I<id>."
9797 #: build/C/man2/wait.2:254
9799 msgid "I<idtype> == B<P_PGID>"
9803 #: build/C/man2/wait.2:257
9804 msgid "Wait for any child whose process group ID matches I<id>."
9808 #: build/C/man2/wait.2:257
9810 msgid "I<idtype> == B<P_ALL>"
9814 #: build/C/man2/wait.2:261
9815 msgid "Wait for any child; I<id> is ignored."
9819 #: build/C/man2/wait.2:265
9821 "The child state changes to wait for are specified by ORing one or more of "
9822 "the following flags in I<options>:"
9826 #: build/C/man2/wait.2:265
9832 #: build/C/man2/wait.2:268
9833 msgid "Wait for children that have terminated."
9837 #: build/C/man2/wait.2:268
9843 #: build/C/man2/wait.2:271
9844 msgid "Wait for children that have been stopped by delivery of a signal."
9848 #: build/C/man2/wait.2:271
9850 msgid "B<WCONTINUED>"
9854 #: build/C/man2/wait.2:276
9856 "Wait for (previously stopped) children that have been resumed by delivery of "
9861 #: build/C/man2/wait.2:279
9862 msgid "The following flags may additionally be ORed in I<options>:"
9866 #: build/C/man2/wait.2:283
9867 msgid "As for B<waitpid>()."
9871 #: build/C/man2/wait.2:283
9877 #: build/C/man2/wait.2:287
9879 "Leave the child in a waitable state; a later wait call can be used to again "
9880 "retrieve the child status information."
9884 #: build/C/man2/wait.2:294
9886 "Upon successful return, B<waitid>() fills in the following fields of the "
9887 "I<siginfo_t> structure pointed to by I<infop>:"
9891 #: build/C/man2/wait.2:297
9892 msgid "The process ID of the child."
9896 #: build/C/man2/wait.2:301
9898 "The real user ID of the child. (This field is not set on most other "
9903 #: build/C/man2/wait.2:305
9904 msgid "Always set to B<SIGCHLD>."
9908 #: build/C/man2/wait.2:305
9910 msgid "I<si_status>"
9914 #: build/C/man2/wait.2:315
9916 "Either the exit status of the child, as given to B<_exit>(2) (or "
9917 "B<exit>(3)), or the signal that caused the child to terminate, stop, or "
9918 "continue. The I<si_code> field can be used to determine how to interpret "
9923 #: build/C/man2/wait.2:332
9925 "Set to one of: B<CLD_EXITED> (child called B<_exit>(2)); B<CLD_KILLED> "
9926 "(child killed by signal); B<CLD_DUMPED> (child killed by signal, and dumped "
9927 "core); B<CLD_STOPPED> (child stopped by signal); B<CLD_TRAPPED> (traced "
9928 "child has trapped); or B<CLD_CONTINUED> (child continued by B<SIGCONT>)."
9931 #. POSIX.1-2001 leaves this possibility unspecified; most
9932 #. implementations (including Linux) zero out the structure
9933 #. in this case, but at at least one implementation (AIX 5.1)
9934 #. does not -- MTK Nov 04
9936 #: build/C/man2/wait.2:354
9938 "If B<WNOHANG> was specified in I<options> and there were no children in a "
9939 "waitable state, then B<waitid>() returns 0 immediately and the state of the "
9940 "I<siginfo_t> structure pointed to by I<infop> is unspecified. To "
9941 "distinguish this case from that where a child was in a waitable state, zero "
9942 "out the I<si_pid> field before the call and check for a nonzero value in "
9943 "this field after the call returns."
9947 #: build/C/man2/wait.2:358
9949 "B<wait>(): on success, returns the process ID of the terminated child; on "
9950 "error, -1 is returned."
9954 #: build/C/man2/wait.2:367
9956 "B<waitpid>(): on success, returns the process ID of the child whose state "
9957 "has changed; if B<WNOHANG> was specified and one or more child(ren) "
9958 "specified by I<pid> exist, but have not yet changed state, then 0 is "
9959 "returned. On error, -1 is returned."
9962 #. FIXME: As reported by Vegard Nossum, if infop is NULL, then waitid()
9963 #. returns the PID of the child. Either this is a bug, or it is intended
9964 #. behavior that needs to be documented. See my Jan 2009 LKML mail
9965 #. "waitid() return value strangeness when infop is NULL".
9967 #: build/C/man2/wait.2:383
9969 "B<waitid>(): returns 0 on success or if B<WNOHANG> was specified and no "
9970 "child(ren) specified by I<id> has yet changed state; on error, -1 is "
9971 "returned. Each of these calls sets I<errno> to an appropriate value in the "
9976 #: build/C/man2/wait.2:384 build/C/man2/wait.2:389
9982 #: build/C/man2/wait.2:389
9984 "(for B<wait>()) The calling process does not have any unwaited-for "
9989 #: build/C/man2/wait.2:409
9991 "(for B<waitpid>() or B<waitid>()) The process specified by I<pid> "
9992 "(B<waitpid>()) or I<idtype> and I<id> (B<waitid>()) does not exist or is "
9993 "not a child of the calling process. (This can happen for one's own child if "
9994 "the action for B<SIGCHLD> is set to B<SIG_IGN>. See also the I<Linux Notes> "
9995 "section about threads.)"
9999 #: build/C/man2/wait.2:416
10001 "B<WNOHANG> was not set and an unblocked signal or a B<SIGCHLD> was caught; "
10002 "see B<signal>(7)."
10005 #. type: Plain text
10006 #: build/C/man2/wait.2:421
10007 msgid "The I<options> argument was invalid."
10010 #. type: Plain text
10011 #: build/C/man2/wait.2:436
10013 "A child that terminates, but has not been waited for becomes a \"zombie\". "
10014 "The kernel maintains a minimal set of information about the zombie process "
10015 "(PID, termination status, resource usage information) in order to allow the "
10016 "parent to later perform a wait to obtain information about the child. As "
10017 "long as a zombie is not removed from the system via a wait, it will consume "
10018 "a slot in the kernel process table, and if this table fills, it will not be "
10019 "possible to create further processes. If a parent process terminates, then "
10020 "its \"zombie\" children (if any) are adopted by B<init>(8), which "
10021 "automatically performs a wait to remove the zombies."
10024 #. type: Plain text
10025 #: build/C/man2/wait.2:477
10027 "POSIX.1-2001 specifies that if the disposition of B<SIGCHLD> is set to "
10028 "B<SIG_IGN> or the B<SA_NOCLDWAIT> flag is set for B<SIGCHLD> (see "
10029 "B<sigaction>(2)), then children that terminate do not become zombies and a "
10030 "call to B<wait>() or B<waitpid>() will block until all children have "
10031 "terminated, and then fail with I<errno> set to B<ECHILD>. (The original "
10032 "POSIX standard left the behavior of setting B<SIGCHLD> to B<SIG_IGN> "
10033 "unspecified. Note that even though the default disposition of B<SIGCHLD> is "
10034 "\"ignore\", explicitly setting the disposition to B<SIG_IGN> results in "
10035 "different treatment of zombie process children.) Linux 2.6 conforms to this "
10036 "specification. However, Linux 2.4 (and earlier) does not: if a B<wait>() "
10037 "or B<waitpid>() call is made while B<SIGCHLD> is being ignored, the call "
10038 "behaves just as though B<SIGCHLD> were not being ignored, that is, the call "
10039 "blocks until the next child terminates and then returns the process ID and "
10040 "status of that child."
10043 #. type: Plain text
10044 #: build/C/man2/wait.2:493
10046 "In the Linux kernel, a kernel-scheduled thread is not a distinct construct "
10047 "from a process. Instead, a thread is simply a process that is created using "
10048 "the Linux-unique B<clone>(2) system call; other routines such as the "
10049 "portable B<pthread_create>(3) call are implemented using B<clone>(2). "
10050 "Before Linux 2.4, a thread was just a special case of a process, and as a "
10051 "consequence one thread could not wait on the children of another thread, "
10052 "even when the latter belongs to the same thread group. However, POSIX "
10053 "prescribes such functionality, and since Linux 2.4 a thread can, and by "
10054 "default will, wait on children of other threads in the same thread group."
10057 #. type: Plain text
10058 #: build/C/man2/wait.2:500
10060 "The following Linux-specific I<options> are for use with children created "
10061 "using B<clone>(2); they cannot be used with B<waitid>():"
10065 #: build/C/man2/wait.2:500
10067 msgid "B<__WCLONE>"
10071 #. type: Plain text
10072 #: build/C/man2/wait.2:511
10074 "Wait for \"clone\" children only. If omitted then wait for \"non-clone\" "
10075 "children only. (A \"clone\" child is one which delivers no signal, or a "
10076 "signal other than B<SIGCHLD> to its parent upon termination.) This option "
10077 "is ignored if B<__WALL> is also specified."
10081 #: build/C/man2/wait.2:511
10083 msgid "B<__WALL> (since Linux 2.4)"
10086 #. since patch-2.3.48
10087 #. type: Plain text
10088 #: build/C/man2/wait.2:516
10089 msgid "Wait for all children, regardless of type (\"clone\" or \"non-clone\")."
10093 #: build/C/man2/wait.2:516
10095 msgid "B<__WNOTHREAD> (since Linux 2.4)"
10098 #. since patch-2.4.0-test8
10099 #. type: Plain text
10100 #: build/C/man2/wait.2:522
10102 "Do not wait for children of other threads in the same thread group. This "
10103 "was the default before Linux 2.4."
10106 #. fork.2 refers to this example program.
10107 #. type: Plain text
10108 #: build/C/man2/wait.2:539
10110 "The following program demonstrates the use of B<fork>(2) and B<waitpid>(). "
10111 "The program creates a child process. If no command-line argument is "
10112 "supplied to the program, then the child suspends its execution using "
10113 "B<pause>(2), to allow the user to send signals to the child. Otherwise, if "
10114 "a command-line argument is supplied, then the child exits immediately, using "
10115 "the integer supplied on the command line as the exit status. The parent "
10116 "process executes a loop that monitors the child using B<waitpid>(), and uses "
10117 "the W*() macros described above to analyze the wait status value."
10120 #. type: Plain text
10121 #: build/C/man2/wait.2:555
10125 "Child PID is 32360\n"
10127 "$B< kill -STOP 32360>\n"
10128 "stopped by signal 19\n"
10129 "$B< kill -CONT 32360>\n"
10131 "$B< kill -TERM 32360>\n"
10132 "killed by signal 15\n"
10133 "[1]+ Done ./a.out\n"
10137 #. type: Plain text
10138 #: build/C/man2/wait.2:564
10141 "#include E<lt>sys/wait.hE<gt>\n"
10142 "#include E<lt>stdlib.hE<gt>\n"
10143 "#include E<lt>unistd.hE<gt>\n"
10144 "#include E<lt>stdio.hE<gt>\n"
10147 #. type: Plain text
10148 #: build/C/man2/wait.2:570
10152 "main(int argc, char *argv[])\n"
10154 " pid_t cpid, w;\n"
10158 #. type: Plain text
10159 #: build/C/man2/wait.2:576
10162 " cpid = fork();\n"
10163 " if (cpid == -1) {\n"
10164 " perror(\"fork\");\n"
10165 " exit(EXIT_FAILURE);\n"
10169 #. type: Plain text
10170 #: build/C/man2/wait.2:582
10173 " if (cpid == 0) { /* Code executed by child */\n"
10174 " printf(\"Child PID is %ld\\en\", (long) getpid());\n"
10175 " if (argc == 1)\n"
10176 " pause(); /* Wait for signals */\n"
10177 " _exit(atoi(argv[1]));\n"
10180 #. type: Plain text
10181 #: build/C/man2/wait.2:590
10184 " } else { /* Code executed by parent */\n"
10186 " w = waitpid(cpid, &status, WUNTRACED | WCONTINUED);\n"
10187 " if (w == -1) {\n"
10188 " perror(\"waitpid\");\n"
10189 " exit(EXIT_FAILURE);\n"
10193 #. type: Plain text
10194 #: build/C/man2/wait.2:604
10197 " if (WIFEXITED(status)) {\n"
10198 " printf(\"exited, status=%d\\en\", WEXITSTATUS(status));\n"
10199 " } else if (WIFSIGNALED(status)) {\n"
10200 " printf(\"killed by signal %d\\en\", WTERMSIG(status));\n"
10201 " } else if (WIFSTOPPED(status)) {\n"
10202 " printf(\"stopped by signal %d\\en\", WSTOPSIG(status));\n"
10203 " } else if (WIFCONTINUED(status)) {\n"
10204 " printf(\"continued\\en\");\n"
10206 " } while (!WIFEXITED(status) && !WIFSIGNALED(status));\n"
10207 " exit(EXIT_SUCCESS);\n"
10212 #. type: Plain text
10213 #: build/C/man2/wait.2:617
10215 "B<_exit>(2), B<clone>(2), B<fork>(2), B<kill>(2), B<ptrace>(2), "
10216 "B<sigaction>(2), B<signal>(2), B<wait4>(2), B<pthread_create>(3), "
10217 "B<credentials>(7), B<signal>(7)"
10221 #: build/C/man2/wait4.2:34
10226 #. type: Plain text
10227 #: build/C/man2/wait4.2:37
10228 msgid "wait3, wait4 - wait for process to change state, BSD style"
10231 #. type: Plain text
10232 #: build/C/man2/wait4.2:43
10235 "B<#include E<lt>sys/types.hE<gt>>\n"
10236 "B<#include E<lt>sys/time.hE<gt>>\n"
10237 "B<#include E<lt>sys/resource.hE<gt>>\n"
10238 "B<#include E<lt>sys/wait.hE<gt>>\n"
10241 #. type: Plain text
10242 #: build/C/man2/wait4.2:46
10245 "B<pid_t wait3(int *>I<status>B<, int >I<options>B<,>\n"
10246 "B< struct rusage *>I<rusage>B<);>\n"
10249 #. type: Plain text
10250 #: build/C/man2/wait4.2:49
10253 "B<pid_t wait4(pid_t >I<pid>B<, int *>I<status>B<, int >I<options>B<,>\n"
10254 "B< struct rusage *>I<rusage>B<);>\n"
10257 #. type: Plain text
10258 #: build/C/man2/wait4.2:58
10259 msgid "B<wait3>():"
10262 #. type: Plain text
10263 #: build/C/man2/wait4.2:64
10264 msgid "B<wait4>():"
10267 #. type: Plain text
10268 #: build/C/man2/wait4.2:66
10269 msgid "_BSD_SOURCE"
10272 #. type: Plain text
10273 #: build/C/man2/wait4.2:78
10275 "The B<wait3>() and B<wait4>() system calls are similar to B<waitpid>(2), "
10276 "but additionally return resource usage information about the child in the "
10277 "structure pointed to by I<rusage>."
10280 #. type: Plain text
10281 #: build/C/man2/wait4.2:84
10283 "Other than the use of the I<rusage> argument, the following B<wait3>() "
10287 #. type: Plain text
10288 #: build/C/man2/wait4.2:87
10290 msgid " wait3(status, options, rusage);\n"
10293 #. type: Plain text
10294 #: build/C/man2/wait4.2:90 build/C/man2/wait4.2:104
10295 msgid "is equivalent to:"
10298 #. type: Plain text
10299 #: build/C/man2/wait4.2:93
10301 msgid " waitpid(-1, status, options);\n"
10304 #. type: Plain text
10305 #: build/C/man2/wait4.2:98
10306 msgid "Similarly, the following B<wait4>() call:"
10309 #. type: Plain text
10310 #: build/C/man2/wait4.2:101
10312 msgid " wait4(pid, status, options, rusage);\n"
10315 #. type: Plain text
10316 #: build/C/man2/wait4.2:107
10318 msgid " waitpid(pid, status, options);\n"
10321 #. type: Plain text
10322 #: build/C/man2/wait4.2:117
10324 "In other words, B<wait3>() waits of any child, while B<wait4>() can be "
10325 "used to select a specific child, or children, on which to wait. See "
10326 "B<wait>(2) for further details."
10329 #. type: Plain text
10330 #: build/C/man2/wait4.2:127
10332 "If I<rusage> is not NULL, the I<struct rusage> to which it points will be "
10333 "filled with accounting information about the child. See B<getrusage>(2) "
10337 #. type: Plain text
10338 #: build/C/man2/wait4.2:130 build/C/man2/wait4.2:133
10339 msgid "As for B<waitpid>(2)."
10342 #. type: Plain text
10343 #: build/C/man2/wait4.2:135
10347 #. type: Plain text
10348 #: build/C/man2/wait4.2:147
10350 "Including I<E<lt>sys/time.hE<gt>> is not required these days, but increases "
10351 "portability. (Indeed, I<E<lt>sys/resource.hE<gt>> defines the I<rusage> "
10352 "structure with fields of type I<struct timeval> defined in "
10353 "I<E<lt>sys/time.hE<gt>>.)"
10356 #. type: Plain text
10357 #: build/C/man2/wait4.2:153
10359 "On Linux, B<wait3>() is a library function implemented on top of the "
10360 "B<wait4>() system call."
10363 #. type: Plain text
10364 #: build/C/man2/wait4.2:160
10366 "B<fork>(2), B<getrusage>(2), B<sigaction>(2), B<signal>(2), B<wait>(2), "