小编use*_*462的帖子

vfork() 调用 SYS_vfork 但 fork() 调用 SYS_clone?

在运行ltrace -S由gcc(版本 5.4.0)编译的两个程序后,一个调用vfork(),一个调用fork(),我发现vfork()调用SYS_vforkwhilefork()调用SYS_clone。我找不到任何有关这个特定的行为在任何地方的任何信息(有消息说各的fork(),vfork()并且clone()由相应的命名来实现sys_通话,而其他消息来源说,所有的三个电话使用实施sys_clone)。

源代码:

#include<stdio.h>
main()
{
        int pid;
        pid=vfork();
}
Run Code Online (Sandbox Code Playgroud)

输出ltrace -S:

...
__libc_start_main([some stuff here] <unfinished ...>
vfork([more stuff] <unfinished ...>
SYS_vfork([more stuff])
--- SIGCHLD (Child exited) ---
Run Code Online (Sandbox Code Playgroud)

libc 使用SYS_vforkforvfork() 但不使用SYS_forkfor是否有原因fork()?我读过托马斯·尼曼的回答到 哪个文件在内核指定fork()的一样,vfork()...在使用sys_clone()系统调用,它说:

vfork()反过来是通过一个单独的CLONE_VFORK标志实现的,这将导致父进程休眠,直到子进程通过信号唤醒它。子进程将是父进程命名空间中唯一的执行线程,直到它调用exec()或退出。不允许孩子写入内存。相应的clone()调用可能如下: …

linux glibc linux-kernel ltrace

1
推荐指数
1
解决办法
958
查看次数

标签 统计

glibc ×1

linux ×1

linux-kernel ×1

ltrace ×1