首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linux 创建子进程执行任务实现方法

Linux 操作系统紧紧依赖进程创建来满足用户需求。例如,只要用户输入一条命令,shell 进程就创建一个新进程,新进程运行 shell 另一个拷贝并执行用户输入命令。...Linux 系统中通过 fork/vfork 系统调用来创建新进程。本文将介绍如何使用 fork/vfork 系统调用来创建新进程并使用 exec 族函数在新进程执行任务。...exec 族函数 使用 fork/vfork 创建子进程执行是和父进程相同程序(但有可能执行不同代码分支),子进程往往需要调用一个 exec 族函数以执行另外一个程序。...总结 fork/vfork 函数和 exec 族函数都是 Linux 系统中非常重要概念。...本文试图通过简单 demo 来演示这些函数基本用法,为理解 Linux 系统中父进程与子进程概念提供一些直观感受。

3.8K11

linux获取进程执行时间方法示例

linux获取进程执行时间有两种方法可以获取,第一种是用time命令,time 进程。...第二种是通过在程序中进行记录,首先利用sysconf函数获取时钟滴答数,再用times获取tms结构,详细看下面的示例代码 1、前言 测试一个程序执行时间,时间包括用户CPU时间、系统CPU时间、时钟时间...之前获取之前时间都是在程序main函数用time函数实现,这个只能粗略计算程序执行时间,不能准确获取其他时间。在看《APUE》时,书中有关程序时间测试程序,非常正规,提供这三个时间。...2、获取方法 有两种方法可以获取,第一种是用time命令,time 进程。第二种是通过在程序中进行记录,首先利用sysconf函数获取时钟滴答数,再用times获取tms结构。...,需要除以系统时钟滴答数,得出实际秒数。

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

    进程执行和挂起

    1 进程总览 进程是对逻辑抽象,我们从操作系统书籍中对进程有了很多认识,但是对进程实现可能不太了解,这篇文章尝试解释一下关于进程实现大致原理。...2 进程执行 当系统创建一个进程之后,会设置cs:ip寄存器值,如果是fork,则ip就是fork函数后面的语句ip地址。如果是execute则ip地址由编译器指定。...不管怎样,当进程开始执行时候,cpu就会解析cs:ip拿到一条指令去执行。那么cs:ip是如何被解析呢?...执行进程时候,tss选择子(GDT索引)被加载到tss寄存器,然后把tss里上下文也加载到对应寄存器,比如cr3,ldt选择子。...,然后把链表头指针指向当前进程, 然后切换到其他进程执行,当被wake_up唤醒时候,wake_up会唤醒链表第一个 睡眠节点,因为第一个节点里保存了后面一个节点地址

    1.7K10

    Linux进程与可执行程序关系&&fork创建子进程&&写实拷贝理解

    一、进程与可执行程序之间关系理解 系统会将此时在系统运行进程各种属性都以文件形式给你保存在系统proc目录下。...当前我myprocess程序正在运行 而此时我将其对应执行程序删掉 这个进程所对应执行程序已经被语法高亮了,证明已经被删掉了   而此时我执行程序仍在运行,这也从侧面证明了当一个进程运行起来时候...从上面的截图中我们也可以看到,/proc目录下虚拟文件系统是会记录下进程工作目录和对应可执行程序路径,/proc目录下记录进程信息与PCB中某些信息有重叠,比如说PCB中同样也会记录下进程工作目录和对应可执行程序路径...这和linux虚拟地址有关,也就是说,一个变量可以指向不同地址空间。 写实拷贝 任意进程之间是具有独立性,不会互相影响。...进程都有自己代码和数据,系统创建出来进程PCB默认就会指向父进程代码和数据,想让父子进程分别执行不同程序,那就可以在代码中根据父子进程fork返回值不同设置ifelse语句,让父子进程分别执行不同代码

    18010

    Linux进程——Linux进程概念(PCB理解)

    前言:在了解完冯诺依曼体系结构和操作系统之后,我们进入了Linux下一篇章Linux进程,但在学习Linux进程之前,一定要阅读理解上一篇内容,理解“先描述,再组织”才能更好理解进程含义。...Linux进程学习基础 本篇主要内容: 进程概念 通过系统调用获取进程标示符 1....进程概念 在学习进程之前,大家对进程肯定初步了解,那么今天我们来深入了解一下 基本概念: 课本概念:程序一个执行实例,正在执行程序等 内核观点:担当分配系统资源(CPU时间,内存)实体。...而操作系统管理进程也是如此,管理进程对应数据 而在操作系统对进程上,依然采用是“先描述,再组织”方法 操作系统将可执行程序各种数据加载,拷贝出来,再用结构体把数据存进去,由于可能同时会存在多个进程...:ps ajx | head -1 && ps ajx | grep 可执行程序 2.2 终止进程 在我们刚接触Linux时,通常按CTRL+c可以结束进程,现在在学习Linux进程时,还有一种方法可以杀死进程

    21110

    Linux进程——Linux下常见进程状态

    本篇主要内容: 操作系统中进程状态 Linux进程状态 在开始之前,我们先来简单了解以下进程状态 进程本质就是PCB中一个变量!!! 所谓状态变化,本质就是修改整形变量!!!...,因为这个是必然,而现在首要任务是让操作系统能继续执行下去!...此时,恰好系统内内存资源已经严重不足了,系统压力太大,Linux在是在没办法时候,会通过杀掉进程,节省资源,来不及进程反应直接被系统 “干掉” 。...在执行程序时在末尾加上 & 通过视频我们来更直观了解二者区别 后台进程与前台进程 停止状态 T (stopped) 在进程访问软件资源时候可能暂时不让进程进行访问,就将进程设置为STOP t...总结 在了解Linux进程分类时,我们通常是先了解操作系统进程,因为二者有一定联系,了解操作系统能更好理解进程在操作系统中运行关系。进程状态在进程中也极为重要,希望大家能理解透彻!

    13510

    Linux进程调度_linux进程查看和调度

    Linux 系统为了提升响应速度,倾向于优先调度 I/O 消耗型。...一、普通进程Linux 中普通进程依赖称之为 nice 值 东东来进行进程优先级描述。nice 值范围是 [-20, 19]。...越高优先级 普通进程 有着越高执行时间(注意,这里值越高执行时间,指的是在一小段观察时间内,每个可执行进程执行一遍情况,这里描述可能产生一些歧义,稍安勿躁,接着看)。...—— 小结 实时进程优先级:value 越高,优先级越大 普通进程优先级:nice值越高,普通进程优先级越小 任何实时进程优先级 > 普通进程 Linux 调度算法 ---- Linux 中有一个总调度结构...Linux 调度时机 ---- 一、进程切换 从进程角度看,CPU是共享资源,由所有的进程按特定策略轮番使用。

    20.7K10

    详解Linux内核进程调度函数schedule()触发和执行时机

    内核调度操作分为触发和执行两个部分,触发时仅仅设置一下当前进程TIF_NEED_RESCHED标志,执行时候则是通过schedule()函数来完成进程选择和切换。...内核在两种情况下会设置该标志,一个是在时钟中断进行周期性检查时,另一个是在被唤醒进程优先级比正在运行进程优先级高时。...需要注意是,此处仅仅是设置标志而没有执行schedule()函数,在各种系统调用、中断返回代码最后,才会根据这个标志来决定是否执行schedule()函数。...参考文献:《Linux技术内幕》 PS:刚开始学习Linux内核时候很容易被各种结构体各种概念充斥脑海,一团乱麻。这时候需要把它们各自负责功能以及之间相互配合理清楚,推荐这本书。...看完《Linux内核设计与实现》后可以相互比照,效果不错。 以上就是本文全部内容,希望对大家学习有所帮助。

    2.5K10

    Linux进程——Linux进程进程优先级

    如果对前面Linux进程不太熟悉可以先阅读: Linux进程 本篇主要内容: 僵尸进程和孤儿进程 Linux进程优先级 1. 僵尸进程 僵尸进程就是处于僵尸状态下进程!...1号进程实际上就是操作系统 3. 进程优先级 3.1 基本概念 基本概念: cpu资源分配先后顺序,就是指进程优先权(priority)。 优先权高进程有优先执行权利。...配置进程优先权对多任务环境linux很有用,可以改善系统性能。...NI :NICE值,表示优先级修改数据 NICE其取值范围是-20至19,一共40个级别 Linux进程优先级数值范围:60~99 Linux中默认进程优先级都是:80 Linux是支持动态优先级调整...总结 本篇文章前部分紧贴上篇Linux进程,分析完了Linux下常见进程状态,然后初步了解了Linux进程优先级,而进程优先级与前面内容相差较大,希望大家能够多花点时间理解!

    10010

    Linux执行文件与进程虚拟地址空间

    作者简介: 本文由西邮陈莉君教授研一学生贺东升编辑,梁金荣、张孝家校对 建议结合之前linux内存寻址方式》看。...Linux执行文件与进程虚拟地址空间 一个可执行文件被执行同时也伴随着一个新进程创建。...Linux会为这个进程创建一个新虚拟地址空间,然后会读取可执行文件文件头,建立虚拟地址空间与可执行文件映射关系,然后将CPU指令指针寄存器设置成可执行文件入口地址,然后CPU就会从这里取指令执行...Proc目录下进程虚拟地址空间布局 Linux在装载可执行文件时候,会将这些segment映射到进程地址空间中。映射时候,这里面的segment会对应一个VMA。...Linux进程虚拟地址空间中一个段叫做虚拟内存区域(VMA)。在/proc目录下,可以查看一个进程虚拟地址空间,通过命令 cat /proc/pid/maps ?

    4.3K30

    LinuxLinux进程控制>进程创建&&进程终止&&进程等待&&进程程序替换

    1.进程创建 1.1 fork函数 在linux中fork函数时非常重要函数,它从已存在进程中创建一个新进程。...具体见下图: 1.3 fork常规用法 一个父进程希望复制自己,使父子进程同时执行不同代码段。例如,父进程等待客户端请求,生成子进程来处理请求 一个进程执行一个不同程序。...执行return n等同于执行exit(n),因为调用main运行时函数会将main返回值当做 exit参数 2.2.2 异常退出 ctrl + c,信号终止 3.进程等待 3.1 进程等待必要性...\n"); return 1; } } return 0; } 运行结果: 4.进程程序替换 4.1 替换原理 用fork创建子进程执行是和父进程相同程序(但有可能执行不同代码分支...Linux鼓励将这种应用于程序之内模式扩展到程序之间。如下图 一个C程序可以fork/exec另一个程序,并传给它一些参数。这个被调用程序执行一定操作,然后通过exit(n)来返回值。

    15210

    Linux进程控制——Linux进程等待

    前言:接着前面进程终止,话不多说我们进入Linux进程等待学习,如果你还不了解进程终止建议先了解: Linux进程终止 本篇主要内容: 什么是进程等待 为什么要进行进程等待 如何进程等待...进程等待概念: 我们通常说进程等待其实是通过wait/waitpid方式,让父进程(一般)对子进程进行资源回收等待过程,父进程必须等待这个子进程结束后,处理它代码和数据! 2....进程等待必要性 在了解完进程等待概念后,新问题出现了,我们为什么要进行进程等待,进程等待必要性是什么?...父进程创建子进程目的是为了让子进程协助自己完成任务,而父进程需要知道子进程将任务完成得如何。这就需要通过进程等待方式,获取子进程退出信息。 3....总结拓展 拓展一:父进程如何得知子进程退出信息 父进程调用wait()/waitpid()来获取子进程退出信息,调用接口就传入了一个status参数,而父进程中存在着一个statusp指针

    10710

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

    查看进程第二种方法 在Linux系统中,不只有ps能够查看进程,还存在着一个动态目录proc,该目录存放了所有存在进程,目录名称。它会随着进程改变而随时更新它内容!...创建子进程 2.1 系统调用函数fork 在Linux中,进程创建方式有两种: 命令行中直接启动进程 通过代码创建 而在用代码创建进程时,实则是进行了系统调用,这里我们就得在学习一个系统调用函数...我们再来看看进程ppid 说明了一个情况:fork之后,会创建子进程,并且子进程会和父进程一起进入后面的函数并且分别执行一次 2.2 fork一般写法 结合目前: 只有父进程执行fork之前代码...(一定),fork之后,父子进程都要执行后续代码!...变量id是父进程定义变量,保存数据,返回时候发生写时拷贝,不同 进程执行代码中变量id获取值不同,所以id在父进程和子进程中值不同 3.

    19210

    Linux进程控制——Linux进程终止

    前言:前面了解完前面的Linux进程基础概念后,我们算是解决了Linux进程一大麻烦,现在我们准备更深入了解Linux进程——Linux进程控制!...我们主要介绍Linux进程控制内容包括:进程终止,进程等待与替换,进程程序替换! 本篇主要内容: 重识进程创建 进程退出场景 错误码和退出码 1....sleep(100); return 0; } 而代码中exit函数可以让进程终止 这段代码涵盖了fork创建进程进程终止,让我们来执行以下 fork创建进程进程终止...int main() { return 31; } 我们在执行完,这段代码后,再用指令查看退出码 我们可以发现指令:echo $?...exit最后也会调用exit, 但在调用exit之前,还做了其他工作: 执行用户通过 atexit或on_exit定义清理函数。

    10910

    linux通过进程名杀死进程_linux关闭进程命令

    笔记:根据一个进程名字或启动此进程命令(连续一部分即可)杀死进程 一、使用单条命令 ps -ef | grep 进程名/启动进程命令 | grep -v grep | awk ‘{print $2...: [1]-  已杀死               sleep 200 [2]+  已杀死               sleep 200 二、编写脚本 linux脚本名:kill_process.sh.../bin/bash # 脚本名:kill_process.sh # 脚本功能:强制杀死进程 方式kill -9     # 1通过ps查询进程id     # 2使用kill -9 强制终止进程...————————————————————— # 根据进程名查询包含进程进程 并排除grep查询进程和此脚本进程 ps -ef | grep “$pName” | grep -v grep | grep...=”/bin/bash 脚本路径” 保存后执行source ~/.bash_profile使立即生效 之后只要我们在当前用户下就可以使用命令:”$my_kill 程序”来执行了 版权声明:本文内容由互联网用户自发贡献

    16K20

    Linux进程启动过程分析do_execve(可执行程序加载和运行)---Linux进程管理与调度(十一)

    但是linux也支持其他不同执行程序格式, 各个可执行程序执行方式不尽相同, 因此linux内核每种被注册执行程序格式都用linux_bin_fmt来存储, 其中记录了可执行程序加载和执行函数...通过读存放在可执行文件中信息为当前进程建立一个新执行环境 load_shlib 用于动态把一个共享库捆绑到一个已经在运行进程, 这是由uselib()系统调用激活 core_dump 在名为...core文件中, 存放当前进程执行上下文....这个文件通常是在进程接收到一个缺省操作为”dump”信号时被创建, 其格式取决于被执行程序执行类型 当我们执行一个可执行程序时候, 内核会list_for_each_entry遍历所有注册...在Linux中提供了一系列函数,这些函数能用可执行文件所描述新上下文代替进程上下文。

    4K31

    Linux进程管理

    01 — 系统任务管理 跟系统任务相关几个命令:fg、bg、jobs、&、ctrl+z & 最经常被用到:这个用在一个命令最后,可以把这个命令放到后台执行 ctrl + z:可以将一个正在前台执行命令放到后台...02 — ps ps 命令用于显示当前系统中由该用户运行进程列表 选项 说明 -ef 查看所有进程及其 PID(进程号)、系统时间、命令详细目录、执行者等。...00:01:57 /usr/sbin/mysqld 04 — kill 而 kill 命令用于输出特定信号给指定进程号(PID)进程并根据该信号完成指定行为,其中可能信号有进程挂起、进程等待、...一次性计划任务只执行一次,一般用于满足临时工作需求。我们可以用at命令实现这种功能,只需要写成“at 时间”形式就可以。...07 — crontab 我们希望 Linux 系统能够周期性地、有规律地执行某些具体任务,那么Linux 系统中默认启用 crond 服务简直再适合不过了 创建、编辑计划任务命令为“crontab

    1.5K20

    理解进程新建和执行过程

    本文以linux0.11版本为基础,分析进程内存布局,现代版本已经发生比较大变化,都是很多原理都是类似的。...desc_struct是保存进程代码段和数据段信息,tss_struct是保存进程执行上下文。这两个结构体定义如下。...// nr是进程id,计算进程ldt结构在gdt中索引,执行进程时候,从GDT第tss->ldt项中取得进程信息。...fork执行完之后,新新建相关数据结构已经建立好了,并且也和系统管理数据产生了关联。有自己独立页表,和父进程共享物理地址。那么当这个进程被调度时候,他会发生什么。...执行进程时候,根据进程号,算出tss在gdt索引,然后把索引里指向tss里上下文也加载到对应寄存器,tss信息中ldt索引首先从gdt找到进程ldt结构体数据首地址,即desc_struct

    74520

    linux进程

    1.查进程 ps命令查找与进程相关PID号: ps a 显示现行终端机下所有程序,包括其他用户程序。 ps -A 显示所有程序。...ps c 列出程序时,显示每个程序真正指令名称,而不包含路径,参数或常驻服务标示。 ps -e 此参数效果和指定"A"参数相同。 ps e 列出程序时,显示每个程序所使用环境变量。...ps f 用ASCII字符显示树状结构,表达程序间相互关系。 ps -H 显示树状结构,表示程序间相互关系。 ps -N 显示所有的程序,除了执行ps指令终端机下程序之外。...2.杀进程和查看进程对应PID目录下exe文件信息 最常用方法是ps -aux或者ps -ef 然后再通过管道使用grep命令过滤查找特定进程,然后再对特定进程进行操作。...使用kill命令结束进程:kill -a 进程pid 或者 killall 程序名 查看对应PID目录下exe文件信息: [root@localhost postfix]# ps -aux|grep

    8.6K100
    领券