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

fork,wait和exec

fork,wait和exec fork系统调用 wait系统调用 exec系统调用 为什么要把fork和exec分开 ---- fork系统调用 1、子进程不会从 main()函数开始执行,而是直接从...fork()系统调用返回。...2、子进程拥有自己的地址空间(即拥有自己的私有内存)、寄存器、程序计数器等 3、父进程获得的返回值是新创建子进程的 PID,而子进程获得的返回值是 0 4、子进程和父进程的运行顺序取决于CPU调度顺序...子进程执行 exec()之后,几乎就像p3.c 从未运行过一样。...和exec分开 在构建UNIX shell 的时候非常有用,因为这给了shell 在fork 之后exec 之前运行代码的机会,这些代码可以在运行新程序前改变环境,实现一些有趣的功能。

1.3K20

Linux——进程管理篇(详解fork和exec)

文章目录 Linux——进程管理篇(详解fork和exec) 如何在Linux编写与运行代码 编写 编译 运行 进程管理 fork system exec 总结 Linux——进程管理篇(详解fork...和exec) 这篇文章,主要的目的就是帮助同学们完成操作系统的实验,因为考虑到很多同学第一次接触Linux,相当不习惯命令行的操作方式,所以我会详细来介绍,相信只要跟着步骤一步一步来,就一定能完成我们的实验...,Linux 提供了fork()函数与execve()函数,接下来,我们将介绍如何使用这两个函数。...有些同学可能好奇了,为什么if和else同时执行了呢?其实很简单,就是因为这是两个进程,一个进程运行了一个。...---- 总结 其实说分析system()和exec()两个函数的区别,也就是分析fork和exec的区别,而他们之间的区别,简单一点来描述就是fork是复制,exec是覆盖。

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

    【Linux】从 fork() 到 exec():理解 Linux 进程程序替换的魔法

    在Linux或UNIX系统中,进程程序替换通常发生在一个进程通过fork()创建了子进程之后,子进程用exec()函数加载和执行另一个程序。...也就是说,进程程序替换就是在不改变进程的PID(进程ID)的情况下,用一个全新的程序来替换当前的内存空间和执行内容。...2.3.1 execlp函数 execlp函数和execl函数的区别在于,execlp在第一个参数时候,不需要全路径,只需要写上执行命令的文件名即可,表示你需要执行谁,往后也就是和execl的参数一样。...总结 进程程序替换是指用一个新的可执行程序替换当前进程的内存空间和执行内容,但进程ID不变。 常用的替换函数是 exec 系列函数(如 execl()、execvp())。...它常用于父进程通过 fork() 创建子进程后,子进程用 exec() 替换为新的程序来执行指定任务。 替换后的进程将完全抛弃原来的代码和数据,并开始执行新加载的程序。

    47710

    从零开始学Linux进程控制:fork、wait、exec 详解

    因此无论从内核的相关管理数据结构还是从代码以及数据,它都是独立的. 1.1:fork函数初识 在linux中fork函数时非常重要的函数,它从已存在进程中创建一个新进程。...进程调用fork,当控制转移到内核中的fork代码后,内核会做: 分配新的内存块和内核数据结构给子进程. 将父进程部分数据结构内容拷贝至子进程....PS:fork之后,父进程和子进程谁先执行完全由调度器决定. 1.2:fork函数返回值 fork函数为什么要给子进程返回0,给父进程返回子进程的PID?...例如子进程从fork返回后,调用exec函数。 1.4:fork函数调用失败原因 fork函数创建子进程也可能会失败,有以下两种情况: 系统中有太多的进程,内存空间不足,子进程创建失败。...用fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支),子进程往往要调用一种exec函数以执行另一个程序。

    22110

    linux find exec

    查找当前目录下的以.log结尾的文件或目录,并移动到test目录下 find是我们很常用的一个Linux命令,但是我们一般查找出来的并不仅仅是看看而已,还会有进一步的操作,这个时候exec的作用就显现出来了...一. exec参数说明: -exec 参数后面跟的是command命令,它的终止是以;为结束标志的,所以这句命令后面的分号是不可缺少的,考虑到各个系统中分号会有不同的意义,所以前面加反斜杠。...使用find时,只要把想要的操作写在一个文件里,就可以用exec来配合find查找,很方便的。在有些操作系统中只允许-exec选项执行诸如l s或ls -l这样的命令。...exec选项后面跟随着所要执行的命令或脚本,然后是一对儿{ },一个空格和一个,最后是一个分号。为了使用exec选项,必须要同时使用print选项。...root 6 Nov 14 17:55 test [root@localhost home]# ls 1.log 2.log 3.c 4.log 7.c test 说明: ** -ok: 和-

    5.5K20

    Linux之find exec

    exec解释 -exec参数后面跟的是command命令,它的终止是以;为结束标志的,所以这句命令后面的分号是不可缺少的,考虑到各个系统中分号会有不同的意义,所以前面加反斜杠。...使用find时,只要把想要的操作写在一个文件里,就可以用exec来配合find查找,很方便的。在有些操作系统中只允许-exec选项执行诸如ls或ls -l这样的命令。...exec选项后面跟随着所要执行的命令或脚本,然后是一对儿{},一个空格和一个\,最后是一个分号。为了使用exec选项,必须要同时使用print选项。...-exec使用grep > find / -name "passwd*" -exec grep "root" {} \; 任何形式的命令都可以在-exec选项中使用。.../rumenz \; 原文链接:https://rumenz.com/rumenbiji/linux-find-exec.html 微信公众号:入门小站

    4.5K00

    Linux之find exec

    exec解释 -exec参数后面跟的是command命令,它的终止是以;为结束标志的,所以这句命令后面的分号是不可缺少的,考虑到各个系统中分号会有不同的意义,所以前面加反斜杠。...使用find时,只要把想要的操作写在一个文件里,就可以用exec来配合find查找,很方便的。在有些操作系统中只允许-exec选项执行诸如ls或ls -l这样的命令。...exec选项后面跟随着所要执行的命令或脚本,然后是一对儿{},一个空格和一个\,最后是一个分号。为了使用exec选项,必须要同时使用print选项。...-exec使用grep > find / -name "passwd*" -exec grep "root" {} \; 任何形式的命令都可以在-exec选项中使用。...-name "*.log" -exec mv {} ../rumenz \;

    4.7K20

    Linux之find exec

    exec解释 -exec参数后面跟的是command命令,它的终止是以;为结束标志的,所以这句命令后面的分号是不可缺少的,考虑到各个系统中分号会有不同的意义,所以前面加反斜杠。...使用find时,只要把想要的操作写在一个文件里,就可以用exec来配合find查找,很方便的。在有些操作系统中只允许-exec选项执行诸如ls或ls -l这样的命令。...exec选项后面跟随着所要执行的命令或脚本,然后是一对儿{},一个空格和一个\,最后是一个分号。为了使用exec选项,必须要同时使用print选项。...-exec使用grep > find / -name "passwd*" -exec grep "root" {} \; 任何形式的命令都可以在-exec选项中使用。...-name "*.log" -exec mv {} ../rumenz \; 原文链接:https://rumenz.com/rumenbiji/linux-find-exec.html

    4.4K20

    Linux之find exec

    exec解释 -exec参数后面跟的是command命令,它的终止是以;为结束标志的,所以这句命令后面的分号是不可缺少的,考虑到各个系统中分号会有不同的意义,所以前面加反斜杠。...使用find时,只要把想要的操作写在一个文件里,就可以用exec来配合find查找,很方便的。在有些操作系统中只允许-exec选项执行诸如ls或ls -l这样的命令。...exec选项后面跟随着所要执行的命令或脚本,然后是一对儿{},一个空格和一个\,最后是一个分号。为了使用exec选项,必须要同时使用print选项。...-exec使用grep > find / -name "passwd*" -exec grep "root" {} \; 任何形式的命令都可以在-exec选项中使用。...-name "*.log" -exec mv {} ../rumenz \; 原文链接:https://rumenz.com/rumenbiji/linux-find-exec.html

    4.8K30

    Linux的fork使用

    Linux的fork使用 fork函数可以算是Linux里有点不好明白的函数了,调用一次,返回两次,虽然在平时的写法中,有基本固定的写法,但是有时候看起来还是有些让人头疼的。...因此,使用 fork()函数的代价是很大的。 ? 日常使用fork 简单来说, 一个进程调用 fork() 函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。...实际上,更准确来说,Linux 的 fork() 使用是通过写时拷贝 (copy- on-write) 实现。写时拷贝是一种可以推迟甚至避免拷贝数据的技术。...其他子进程 cout<<"这是父进程: "<<getpid()<<endl; } } 正确的使用Linux中的用fork()由一个父进程创建同时多个子进程 的格式如下: int...int main(int argc, char* argv[]) { fork(); fork() && fork() || fork(); fork(); } 每fork一次就翻倍

    4.3K41

    Linux多进程(fork)

    进程概念: 一个进程是一次程序执行的过程,它和程序不同,程序是静态的,它是一些保存在磁盘上可执行的代码和数据的集合,而进程是一个动态概念,也是操作系统分配资源的最小单位 fork和exec是两个重要的系统调用...,fork的作用是根据现有的进程复制出一个新的进程,原来的进程称为父进程,新的进程成为子进程, 系统中运行着很多进程,这些进程都是从开始的一个进程一个一个复制出来的。...#include #include pid_t fork(void); fork调用失败返回-1,调用成功在父子进程中的返回值不一样,子进程中返回0,父进程中返回的数值大于...include //输入输出函数 int main(void){ pid_t pid; char * message; int n; pid = fork...(); if(pid < 0){ perror("fork failed"); } if(pid == 0){ n = 6;//父子进程变量n互不影响

    2.4K30

    linux fork函数浅析

    ,指令指针也全然同样,子进程拥有父进程当前执行到的位置(两进程的程序计数器pc值同样,也就是说,子进程是从fork返回处開始执行的),但有一点不同,假设fork成功,子进程中fork的返回值是0,父进程中...fork的返回值是子进程的进程号,假设fork不成功,父进程会返回错误。...和该进程相关联的所有数据(包含变量,内存空间,缓冲区等等); o. 程序的运行上下文(execution context)。...把将要接替这个进程占用 CPU的那个进程的上下文,从进程表中读出,并更新相应的寄存器(这个过程称为“上下文交换(process context switch)”,实际的上下文交换须要涉及到很多其它的数据,那和fork...新进程和原有进程的可运行程序是同一个程序;上下文和数据,绝大部分 就是原进程(父进程)的拷贝,但它们是两个相互独立的进程!

    1.6K20

    exec()和元类

    一、exec()的作用 exec执行储存在字符串或文件中的 Python 语句,相比于 eval,exec可以执行更复杂的 Python 代码, 语法: exec(code,global_dict,local_dict...) code:传入的文本代码 global_dic:传入的字典,接收的是全局名称空间和内置名称空间 local_dict:传入的字典,接收局部名称空间 例子 code = ''' global x x...= 10 y = 20 ''' global_dict = {'x':200} local_dict = {} exec(code,global_dict,local_dict) print(global_dict...) #global_dict返回全局名称空间和内置名称空间 print(local_dict) #local_dict返回局部名称空间 {'x': 10, '__builtins__': {'__name...2.2自定义创建元类 自定义一个类,继承type类,派生出自己的属性和方法 需要使用元类的类通过metaclass指定自定义好的元类。

    94520

    Linux之父子进程fork

    在Linux系统中,fork 是一个非常重要的系统调用,它用于创建新的进程。通过 fork,一个进程(称为父进程)可以创建一个与自己几乎完全相同的副本(称为子进程)。...三、对进程的操作 在 Linux 系统中,进程是系统资源分配和调度的基本单位,对进程的操作是系统管理的重要组成部分。以下是对进程可以进行的一些常见操作,按功能分类介绍: 一、进程的创建与启动 1....创建进程 fork():这是 Linux 中最常用的创建进程的方式。它会创建一个与父进程几乎完全相同的子进程,子进程继承父进程的资源(如文件描述符、环境变量等)。...// 错误处理 } vfork():与 fork() 类似,但子进程共享父进程的地址空间,直到子进程调用 exec() 或退出。...Linux 提供了多种同步和通信机制,例如: 管道(Pipe):管道是一种简单的进程间通信方式,父进程可以通过管道向子进程发送数据,或者从子进程接收数据。

    9610

    Linux内核14-clone()、fork()和vfork()的区别

    Linux内核用于创建进程的系统调用有3个,它们的实现分别为:fork、vfork、clone。...2. fork() linux将fork实现为这样的clone()系统调用,其flags参数指定为SIGCHLD信号并清除所有clone标志,child_stack参数是当前父进程栈的指针。...vfork最初是因为fork没有实现COW机制,而在很多情况下fork之后会紧接着执行exec,而exec的执行相当于之前的fork复制的空间全部变成了无用功,所以设计了vfork。...总结 clone、vfork和fork是根据不同的需求而开发的。 clone 参数比较多,可以实现的控制就比较多,clone的设计初衷是给pthread线程库的开发提供支持的。...fork就是一个创建完整进程的调用。 clone、vfork和fork在内核层都是调用的_do_fork()这个函数。

    2.2K10

    Linux fork那些隐藏的开销

    和上述create_process比较,fork简直就是一个丑陋的幽灵,不知道如此诡异的东西怎么在50年间被吹捧成了简单的典范,若不是UNIX卫道士们的鼓吹和灌输,fork应该是反面教材才对!...和这个风格相类似的还有类似FD_CLOSEEXEC这种,你说本来就是fork的事,fork啥参数也没有,直接把锅甩给了exec。...fork保留下来是个奇迹,其中多亏了写时复制的功劳。 写时复制无法继续拯救UNIX/Linux fork了。但写时复制本身却真的是伟大的。...显然,create和load相分离的fork+exec方案看起来真的是很灵活,并且 职责明确,父子进程没有任何参数交互,子进程完全对自己负责-- 加载image是子进程自己的事!...对比fork和CLONE_VM clone的时间开销 文章开头我提到, 如果你只是想exec一个新的程序,干嘛不试试clone?

    5.6K50
    领券