xref: /titanic_54/usr/src/man/man3c/signalfd.3c (revision f4a5523c06038fcb37de45a740ef4385ede131c8)
13d729aecSJerry Jelinek.\"
23d729aecSJerry Jelinek.\"  This file and its contents are supplied under the terms of the
33d729aecSJerry Jelinek.\"  Common Development and Distribution License ("CDDL"), version 1.0.
43d729aecSJerry Jelinek.\"  You may only use this file in accordance with the terms of version
53d729aecSJerry Jelinek.\"  1.0 of the CDDL.
63d729aecSJerry Jelinek.\"
73d729aecSJerry Jelinek.\"  A full copy of the text of the CDDL should have accompanied this
83d729aecSJerry Jelinek.\"  source.  A copy of the CDDL is also available via the Internet at
93d729aecSJerry Jelinek.\"  http://www.illumos.org/license/CDDL.
103d729aecSJerry Jelinek.\"
113d729aecSJerry Jelinek.\"  Copyright 2015, Joyent, Inc.
123d729aecSJerry Jelinek.\"
13*f4a5523cSCody Peter Mello.Dd "April 9, 2016"
143d729aecSJerry Jelinek.Dt SIGNALFD 3C
153d729aecSJerry Jelinek.Os
163d729aecSJerry Jelinek.Sh NAME
173d729aecSJerry Jelinek.Nm signalfd
183d729aecSJerry Jelinek.Nd create or modify a file descriptor for signal handling
193d729aecSJerry Jelinek.Sh SYNOPSIS
203d729aecSJerry Jelinek.In sys/signalfd.h
213d729aecSJerry Jelinek.
223d729aecSJerry Jelinek.Ft int
233d729aecSJerry Jelinek.Fo signalfd
243d729aecSJerry Jelinek.Fa "int fd"
253d729aecSJerry Jelinek.Fa "const sigset_t *mask"
263d729aecSJerry Jelinek.Fa "int flags"
273d729aecSJerry Jelinek.Fc
283d729aecSJerry Jelinek.
293d729aecSJerry Jelinek.Sh DESCRIPTION
303d729aecSJerry JelinekThe
313d729aecSJerry Jelinek.Fn signalfd
323d729aecSJerry Jelinekfunction returns a file descriptor that can be used
333d729aecSJerry Jelinekfor synchronous consumption of signals. The file descriptor can be operated
343d729aecSJerry Jelinekupon via
353d729aecSJerry Jelinek.Xr read 2
363d729aecSJerry Jelinekand the facilities that notify of file descriptor activity (e.g.
373d729aecSJerry Jelinek.Xr poll 2 ,
383d729aecSJerry Jelinek.Xr port_get 3C ,
393d729aecSJerry Jelinek.Xr epoll_wait 3C
403d729aecSJerry Jelinek). To dispose of the instance
413d729aecSJerry Jelinek.Xr close 2
423d729aecSJerry Jelinekshould be called on the file descriptor.
433d729aecSJerry Jelinek.Pp
443d729aecSJerry JelinekIf the
453d729aecSJerry Jelinek.Va fd
463d729aecSJerry Jelinekargument is -1, a new signalfd file descriptor will be
473d729aecSJerry Jelinekreturned, otherwise the
483d729aecSJerry Jelinek.Va fd
493d729aecSJerry Jelinekargument should be an existing signalfd file descriptor whose signal mask will
503d729aecSJerry Jelinekbe updated.
513d729aecSJerry Jelinek.Pp
523d729aecSJerry JelinekThe
533d729aecSJerry Jelinek.Va mask
543d729aecSJerry Jelinekargument specifies the set of signals that are relevant to the file descriptor.
553d729aecSJerry JelinekIt may be manipulated with the standard signal set manipulation functions
563d729aecSJerry Jelinekdocumented in
573d729aecSJerry Jelinek.Xr sigsetops 3C .
583d729aecSJerry JelinekSignals in the mask which cannot be caught (e.g.
593d729aecSJerry Jelinek.Fa SIGKILL )
603d729aecSJerry Jelinekare ignored.
613d729aecSJerry Jelinek.Pp
623d729aecSJerry JelinekThe
633d729aecSJerry Jelinek.Va flags
643d729aecSJerry Jelinekargument specifies additional parameters for the instance, and can have any of
653d729aecSJerry Jelinekthe following values:
663d729aecSJerry Jelinek.Bl -tag -width Dv
673d729aecSJerry Jelinek.It Sy SFD_CLOEXEC
683d729aecSJerry JelinekInstance will be closed upon an
693d729aecSJerry Jelinek.Xr exec 2 ;
703d729aecSJerry Jelineksee description for
713d729aecSJerry Jelinek.Fa O_CLOEXEC
723d729aecSJerry Jelinekin
733d729aecSJerry Jelinek.Xr open 2 .
743d729aecSJerry Jelinek.It Sy SFD_NONBLOCK
753d729aecSJerry JelinekInstance will be set to be non-blocking. A
763d729aecSJerry Jelinek.Xr read 2
773d729aecSJerry Jelinekon a signalfd instance that has been initialized with
783d729aecSJerry Jelinek.Fa SFD_NONBLOCK ,
793d729aecSJerry Jelinekor made non-blocking in other ways, will return
803d729aecSJerry Jelinek.Er EAGAIN
813d729aecSJerry Jelinekin lieu of blocking if there are no signals from the
823d729aecSJerry Jelinek.Va mask
833d729aecSJerry Jelinekthat are pending.
843d729aecSJerry Jelinek.El
853d729aecSJerry Jelinek.Pp
863d729aecSJerry JelinekAs with
873d729aecSJerry Jelinek.Xr sigwait 2 ,
883d729aecSJerry Jelinekreading a signal from the file descriptor will consume the signal. The signals
893d729aecSJerry Jelinekused with signalfd file descriptors are normally first blocked so that their
903d729aecSJerry Jelinekhandler does not run when a signal arrives. If the signal is not blocked the
913d729aecSJerry Jelinekbehavior matches that of
923d729aecSJerry Jelinek.Xr sigwait 2 ;
933d729aecSJerry Jelinekif a
943d729aecSJerry Jelinek.Xr read 2
953d729aecSJerry Jelinekis pending then the signal is consumed by the read, otherwise the signal is
963d729aecSJerry Jelinekconsumed by the handler.
973d729aecSJerry Jelinek.Pp
983d729aecSJerry JelinekThe following operations can be performed upon a signalfd file descriptor:
993d729aecSJerry Jelinek.Bl -tag -width Dv
1003d729aecSJerry Jelinek.It Sy read(2)
1013d729aecSJerry JelinekReads and consumes one or more of the pending signals that match the file
1023d729aecSJerry Jelinekdescriptor's
1033d729aecSJerry Jelinek.Va mask .
1043d729aecSJerry JelinekThe read buffer must be large enough to hold one or more
1053d729aecSJerry Jelinek.Vt signalfd_siginfo
1063d729aecSJerry Jelinekstructures, which is described below.
1073d729aecSJerry Jelinek.Xr read 2
1083d729aecSJerry Jelinekwill block if there are no matching signals pending, or return
1093d729aecSJerry Jelinek.Er EAGAIN
1103d729aecSJerry Jelinekif the instance was created with
1113d729aecSJerry Jelinek.Fa SFD_NONBLOCK .
1123d729aecSJerry JelinekAfter a
1133d729aecSJerry Jelinek.Xr fork 2 ,
1143d729aecSJerry Jelinekif the child reads from the descriptor it will only consume signals from itself.
1153d729aecSJerry Jelinek.It Sy poll(2)
1163d729aecSJerry JelinekProvide notification when one of the signals from the
1173d729aecSJerry Jelinek.Va mask
1183d729aecSJerry Jelinekarrives.
1193d729aecSJerry Jelinek.Fa POLLIN
1203d729aecSJerry Jelinekand
1213d729aecSJerry Jelinek.Fa POLLRDNORM
1223d729aecSJerry Jelinekwill be set.
1233d729aecSJerry Jelinek.It Sy close(2)
1243d729aecSJerry JelinekCloses the desriptor.
1253d729aecSJerry Jelinek.El
1263d729aecSJerry Jelinek.Pp
1273d729aecSJerry JelinekThe
1283d729aecSJerry Jelinek.Vt signalfd_siginfo
1293d729aecSJerry Jelinekstructure returned from
1303d729aecSJerry Jelinek.Xr read 2
1313d729aecSJerry Jelinekis a fixed size 128 byte structure defined as follows:
1323d729aecSJerry Jelinek.Bd -literal
1333d729aecSJerry Jelinektypedef struct signalfd_siginfo {
1343d729aecSJerry Jelinek        uint32_t ssi_signo;     /* signal from signal.h */
1353d729aecSJerry Jelinek        int32_t  ssi_errno;     /* error from errno.h */
1363d729aecSJerry Jelinek        int32_t  ssi_code;      /* signal code */
1373d729aecSJerry Jelinek        uint32_t ssi_pid;       /* PID of sender */
1383d729aecSJerry Jelinek        uint32_t ssi_uid;       /* real UID of sender */
1393d729aecSJerry Jelinek        int32_t  ssi_fd;        /* file descriptor (SIGIO) */
1403d729aecSJerry Jelinek        uint32_t ssi_tid;       /* unused */
1413d729aecSJerry Jelinek        uint32_t ssi_band;      /* band event (SIGIO) */
1423d729aecSJerry Jelinek        uint32_t ssi_overrun;   /* unused */
1433d729aecSJerry Jelinek        uint32_t ssi_trapno;    /* trap number that caused signal */
1443d729aecSJerry Jelinek        int32_t  ssi_status;    /* exit status or signal (SIGCHLD) */
1453d729aecSJerry Jelinek        int32_t  ssi_int;       /* unused */
1463d729aecSJerry Jelinek        uint64_t ssi_ptr;       /* unused */
1473d729aecSJerry Jelinek        uint64_t ssi_utime;     /* user CPU time consumed (SIGCHLD) */
1483d729aecSJerry Jelinek        uint64_t ssi_stime;     /* system CPU time consumed (SIGCHLD) */
1493d729aecSJerry Jelinek        uint64_t ssi_addr;      /* address that generated signal */
1503d729aecSJerry Jelinek        uint8_t  ssi_pad[48];   /* pad size to 128 bytes */
1513d729aecSJerry Jelinek} signalfd_siginfo_t;
1523d729aecSJerry Jelinek.Ed
1533d729aecSJerry Jelinek.Sh RETURN VALUES
154*f4a5523cSCody Peter MelloUpon successful completion, a file descriptor associated with the instance
1553d729aecSJerry Jelinekis returned. Otherwise, -1 is returned and errno is set to indicate the error.
1563d729aecSJerry JelinekWhen
1573d729aecSJerry Jelinek.Va fd
1583d729aecSJerry Jelinekis not -1 and there is no error, the value of
1593d729aecSJerry Jelinek.Va fd
1603d729aecSJerry Jelinekis returned.
1613d729aecSJerry Jelinek.Sh ERRORS
1623d729aecSJerry JelinekThe
1633d729aecSJerry Jelinek.Fn signalfd function
1643d729aecSJerry Jelinekwill fail if:
1653d729aecSJerry Jelinek.Bl -tag -width Er
1663d729aecSJerry Jelinek.It Er EBADF
1673d729aecSJerry JelinekThe
1683d729aecSJerry Jelinek.Va fd
1693d729aecSJerry Jelinekdescriptor is invalid.
1703d729aecSJerry Jelinek.It Er EFAULT
1713d729aecSJerry JelinekThe
1723d729aecSJerry Jelinek.Va mask
1733d729aecSJerry Jelinekaddress is invalid.
1743d729aecSJerry Jelinek.It Er EINVAL
1753d729aecSJerry JelinekThe
1763d729aecSJerry Jelinek.Va fd
1773d729aecSJerry Jelinekdescriptor is not a signalfd descriptor or the
1783d729aecSJerry Jelinek.Va flags
1793d729aecSJerry Jelinekare invalid.
1803d729aecSJerry Jelinek.It Er EMFILE
1813d729aecSJerry JelinekThere are currently
1823d729aecSJerry Jelinek.Va  OPEN_MAX
1833d729aecSJerry Jelinekfile descriptors open in the calling process.
1843d729aecSJerry Jelinek.It Er ENODEV
1853d729aecSJerry JelinekUnable to allocate state for the file descriptor.
1863d729aecSJerry Jelinek.El
1873d729aecSJerry Jelinek.Sh SEE ALSO
1883d729aecSJerry Jelinek.Xr poll 2 ,
1893d729aecSJerry Jelinek.Xr sigwait 2 ,
1903d729aecSJerry Jelinek.Xr sigsetops 3C ,
1913d729aecSJerry Jelinek.Xr sigwaitinfo 3C ,
1923d729aecSJerry Jelinek.Xr signal.h 3HEAD
193