SunOS man pages : alarm (2)
System Calls alarm(2)
alarm - set a process alarm clock
unsigned int alarm(unsigned int sec);
The alarm() function instructs the alarm clock of the cal-
ling process to send the signal SIGALRM to the calling pro-
cess 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:
o 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.
o 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 possi-
bly. 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
SunOS 5.8 Last change: 28 Dec 1996 1
System Calls alarm(2)
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 attri-
| ATTRIBUTE TYPE | ATTRIBUTE VALUE |
| MT-Level | Async-Signal-Safe |
exec(2), fork(2), pause(2), signal(3C),
thr_sigsetmask(3THR), attributes(5), standards(5)
SunOS 5.8 Last change: 28 Dec 1996 2