Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
SIGQUEUE(2)		      System Calls Manual		   SIGQUEUE(2)

NAME
       sigqueue	-- queue a signal to a process (REALTIME)

LIBRARY
       Standard	C Library (libc, -lc)

SYNOPSIS
       #include	<signal.h>

       int
       sigqueue(pid_t pid, int signo, const union sigval value);

DESCRIPTION
       The  sigqueue()	system call causes the signal specified	by signo to be
       sent with the value specified by	value to the process specified by pid.
       If signo	is zero	(the null signal), error checking is performed but  no
       signal  is actually sent.  The null signal can be used to check the va-
       lidity of PID.

       The conditions required for a process to	have  permission  to  queue  a
       signal  to another process are the same as for the kill(2) system call.
       The sigqueue() system call queues a signal to a single  process	speci-
       fied by the pid argument.

       The  sigqueue() system call returns immediately.	 If the	resources were
       available to queue the signal, the signal will be queued	 and  sent  to
       the receiving process.

       If  the	value  of  pid	causes	signo  to be generated for the sending
       process,	and if signo is	not blocked for	the calling thread and	if  no
       other  thread  has  signo unblocked or is waiting in a sigwait()	system
       call for	signo, either signo or at least	the pending, unblocked	signal
       will  be	 delivered  to	the  calling thread before sigqueue() returns.
       Should any multiple pending signals in the range	SIGRTMIN  to  SIGRTMAX
       be selected for delivery, it is the lowest numbered one.	 The selection
       order  between  realtime	 and non-realtime signals, or between multiple
       pending non-realtime signals, is	unspecified.

       As a FreeBSD extension, the value of signo can be or-ed with  the  fol-
       lowing flags:

       __SIGQUEUE_TID  The  pid	parameter is the thread	identifier of a	thread
		       in the current process, and  the	 specified  signal  is
		       queued into the specified thread' queue.

RETURN VALUES
       Upon  successful	 completion,  the  value  0 is returned; otherwise the
       value -1	is returned and	the global variable errno is set  to  indicate
       the error.

ERRORS
       The sigqueue() system call will fail if:

       [EAGAIN]		  No resources are available to	queue the signal.  The
			  process  has	already	 queued	{SIGQUEUE_MAX} signals
			  that are still pending at the	receiver(s), or	a sys-
			  tem-wide resource limit has been exceeded.

       [EINVAL]		  The value of the signo argument is an	invalid	or un-
			  supported signal number.

       [EPERM]		  The process does not have the	appropriate  privilege
			  to send the signal to	the receiving process.

       [ESRCH]		  The process pid does not exist.

       [ESRCH]		  The thread with id pid does not exist	in the current
			  process.

SEE ALSO
       kill(2),	 sigaction(2),	sigpending(2), sigsuspend(2), sigtimedwait(2),
       sigwait(2), sigwaitinfo(2), pause(3), pthread_sigmask(3), siginfo(3)

STANDARDS
       The  sigqueue()	system	call  conforms	 to   IEEE   Std   1003.1-2004
       ("POSIX.1").

HISTORY
       Support for POSIX realtime signal queue first appeared in FreeBSD 7.0.

CAVEATS
       When  using  sigqueue  to  send signals to a process which might	have a
       different ABI (for instance, one	is 32-bit and the other	 64-bit),  the
       sival_int  member of value can be delivered reliably, but the sival_ptr
       may be truncated	in endian dependent ways and must not  be  relied  on.
       Further,	 many  pointer	integrity schemes disallow sending pointers to
       other processes,	and this technique should not be used in programs  in-
       tended to be portable.

FreeBSD	13.2			April 21, 2024			   SIGQUEUE(2)

NAME | LIBRARY | SYNOPSIS | DESCRIPTION | RETURN VALUES | ERRORS | SEE ALSO | STANDARDS | HISTORY | CAVEATS

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=sigqueue&sektion=2&manpath=FreeBSD+14.2-RELEASE+and+Ports>

home | help