Queue a signal to a process
#include <signal.h> int sigqueue ( pid_t pid, int signo, const union sigval value );
- The ID of the process that you want to signal.
- Zero, or the number of the signal that you want to queue for the process. For more information, see POSIX signals in the documentation for SignalAction().
- The value to queue with the signal.
Use the -l c option to qcc to link against this library. This library is usually included automatically.
The sigqueue() function causes the signal, signo to be sent with the specified value to the process, pid. If signo is zero, error checking is performed, but no signal is actually sent. This is one way of checking to see if pid is valid.
The condition required for a process to have permission to queue a signal to another process is the same as for the kill() function:
- the real or effective user ID of the sending process must
match the real or effective user ID of the receiving process
- the calling process must have the PROCMGR_AID_SIGNAL ability enabled. For more information, see procmgr_ability().
The sigqueue() function returns immediately. If SA_SIGINFO is set for signo and if the resources are available to queue the signal, the signal is queued and sent to the receiving process. If SA_SIGINFO isn't set for the signo, then signo is sent to the receiving process if the signal isn't already pending.
If pid causes signo to be generated for the sending process, and if signo isn't blocked for the calling thread and if no other thread has signo unblocked or is waiting in a sigwait() function for signo, then either signo or at least one pending unblocked signal is delivered to the calling thread before sigqueue() returns.
Should any of multiple pending signals in the range SIGRTMIN to SIGRTMAX be selected for delivery, the lowest numbered one is delivered. The selection order between realtime and nonrealtime signals, or between multiple pending nonrealtime signals, is unspecified.
- An error occurred; errno is set.
- No resources were available to queue the signal. The process has
already queued the maximum number of signals as returned by:
sysconf( _SC_SIGQUEUE_MAX )
that are still pending at the receiver(s), or a system-wide resource limit has been exceeded.
- The value of the signo argument is an invalid or unsupported signal number.
- The function sigqueue() isn't supported by this implementation.
- The calling process doesn't have the required permission; see procmgr_ability().
- The process pid doesn't exist.