また、 カーネルは、 ユーザーモードへの遷移時にシグナルハンドラーが呼び出され、 ハンドラーからのリターン時に、 制御が "signal trampoline" と呼ばれるユーザー空間コードブロックに渡されるように、準備を行う。 signal trampoline のコードが sigreturn() を呼び出す。
sigreturn() は、シグナルハンドラーを起動するために行ったことの全て --- プロセスのシグナルマスクの変更、 シグナルスタックの切り替え (sigaltstack(2) 参照) --- の取り消しを行う。 プロセスのシグナルマスクの復元、 スタックの切り替え、 プロセスのコンテキスト (プロセッサフラグ、 レジスター (スタックポインター、 命令ポインターを含む)) の復元を行い、 プロセスがシグナルにより割り込まれた場所から実行を再開できるようにする。
かつて、 UNIX システムでは signal trampoline コードがユーザースタックに置かれていた。 今日では、 ユーザースタックのページは保護され、 コードの実行は禁止されている。 したがって、 現代の Linux システムでは、 アーキテクチャー依存ではあるが、 signal trampoline コードは vdso(7) 内もしくは C ライブラリ内に置かれる。 後者の場合、 C ライブラリは trampoline code の場所を sigaction(2) に渡される sigaction 構造体の sa_restorer フィールドを使って渡し、 sa_flags フィールドの SA_RESTORER フラグをセットする。
保存されたプロセスコンテキスト情報は ucontext_t構造体に置かれる (<sys/ucontext.h> 参照)。 この構造体は、 SA_SIGINFO フラグを付けて設定されたシグナルハンドラーの第 3 引き数としてシングルハンドラー内で参照できる。
他のいくつかの UNIX システムでは、 signal trampoline の扱いは少し異なる。 特に、 いくつかのシステムでは、 ユーザーモードに戻る際に、 カーネルは制御を (シグナルハンドラーではなく) trampoline に渡し、 trampoline コードがシグナルハンドラーを呼び出す (その後ハンドラーが返ると sigreturn() を呼び出す)。