POSIX规范中系统调用定义及fork()底层实现的相关疑问
关于POSIX规范与fork()系统调用底层实现的疑问解答
POSIX完全不规定系统调用的具体触发方式,它只定义系统调用的接口语义、参数、返回值行为,确保符合POSIX标准的系统上,调用
fork()能得到一致的结果(比如创建子进程、返回值的不同含义等)。fork()本身是C标准库提供的封装函数,而非直接的系统调用入口。不同操作系统会用自己的方式实现这个封装到内核的跳转:- 你提到的Linux早期用
int 0x80软中断(配合eax=2指定调用fork对应的系统调用号),这是Linux特有的实现细节; - 现代Linux已经更多使用
syscall或sysenter指令来触发系统调用,效率比软中断更高; - 像BSD系统、macOS等其他符合POSIX的系统,触发系统调用的指令和调用号也完全不同。
- 你提到的Linux早期用
简单来说:POSIX管的是“调用fork()要做什么”,而“怎么调用到内核”是各个操作系统自己决定的实现细节,和POSIX规范无关。
内容的提问来源于stack exchange,提问作者robertapengelly
相关产品推荐
相关产品推荐

