linux系统调用fork()、vfork()、clone()讲解

本文详细介绍了Linux系统中的三种进程创建调用:fork()、vfork()和clone()。clone()主要用于创建线程,而fork()会完全复制父进程的资源,vfork()则主要作为创建进程的临时步骤。它们都是通过do_fork()函数的不同配置来实现各自的功能。在创建过程中涉及到了进程资源的复制、pid的分配、信号量的同步以及不同情况下进程的处理策略等。
摘要由CSDN通过智能技术生成
linux系统调用fork()、vfork()、clone()讲解

clone()主要用来创建一个线程,可以是内核线程和用户线程,也可以创建进程,有选择的复制父进程资源。
fork()用来全面复制父进程资源
vfork()也是用来创建线程,但主要知识作为创建进程的中间步骤。
这三个函数主要是通过配置do_fork()函数来实现的。

int do_fork(unsigned long clone_flags, unsigned long stack_start,
   struct pt_regs *regs, unsigned long stack_size)
{
int retval = -ENOMEM;
struct task_struct *p;
DECLARE_MUTEX_LOCKED(sem);产生同步互斥的信号量

if (clone_flags & CLONE_PID) {如果父子进程共享同一个进程号
if (current->pid)           
return -EPERM;
}
current->vfork_sem = &sem;

p = alloc_task_struct();
if (!p)
goto fork_out;

*p = *current;复制父进程的task_struct

retval = -EAGAIN;
if (atomic_read(&p->user->processes) >= p->rlim[RLIMIT_NPROC].rlim_cur)该用户已经拥有的进程数量达到规定值
goto bad_fork_free;
atomic_inc(&p->user->__count);
atomic_inc(&p->user->processes);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值