当使用ltrace跟踪具有fork、vfork的程序系统调用时,它显示调用SYS_Clone系统调用。那么,在内核中,SYS_fork、SYS_vfork系统调用的重要性是什么?它们只是出于历史目的吗?
由于旧的用户空间程序(无论是旧版本的libc还是旧的静态链接二进制文件)调用这些系统调用而不是较新的clone,因此它们必须在内核中维护。Linux内核在ABI中保持向后兼容性。如果向Linux内核添加了新的架构,则无需支持那些过时的系统调用,因为该架构没有旧的用户空间。因此,例如,ia64架构没有SYS_fork调用。
sys_clone
是旧的函数。sys_fork
和sys_vfork
在Linux 2.2中被添加。内部所有三个函数都使用do_fork()
。 - Roland Jansen