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

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

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

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

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

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

2.8K00

进程执行和挂起

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.6K10

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

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

10910

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

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

20.5K10

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

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

2.1K10

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

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

4.1K30

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

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 程序”来执行了 版权声明:本文内容由互联网用户自发贡献

15.8K20

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

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

3.7K31

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

理解进程新建和执行过程

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

71020

Linux中查看进程、杀死进程、进入进程命令

2.杀死进程    使用kill命令结束进程:kill xxx    常用:kill -9 324    Linux下还提供了一个killall命令,可以直接使用进程名字而不是进程标识号,例如:...(1)强行中止(经常使用杀掉)一个进程标识号为324进程: #kill -9 324 (2)解除Linux系统死锁 在Linux中有时会发生这样一种情况:一个程序崩溃,并且处于死锁状态。...(4)killall命令 Linux下还提供了一个killall命令,可以直接使用进程名字而不是进程标识号,例如: # killall -HUP inetd *杀死进程最安全方法是单纯使用kill...如下: # kill -HUP PID 该命令让Linux和缓执行进程关闭,然后立即重启。 *绝杀 kill -9 PID 同意 kill -s SIGKILL 。...3.进入到进程执行文件所在路径下,执行文件 ./文件名

11.2K30

Linux进程学习【进程状态】

本文将会带着大家认识各种 进程 状态 ---- 正文 在谈 进程状态 之前,首先要回顾下之前 进程 相关知识 OS管理本质是先描述,再组织 OS并非直接管理 进程 ,而是管理 进程 PCB(...,即把手机揣进兜里,然后 专心执行走路这个 进程 进程状态 进程 有各种运行状态,方便OS进行管理,在 Windows 中,进程 状态是这样 而在我们 Linux 中,新建、就绪、运行都可以看作...运行 R 这一个状态,所以比较清晰 而我们今天要学习正是 Linux 进程 状态 进程是何种状态,取决于此进程PCB在哪里排队 ️运行 R 首先来看看第一种状态 R 以我们以往认知来说...子进程,是观察不到 僵尸状态 ,因为 bash 会执行回收机制,将 僵尸 回收 我们可以利用 fork() 函数自己创建 父子进程 关系,观察到这一现象 #include using...,成为一只游离僵尸 僵尸进程 有 内存泄漏 风险 因此 子进程 会被OS领养 ---- 总结 以上就是关于进程学习【进程状态】全部内容了,我们简单学习了 进程 相关状态,知道了何为 阻塞、进程

18230

Linux进程学习【进程地址】

,此时可能直接对物理内存造成越界读写 程序运行时,每次都需要大小为 4GB 内存使用,当进程过多时,资源分配就会很紧张,引起进程阻塞,导致执行效率下降 动态申请内存后,需要依次释放,影响整体效率 为了解决各种问题...光有 虚拟地址空间 是不够,还需要一套完整 ‘‘翻译’’ 机制进行程序寻址,如 Linux 页表 + MMU ️页表+MMU 页表 本质上就是一张表,操作系统 会为每个 进程 分配一个 页表...后续对这块进行写入操作时,会直接拒绝 对于这种机制感兴趣同学可以点击下面这几篇文章查看详细内容: Linux虚拟内存详解(MMU、页表结构) ARM体系架构——MMU 逻辑地址、页表、MMU等...️写时拷贝 Linux 中存在一个很有意思机制:写时拷贝 这是一种 赌bo 行为,OS 此时就赌你不会对数据进行修改,这样就可以 使多个 进程 在访问同一个数据时,指向同一块空间,当发生改写行为时...保护物理内存与其他进程(权限设置) 将 进程管理 和 内存管理 进行 解耦,方便 OS 进行更高效管理 可以让进程以统一视角看待自己代码和数据 ---- 总结 以上就是本篇关于 Linux进程学习

14120

Linux 内核】进程管理 ( Linux进程 CPU 资源调度 | 进程生命周期 | 创建状态 | 就绪状态 | 执行状态 | 阻塞状态 | 终止状态 | 进程生命周期之间转换 )

文章目录 一、Linux进程 CPU 资源调度 二、进程生命周期 三、进程生命周期之间转换 一、Linux进程 CPU 资源调度 ---- Linux 操作系统 是 多任务系统 , 可以...CPU 时间片过程 中 , 处于该状态 ; 终止状态 : 进程 终止后状态 ; 三、进程生命周期之间转换 ---- 创建状态 : Linux 中 , 调用 fork() 函数 , 创建进程 , 此时进入..." 创建状态 " ; 创建状态 -> 就绪状态 : 创建状态 中 , 等待 进程运行 资源准备完毕后 , 会进入 " 就绪状态 " ; 就绪状态 -> 执行状态 : 就绪状态时 , " 进程调度策略..." 为进程调度 " CPU 时间片 " , 进程一旦 获取到 CPU 时间片使用权 , 就立刻进入 " 执行状态 " , 开始执行后续指令 ; 执行状态 -> 就绪状态 : 如果当前 进程 处于 执行状态..., 正在执行 , 此时如果有一个 优先级高 进程执行 , 此时会抢占 CPU , 本进程就会重新进入 " 就绪状态 " ; 执行状态 -> 阻塞状态 : 如果当前 进程 处于 执行状态 , 正在执行

1.9K30

Linux进程类别(内核线程、轻量级进程和用户进程)--Linux进程管理与调度(四)

进程类别, 但是我还是想说Linux下只有一种类型进程,那就是task_struct,当然我也想说linux其实也没有线程概念, 只是将那些与其他进程共享资源进程称之为线程。...用户进程运行在用户空间上, 而一些通过共享资源实现一组进程我们称之为线程组, Linux下内核其实本质上没有线程概念, Linux下线程其实上是与其他进程共享某些资源进程而已。...轻量级进程由clone()系统调用创建,参数是CLONE_VM,即与父进程是共享进程地址空间和系统资源。 与普通进程区别:LWP只有一个最小执行上下文和调度程序所需统计信息。...LWP还是和前面提到一样,具有内核线程支持,是内核调度单元,并且用户线程系统调用要通过LWP,因此进程中某个用户线程阻塞不会影响整个进程执行。..., Linux下内核其实本质上没有线程概念, Linux下线程其实上是与其他进程共享某些资源进程而已。

6.1K30

Linux进程调度器设计--Linux进程管理与调度(十七)

linux2.6调度程序实现了基于进程过去行为启发式算法, 以确定进程应该被当做交互式进程还是批处理进程....当然与批处理进程相比, 调度程序有偏爱交互式进程倾向 1.3 不同进程采用不同调度策略 根据进程不同分类Linux采用不同调度策略....目前非实时进程调度策略比较简单, 因为实时进程值只要求尽可能快被响应, 基于优先级, 每个进程根据它重要程度不同被赋予不同优先级,调度器在每次调度时, 总选择优先级最高进程开始执行....当调度器被调用时, 他会查询调度器类, 得知接下来运行哪个进程 在选中将要运行进程之后, 必须执行底层任务切换....),而红色se则为当前CPU上正在执行程序,蓝色为下个将要执行程序,其实图中并不规范,实际上当进程运行时,会从红黑树中剥离出来,然后设定下一个调度进程,当进程运行时间结束时,再重新放入红黑树中。

3.4K41
领券