首页
学习
活动
专区
圈层
工具
发布

Linux进程是如何创建出来的?

我们展开今天的拆解! 一、Nginx 之 fork 创建 worker 在 Linux 进程的创建中,最核心的就是 fork 系统调用。...对于没有创建线程的进程(只包含一个主线程)来说,这个 pid 就是进程的 PID,tgid 和 pid 是相同的。 2.3 进程树关系 在 Linux 下所有的进程都是通过一棵树来管理的。...在操作系统启动的时候,会创建 init 进程,接下来所有的进程都是由这个进程直接或者间接创建的的。通过 pstree 命令可以查看你当前服务器上的进程树信息。...2.6 进程文件系统信息(当前目录等) 进程的文件位置等信息是由 fs_struct 来描述的,它的定义位于 include/linux/fs_struct.h 文件中。...回顾我们开篇提到的一个问题:操作系统是如何记录使用过的进程号的?在 Linux 内部,为了节约内存,进程号是通过 bitmap 来管理的。

2.6K21

【Linux系统】初识OS的进程管理:查看与创建进程

我认为更精辟的总结是:进程 = 内核数据结构对象 + 程序的代码和数据 这个概念需要我们在后面的学习中慢慢体会。 1.2 描述进程的数据结构PCB Linux系统的内核主要是由C语言写的。...可以证明一下,在test.exe中加一句printf("%d\n", getpid()); 还有一列为PPID,是父进程id! Linux中,新的进程往往是通过其他进程创建的,这就是父进程。...-bash,是Linux系统的命令行解释器,是所有命令行执行命令的进程的父进程!也就是说,我们执行Linux的命令,本质都是-bash创建了子进程!...也有一个叫做getppid()的系统调用,可以获取到当前进程的ppid,用法和getpid一样,不再赘述。 3. fork创建子进程 刚才说,一个进程是由父进程创建的。...我们自己写的程序启动后也是一个进程,按理说也能创建子进程。Linux就有这样一个系统调用fork! fork函数的返回值很有意思: 调用fork后,会创建一个子进程。

15910
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【Linux】进程控制:理解什么是进程创建,进程终止,进程等待 | 进程替换

    一.进程创建 fork函数创建进程,新进程为子进程,原进程为父进程; fork函数包含在头文件 进程调用fork,当控制转移到内核中的fork代码后,内核做: 分配新的内存块和内核数据结构给子进程...将父进程部分数据结构内容拷贝至子进程 添加子进程到系统进程列表当中 fork返回,开始调度器调度 关于fork函数的返回值: 返回0给子进程 返回子进程的PID给父进程 创建失败,返回值 < 0 子进程和父进程共享...单进程的进程替换 在理解什么是进程替换之前,我们先来看看进程替换怎么使用,下面是操作系统提供的进程替换的一些函数 这些函数如果调用成功则加载新的程序从启动代码开始执行,不再返回。...多进程的进程替换  前面的例子是单进程的执行系统命令的进程替换,接下来我们实现一个多进程的执行自己命令的进程替换。...因为在linux中,环境变量的内容是在一个区域放着的,而环境变量表 env 中存的是环境变量的地址,这些地址指向所对应的环境变量;         而我们putenv一个环境变量时,其实是在环境变量表中找一个未使用的下标

    88910

    Linux操作系统之进程(一):进程属性与进程创建

    因此,操作系统会为进程创建一个数据结构,在linux中叫做 struct PCB(process control block)。 ​PCB就像进程的完整档案​​,包含操作系统管理进程所需的所有信息。...kill 是 Linux/Unix 系统中用于向进程发送信号(signal)的命令(信号大家先不用理解),主要用于终止、暂停或控制进程的行为。...最终新建文件时,实际上是一个全路径。 我们可以通过chdir系统调用接口来更改进程的cwd: 父子进程关系 在Linux中,除了init进程(PID为1)外,所有进程都有父进程。...当我们从命令行运行程序时,实际上是bash(bash是命令行解释器)进程创建了子进程来执行我们的代码。...fork()是进程创建的基石​​,父子进程的独立性保障了系统稳定性。 ​​CWD决定了文件访问的基准路径​​,是进程环境的关键组成部分。 理解这些概念对深入学习Linux系统编程至关重要。

    23110

    Linux进程——进程的创建(fork的原理)

    查看进程的第二种方法 在Linux系统中,不只有ps能够查看进程,还存在着一个动态目录proc,该目录存放了所有存在的进程,目录的名称。它会随着进程的改变而随时更新它的内容!...创建子进程 2.1 系统调用函数fork 在Linux中,进程的创建方式有两种: 命令行中直接启动进程 通过代码创建 而在用代码创建进程时,实则是进行了系统调用,这里我们就得在学习一个系统调用函数...我们想让子进程协作父进程完成一些工作,这些工作是单进程解决不了的,因此子进程的创建是为了协助父进程,因此父子进程做的是不一样的事情 我们怎么保证父子进程做的是不一样的事情呢?...fork创建子进程,系统中会多一个子进程 以父进程为模板,为子进程创建PCB 但是你今天创建的子进程,是没有代码和数据的!!!目前和父进程共享代码和数据!!...创建完成子进程,只是一个开始,创建完成子进程之后,系统的其他进程,父进程和子进程,接下来要被调度执行的,当父子进程的PCB都被创建并在运行队列中排队的时候,哪一个进程的PCB先被选择调度,那个进程就先运行

    1.6K11

    原来进程是这么创建的

    大家好,我是程栩,一个专注于性能的大厂程序员,分享包括但不限于计算机体系结构、性能优化、云原生的知识。 引 前面我们介绍了一些关于进程的知识,今天我们来聊一聊进程是如何创建的。...进程创建 许多操作系统都提供了产生进程的机制,Linux内核中,采取了组合的方式来实现这样的机制,通过fork和exec的组合,将进程的生成分为两个步骤:简单来说就是fork负责生成一个进程,然后exec...在阅读《Linux内核设计与实现》一书过程中,其在这里讲解的进程创建过程与笔者记录的并不完全一致。...线程创建 首先我们需要知道,在Linux中,我们并没有对线程thread做更细节的描述,而是把线程看成是一个特殊的进程来实现。「也即线程是一个与其他进程共享某些资源的进程。」...Linux中进程和线程的创建,接下来我们将会介绍进程的终结过程,敬请期待。

    68710

    【Linux系统编程】进程概念与基本创建

    课本上称之为PCB(process control block),Linux操作系统下的PCB是: task_struct 所以: 我们每运行一个程序,除了要把它对应的指令和数据加载到内存,操作系统还会为它创建一个...3. task_struct—PCB的一种 在Linux中描述进程的结构体叫做task_struct task_struct是Linux内核的一种数据结构,它会被装载到RAM(内存)里并且包含着进程的信息.../执行这个可执行程序,操作系统就会把它加载到内存,同时为他建立PCB(在Linux上是task_struct),然后它就变成了进程 那我们如何查看这个进程呢?...那除了上面查看进程的方式,还有其它方法: 我们还可以通过 /proc 系统文件夹查看进程信息 proc其实就是process的缩写嘛 /proc 目录是 Linux 系统中的一个特殊目录,提供了有关当前运行进程和内核状态的信息...那这就是我们前面说的进程的属性跟文件的属性也稍微有一点关系 那然后: 我们当前是在proc里面这个进程PID对应的这个目录里面的,上面说了PID对应的目录是进程创建的时候才会在proc目录下新增的

    35710

    Linux系统 —— 进程控制系列 - 进程的创建与终止 :fork与exit

    进程创建 1.1 再探fork函数初识 我们之前应该聊过fork函数了,具体可以看看这篇: Linux系统 —— 进程系列 - 进程的概念,PCB与PID和fork_linux top adbd是什么线程...spm=1001.2014.3001.5501今天我们来具体聊一聊fork函数 在linux中fork函数是非常重要的函数,它从已存在进程中创建⼀个新进程。..., 这个程序正在正常的跑,不出意外的话这个进程是能够无限循环的, 但是一旦我们给进程发一个信号, 那么这个进程就会被检测为异常, 进而被操作系统杀掉,由此可以看出:进程的本质就是接收到了对应的信号...3. exit exit就是用来终止进程的,进程终⽌的本质是释放系统资源,就是释放进程申请的相关内核数据结构和对应的数据和代码 先看一段代码: 运行结果:..._exit是系统的 具体区分就是: 进程如果调用的是我们exit的接口的话,那么exit()退出时会进行资源的回收,会进行缓冲区的刷新 进程如果调用的是我们_exit的接口的话

    42200

    【Linux】Linux进程控制>进程创建&&进程终止&&进程等待&&进程程序替换

    1.进程创建 1.1 fork函数 在linux中fork函数时非常重要的函数,它从已存在进程中创建一个新进程。...如果不存在该子进程,则立即出错返回 3.2.3 获取子进程status wait和waitpid,都有一个status参数,该参数是一个输出型参数,由操作系统填充 如果传递NULL,表示不关心子进程的退出状态信息...\n"); return 1; } } return 0; } 运行结果: 4.进程程序替换 4.1 替换原理 用fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支...execve("/bin/ps", argv, envp); exit(0); } 事实上,只有execve是真正的系统调用,其它五个函数最终都调用 execve,所以execve在man手册 第...被调用的函数执行一定的操作,然后返回一个值。每个函数都有他的局部变量,不同的函数通过call/return系统进行通信 这种通过参数和返回值在拥有私有数据的函数间通信的模式是结构化程序设计的基础。

    3.2K10

    【Linux】Linux进程控制——进程创建、进程终止及进程等待详解

    ⭐进程创建 fork函数初识 在Linux中fork函数时非常重要的函数,它从已存在进程中创建一个新进程。新进程为子进程,而原进程为父进程。.../a.out [root@localhost linux]# ✨return退出 return 是一种更常见的退出进程方法。...⭐进程等待 进程等待的必要性 在Linux进程提到过,子进程退出,父进程如果不管不顾,不读取子进程的退出信息,就可能造成“僵尸进程”的问题,进而造成内存泄漏。...获取子进程的status wait和waitpid,都有一个status参数,该参数是一个输出型参数,由操作系统填充。 如果传递NULL,表示不关心子进程的退出状态信息。...否则,操作系统会根据该参数,将子进程的退出信息反馈给父进程。

    2.6K10

    Linux下创建新进程

    Linux的下是由父进程来完成的,创建完成的新进程是子进程对于子进程它有两种执行顺序的可能性: 父进程和子进程并发执行; 子进程先执行,父进程等待子进程执行完毕。...在Linux下的fork函数用于创建一个新的进程,使用fork()的函数来创建一个进程时,子进程只是完全复制父进程的资源。这样得到的子进程和父进程是独立的,具有良好的并发性。...fork()函数创建的子进程和父进程的执行顺序理论上是不确定的(因为取决于OS的调度策略)。但是实际测试中总是父进程先执行,不知道是为什么。...从运行结果可以看到,父子进程的PID是不同的,说明我们确实创建了一个进程。另外父子进程中的变量是独立的,这也说明了子进程是父进程的复制。当然,这样带来的坏处是进程间的通信必须使用专门的通信机制。...除了fork之外,Linux的系统还提供了vfork的函数来建立一个新进程.vfork建立的新进程和fork的不同之处在于: vfork创建的子进程和父进程是共享地址空间的,而不是复制,因此子进程中的数据和父进程中的数据是共享的

    2.8K10

    Linux系统编程:进程控制(创建,终止,等待)

    一,进程创建 1.1fork函数 pid_t id= fork(void); id创建失败; id==0:代表是子进程; id>0;代表是父进程,并且id是子进程的ID; 调用fork...1.在fork返回之前,创建了子进程的 PCB数据结构,以及拷贝了一份父进程的地址空间和页表;此时页表是出于只读,一旦修改就会写实拷贝; 2.在修改之前,虚拟地址都是一样的,且映射的物理地址也是一样的;...2.进程替换:让子进程去执行其他的程序 1.4fork创建失败的原因 1.系统中有太多的进程(系统进程) 2.用户所拥有的进程数量超出限制(用户进程) 二,进程终止 2.1进程正常结束 echo...父进程创建子进程的目的就是为了让子进程执行和自己不一样的代码流来完成某些特定的任务,父进程本身也就是一个跑腿的,因为代码是用户写的,所以真正关心的是用户,用户需要知道子进程将自己的工作完成得怎样了...,最后会转化为硬件信号给操作系统; 三,进程等待 3.1什么是进程等待 等待其实就是阻塞,让一个进程处于阻塞状态; 3.2为什么要进程等待 1.我们创建子进程是让子进程帮我们执行其他的任务,有的时候我们需要知道子进程的结果

    36810

    Linux创建进程达到65535的方法

    Linux上创建进程据说消耗很少,这个一直是Linux的特点,于是就专门测试Linux创建进程的极限,测试代码如下: //fork.c #include  #include 系统最多可以创建的进程数就是32768,所以我们需要进行如下设置: sysctl -w  kernel.pid_max=65535 备注:如果是使用.../fork 我的虚拟机Linux内存是512M,在创建6千多个进程时,程序运行得很慢,通过vmstat命令观察,发现swap内存的置入置出很频繁,可以判断是由于内存不足,使用虚拟内存,导致频繁的IO操作...,让测试代码变得很慢,所以创建过多进程时,系统的内存是重要衡量的一个方面。...后来我把测试代码放到一台配置比较好的至强服务器测试,内存是8G,在创建接近4W个进程时,程序的运行也到了瓶颈,依然是内存的瓶颈。

    1.9K20

    Linux:进程的创建、终止和等待

    : 1、创建了一个子进程的PCB结构体、并拷贝一份相同的进程地址空间和页表(PCB结构体中的一个指针指向该空间) 2、子进程和父进程起初共享代码和数据,并且页表中的虚拟地址和物理地址的映射关系是一样的,...——>父进程创建子进程的目的就是为了让子进程执行和自己不一样的代码流来完成某些特定的任务,父进程本身也就是一个跑腿的,因为代码是用户写的,所以真正关心的是用户,用户需要知道子进程将自己的工作完成得怎样了...(虽然表面上是一份代码),所以这个过程比如要通过系统调用接口来让操作系统帮助我们获取子进程的一些数据!!(因为OS不相信任何人) 问题3:为什么int被分为好几个部分?? ...,没等待完一个子进程就去统计一下 2、创建很多的子进程,但是具体哪个先去执行是由调度器决定的,但是我们必须知道的就是最后一个结束的必然就是父进程,因为子进程都是他创建的,所以他理所应当去回收所有的子进程...  3、进程最重要的三个核心:进程创建、进程等待、进程终止。

    96910

    【Linux】进程控制(1)进程创建、终止

    这次带来的是Linux系统中关于进程控制这部分的一些知识点,如果对你有所帮助的话,可否留下你宝贵的三连呢?...个 人 主 页: 默|笙 一、 进程创建 1.1 fork函数初识 fork函数在之前的博客里面就已经讲到过,可以点击查看—>[fork函数]。...fork调用失败是系统中有太多的进程或者是数量超过了单个用户所允许进程数量的限制。 1.2 写时拷贝COW 写时拷贝在之前的博客也有讲到过,可以点击查看—>[数据的独立性]。...但是一旦创建子进程共享代码和数据OS就会强制改变数据的权限为只读(对于父子进程都是),一旦有父进程或者是子进程尝试改变数据,就会被操作系统知道,操作系统从而对修改后的数据重新分配物理内存页。...0一般代表的是执行成功,其他的退出码代表的都是执行不成功,不成功的理由各不相同。 退出码分为两类:一类是系统提供的退出码系统,另一类是写程序的时候自定义的退出码,比如通过宏进行定义。

    11910

    【Linux】进程控制(一):进程的创建和终止

    引言 在计算机科学的演进历程中,进程概念的出现标志着操作系统设计从批处理系统向多任务系统的重大飞跃。进程作为现代操作系统资源分配的基本单位,其创建、执行与终止构成了计算机程序生命周期管理的核心框架。...本文旨在深入剖析Linux系统中进程创建的关键技术fork函数、进程终止的多种方式及其内在原理,为读者呈现一幅进程生命周期管理的清晰画卷。...一、进程创建 1.1 fork函数初识 在进程概念(一)中已经讲解大部分fork知识 在Linux中fork是一个非常重要的函数,它从已存在的进程中创建一个新的进程 。...(六)中简单提到过:【点击进入】 我们通过下面这张图更加深入的了解写时拷贝 写时拷贝是操作系统为优化进程创建而设计的内存管理策略。...1.5 for调用失败的原因 fork函数创建子进程也可能会失败,有以下两种情况: 系统中有太多的进程,内存空间不足,子进程创建失败。 实际用户的进程数超过了限制,子进程创建失败。

    20510

    linux系统的进程管理

    前言 本文讲解系统的进程管理相关内容,系统的进程管理是有关系统的所有进程的调度、排序、分配资源、创建、销毁等,是比较重要的内容。...,给 mktime 函数传来的时间结构体的赋值是由初始化时从 RTC(CMOS)读出的参数,转换为时间存入全局变量中,并且会为 JIFFIES 所用 JIFFIES 是一个系统的时钟滴答,一个系统滴答是...:基于0.11内核(修正版V3.0).pdf 提取码:ygz8 2、task_struct 进程的状态 分时技术进行多进程调度 一个进程中由以下几部分组成: 二、如何创建一个新的进程(重要) 进程是如何创建的...Linux 在初始化的过程中会进行 0 号进程的创建,fork main.c sched.c—>sched_init—>gdt linux系统级别 GDT sched_init(...复制给新创建的 task_struct 对于堆栈的拷贝,当进程做创建的时候要保持复制原有的堆栈 进程的创建是系统调用 .align 2 _sys_fork: call _find_empty_process

    69810

    Linux系统的进程管理

    @TOC一、系统进程介绍1.进程概念进程process是指正在执行的程序;是程序正在运行的一个实例。它由程序指令,和从文件、其它程序中读取的数据或系统用户的输入组成。...2.进程特点①进程是加载到内存中的一段指令②进程ID(PID)是唯一标识进程③子进程集成父进程的属性信息3.进程类型①前台进程(也称为交互式进程):这些进程由终端会话初始化和控制。...换句话说,需要有一个连接到系统中的用户来启动这样的进程;它们不是作为系统功能/服务的一部分自动启动。②后台进程(也称为非交互式/自动进程: 这些进程没有连接到终端;它们不需要任何用户输入。...③守护进程:这是后台进程的特殊类型,它们在系统启动时启动,并作为服务一直运行;它们不会死亡。它们自发地作为系统任务启动(作为服务运行)。但是,它们能被用户通过 init 进程控制。...二、查看系统进程1.PS命令#PS 查看进程信息-a 查看所有终端的进程-u 打印进程的所有者信息-x 查看不属于任何终端的进程-e 查看系统的所有进程-f 查看额外的信息-o 指定格式输出--sort

    65850
    领券