実際に使用してみたことはないのですが・・・
シングルプロセスの場合、そもそも toma_kazusaさんが意図されているような「複数のalarmを起動」ということは出来ないのではありませんか?
下記の説明が分かりやすいと思いますが
Linux シグナル入門
Linux を含む Unix 類はプロセスごとに一つずつセルフタイマーのようなものを持つことができる。
つまり、タイマーは1個しか無いので、alarm関数を呼び出す度にタイマーが再設定されるだけ(最後の設定が有効になる)だと思います。
引数 seconds の値はタイマーが切れるまでの秒数または 0 である。 0 のときはタイマーをセットしない。 戻り値は,呼び出し前にタイマーがセットされていたならばその残り秒数,セットされていなかったならば 0 である。 呼び出し前にセットされていたタイマーはキャンセルされる。
と説明されている通りです。
ちなみに、タイマーが切れてシグナル SIGALRM が発生した時のデフォルト動作はプロセスの終了ですが、シェルスクリプトならば trap コマンド、C言語ならばシグナル処理関数を適宜設定する事で、任意の動作をさせることが出来ます。
【参考】シグナル処理関数(シグナルハンドラ)を登録する
それで、例えば30秒、40秒、50秒の時点で何らかの(短い)処理をしたい場合は、SIGALRM の発生回数をカウントしつつ
0. alarm(30) を設定し何らかの処理を実施
0. シグナル処理関数の中で alarm(10) を設定し最初の処理を実施《30秒時点》
0. シグナル処理関数の中で alarm(10) を設定し二つ目の処理を実施《40秒時点》
0. シグナル処理関数の中で alarm(0) でタイマーをリセットして三つ目の処理を実施《50秒時点》
のような実装方法も可能かなと思います。