#include <unistd.h>unsigned int alarm(unsigned int sec);
The alarm() function instructs the alarm clock of the calling process to send the signal
SIGALRM to the calling process after the number
of real time seconds specified by sec have elapsed (see signal(3C)).
Alarm requests are not stacked; successive calls reset the alarm clock of the calling process.
If sec is 0, any previously made alarm request is canceled.
The fork(2) function sets the alarm clock of a new process to 0. A process created by the exec family of routines inherits the time left on the old process's alarm clock.
Calling alarm() in a multithreaded process linked with -lthread (Solaris threads) and not with -lpthread (POSIX threads) currently behaves in the following fashion:
if the calling thread is a bound thread, the resulting
SIGALRM is delivered to the bound thread's LWP, i.e. to
the calling thread. There is a bug currently that this signal is not maskable via thr_sigsetmask(3THR) on this bound thread.
if the calling thread is an unbound thread, the resulting
SIGALRM is sent to the LWP on which the thread
was running when it issued the call to alarm(). This is neither a per-process semantic, nor a per-thread semantic, since the LWP could change threads
after the call to alarm() but before the
SIGALRM delivery, causing some other thread to get it possibly. Hence this is basically a bug.
The above documents current behavior and the bugs are not going to be fixed since the above semantics are going to be discontinued in the next release.
The semantic for Solaris threads will move to the per-process semantic specified by POSIX (see standards(5)) at this future date. New applications should not rely on the per-thread semantic of alarm(), since this semantic will become obsolete.
In a process linked with -lpthread (whether or not it is also linked with -lthread), the semantics of alarm() are per-process; the resulting
SIGALRM is sent to the process, and not necessarily to the calling thread. This semantic will be supported in the future.
This semantic is obtainable by simply linking with -lpthread. One can continue to use Solaris thread interfaces by linking with both -lpthread and -lthread.
The alarm() function returns the amount of time previously remaining in the alarm clock of the calling process.
See attributes(5) for descriptions of the following attributes:
|ATTRIBUTE TYPE||ATTRIBUTE VALUE|