> For the complete documentation index, see [llms.txt](https://man.bsdcn.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://man.bsdcn.org/sys/sigreturn.2.md).

# sigreturn(2)

`sigreturn` — 从信号返回

## 名称

`sigreturn`

## 库

Lb libc

## 概要

`#include <signal.h>`

```c
int
sigreturn(const ucontext_t *scp);
```

## 描述

`sigreturn()` 系统调用允许用户原子地取消信号屏蔽、切换栈并从信号上下文返回。线程的信号屏蔽和栈状态从 `scp` 所指向的上下文结构体中恢复。该系统调用不会返回；由 `scp` 指定的整个用户空间上下文（包括用户空间栈指针、所有通用寄存器、协处理器状态、进程状态寄存器和程序计数器）都从该上下文中恢复。执行在指定上下文的程序计数器处恢复。

当从信号返回到先前执行的程序时，此系统调用由内核提供的信号蹦床代码（signal trampoline code）使用，该代码在某些架构上位于虚拟 DSO（VDSO）中，如果未提供 VDSO 则作为原始代码位于共享页中。

## 返回值

如果成功，该系统调用不会返回。否则，可能返回值 -1，并设置 `errno` 以指示错误。某些由硬件检测到的条件会导致向线程传递同步陷阱信号，以替代或附加于设置系统调用错误代码。

## 错误

`sigreturn()` 系统调用在以下情况之一发生时会失败，且线程上下文保持不变。

**\[`EFAULT`]** `scp` 参数指向不属于进程地址空间有效部分的内存。

**\[`EINVAL`]** 进程状态长字无效，或会不当提升进程的特权级别。

## 参见

[sigaction(2)](/sys/sigaction.2.md), [setjmp(3)](/gen/setjmp.3.md), [ucontext(3)](/gen/ucontext.3.md)

## 历史

`sigreturn()` 系统调用出现于 4.3BSD。
