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

linux系统编程之进程(五):终端、作业控制与守护进程

一、终端的概念 在UNIX系统中,用户通过终端登录系统后得到一个Shell进程,这个终端成为Shell进程控制终端(Controlling Terminal),控制终端是保存在PCB中的信息,而我们知道...fork会复制PCB中的信息,因此由Shell进程启动的其它进程控制终端也是这个终端。...ttyname函数可以由文件描述符查出对应的文件名,该文件描述符必须指向一个终端设备而不能是任意文件。在linux上的命令tty 也可以查看到当前的终端。...这些进程组的控制终端相同,它们属于同一个Session,一个Session与一个控制终端相关。...创建一个新的进程组,当前进程成为进程组的Leader,当前进程的id就是进程组的id。 如果当前进程原本有一个控制终端,则它失去这个控制终端,成为一个没有控制终端进程

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

进程组、会话、控制终端概念,如何创建守护进程

查看守护进程 ps axj a: 显示所有 x:显示没有控制终端进程 j:显示与作业有关的信息(显示的列):会话期ID(SID),进程组ID(PGID),控制终端(TT),终端进程组ID(TRGID)...; • 终端进程组ID为-1(TPGID表示终端进程组ID,该值表示与控制终端相关的前台进程组,如果未和任何终端相关,其值为-1; • 所有的守护进程的父进程: 历史上,Linux 的启动一直采用init...会话的领头进程打开一个终端之后, 该终端就成为该会话的控制终端。与控制终端建立连接的会话领头进程也称为控制进程 (controlling process) 。一个会话只能有一个控制终端。...• 让进程摆脱原进程组的控制。 • 让进程摆脱原控制终端控制。 复制代码 那么,在创建守护进程时为什么要调用setsid()函数呢?.../run 的UID为0; • 没有控制终端(TTY为?); • 终端进程组ID为-1; • 守护进程的父进程为1516,即systemd。 作者:一口Linux

1.3K20

Linux进程控制

Linux进程简介 进程是操作系统中的一个重要概念,它是一个程序的一次执行过程,程序是进程的一种静态描述,系统中运行的每一个程序都是在它的进程中运行的。...进程4要素 要有一段程序供该进程运行 进程专用的系统堆栈空间 进程控制块(PCB),具体实现是task_struct结构 有独立的存储空间 Linux系统中所有的进程是相互联系的,除了初始化进程外,所有进程都有一个父进程...新的进程不是被创建,而是被复制,或是从以前的进程复制而来。Linux中所有的进程都是由一个进程号为1的init进程衍生而来的。...Linux系统包括3种不同类型的进程,每种进程都有自己的特点和属性: 交互进程:由一个Shell启动的进程,既可以在前台运行,又可以在后台运行 批处理进程:这种进程终端没有联系,是一个进程序列 监控进程...(守护进程):Linux启动时启动的进程,并在后台运行 进程控制块 在Linux中,每个进程在创建时都会被分配一个数据结构,称为进程控制块(PCB, Process Control Block),描述进程的运动变化过程

1.9K30

Linux进程控制

理解父进程返回pid,给子进程返回0 父亲只有一个,孩子可以有多个,这是现实的问题,孩子找父亲具有唯一性 所以给父进程返回子进程pid便于标识子进程这很好解释了父进程返回pid的问题 同一个id...进程为什么要等待 1.父进程通过进程等待的方式,回收子进程资源 2.获取子进程退出信息 进程等待的方法 wait 返回值:成功返回被等待进程pid,失败返回-1。...若正常结束,则返回该子进程的ID 对应的错误: 僵尸进程退出的时候对应信息放在哪: 子进程和父进程有对应的pcb信息,父进程调用waitpid,子进程退出的时候把对应的代码和信号保存起来,保存到...但是,对于获得子进程的退出结果,我们可以不采用位操作进行,Linux提供了对应操作的宏 WIFEXITED(status): 若为正常终止子进程返回的状态,则为真。...execl系列函数将程序加载到内存中,所以Linux的execl接口是加载器,所以是先加载后执行,main也是函数也要被调用,通过execl/系统传参给main 程序替换中execve是系统调用,其他都是封装

17430

Linux进程控制

进程控制 fork函数 进程终止 退出码 常见的退出方式 进程等待 什么是进程等待,为什么要进程等待 阻塞与非阻塞 进程替换 替换原理 替换函数 执行系统命令 执行自己写的程序 模拟实现简易的shell...进程拥有独立性,fork之后就变成了两个程序,父子进程共享后边的代码。 那么为什么给父进程返回的就是子进程的pid,而给子进程返回的就是0呢?...进程等待 什么是进程等待,为什么要进程等待 之前说过僵尸进程会导致内存泄漏,因为他的资源无法回收,所以就需要等待子进程结束然后来保存资源给父进程,通过获取子进程退出信息知道是否成功退出。...但是如果让我们自己去求信号和退出码很麻烦,所以Linux提供了一些操作的宏,重点说两个: WIFEXITED(status): 若为正常终止子进程返回的状态,则为真。...是先调用exec函数,因为它的作用上面说了,是将程序加载到内存中,Linux中,它就是加载器。

2.9K00

Linux进程控制

1. fork函数写时拷贝的理解 若父子进程数据都不修改,则父子进程指向同一个物理地址, 若子进程数据修改,则拷贝一个物理空间,将新的地址填到子进程对应的页表中,使子进程重新映射,访问到新的空间 进程的内核数据结构...进程等待 如果子进程变成僵尸状态,使用父进程接收子进程进程退出码, 父进程通过进程等待的方式,回收子进程资源,获取子进程信息 子进程的运行结果 : 代码跑完,结果对...5秒,再等待5秒后进入父进程,在等待期间子进程处于僵尸状态,父进程将子进程回收,子进程僵尸状态消失,最后再过5秒,父进程退出 复制SSH渠道创建终端2,在保证终端1的mytest可执行程序运行的情况下输入如下指令...axj | head -1 && ps axj | grep mytest | grep -v grep ; sleep 1; echo "---------"; done ---- 在终端...我是父进程,等待子进程成功,pid:15839,ppid:15838,ret_id:10481 父进程等待成功后,其pid值为子进程的pid值 ---- 终端2显示 说明经过等待僵尸进程没有了 waitpid

1.9K20

Linux进程控制

进程控制 一、进程创建 1. fork 函数创建子进程Linux 中 fork 函数是非常重要的函数,它从已存在进程中创建一个新进程。新进程为子进程,而原进程为父进程。...当进程调用 fork,控制转移到内核中的 fork 代码后,内核应该做: 分配新的内存块(pcb)和内核数据结构(进程地址空间、页表等)给子进程 将父进程部分数据结构内容拷贝至子进程 将子进程添加到系统进程列表当中...但是我们的 Linux 中并不使用系统提供的接口获取退出码的退出原因描述,而是使用自定义的退出原因描述。...首先每个进程 pcb 内部都有内置的等待队列,当父进程在等子进程时,其实就是将父进程的 pcb 链入子进程的等待队列里;当子进程退出时,操作系统就直接从子进程的等待队列里把父进程拿出来,然后调度父进程,...但是我们通过位运算得到的退出信息可读性不是很好,所以 Linux 也为我们提供了两个接口: WIFEXITED(status): 若为正常终止子进程返回的状态,则为真。

8210

Linux进程控制

一.进程创建 fork()函数: 在进程概念这篇文章中,我们浅浅地了解了一下fork函数,它的功能是让父进程去创建一个子进程,并且有两个返回值,对应着父进程的返回值和子进程的返回值。...在linux中fork函数时非常重要的函数,它从已存在进程中创建一个新进程。新进程为子进程,而原进程为父进程。...0,父进程返回子进程id?...进程终止就到这。接下来我们来谈谈进程等待。 三、进程等待 进程等待可以解决僵尸进程问题。...代码和数据加载到内存的操作,其实就是操作系统调用了exec*函数完成的,所以在Linux的系统中,exec*是加载器。exec*函数的功能就是将程序加载到内存嘛,这是谈的第一点。

2.4K30

Linux进程控制

,在这里我们来详细的学习一下 fork 函数;fork 是 Linux 中非常重要的一个系统调用函数,它用于在当前进程下创建一个新的进程,新进程是当前进程的子进程;我们可以 man 2号手册来查看 fork...cnt++; } return 0; } 注:运行上面这个程序可能导致服务器或者虚拟机直接挂掉,虚拟机直接 shutdown 关机重启即可;服务器则需要到对应的服务器控制台进行重启...Linux 中,存在一个变量 “?”.../mybin", NULL, environ); //传递环境变量 ---- 五、实现一个简易的 shell 1、shell 的初步实现 在学习了进程创建、进程终止、进程等待以及进程程序替换系列进程控制相关知识后...,我们就可以自己实现一个简易的 shell 命令行解释器了;实现一个简易的 shell 大概可以分为如下几步: 输出提示符; 从终端获取命令行输入; 解析命令行输入信息; 创建子进程

4K00

Linux进程控制进程程序替换】

---- 前言 子进程 在被创建后,共享的是 父进程 的代码,如果想实现自己的逻辑就需要再额外编写代码,为了能让 子进程 执行其他任务,可以把当前 子进程 的程序替换为目标程序,此时需要用到 Linux...,将其替换为对应的指令程序并执行任务,就能实现各种指令 进程程序替换图解 Linux 中的指令都是用 C语言 写的可执行程序,所以可以进行替换 bash 运行后,输入 指令 本质上就是在进行程序替换...这就表明程序替换并不是进程替换 因为是同一个进程,所以对父进程没有任何影响,体现了进程间的独立性 在子进程执行程序替换前,子进程和父进程共享一份只读区域的数据,但因为发生了程序替换,触发 写时拷贝 机制...,令子进程读取另一块区域的数据 写时拷贝 在只读数据区也能触发,因为不能影响到父进程 ---- 总结 以上就是本篇关于 Linux 进程程序替换的相关内容了,在本文中,我们知道了进行程序替换的目的,学习使用了程序替换相关的七大函数...,最后还观察了程序替换后的神奇现象,在学完这些知识后,我们就可以实现一个简单的 bash,体验一下在自己程序中输入指令操控 Linux 的奇妙体验 如果你觉得本文写的还不错的话,期待留下一个小小的赞,你的支持是我分享的最大动力

18020

Linux进程控制

2.fork给父进程返回子进程的PID是为了方便后续父进程对子进程进行资源回收 3.如果fork函数调用成功,操作系统会给子进程分配内存块并创建对应的内核数据结构(PCB,页表,进程地址空间),fork...三.进程等待 当子进程退出以后,如果父进程一直不回收子进程的资源,那么子进程就会处于僵尸状态,会造成内存泄漏的问题。...,父进程调用wait系统调用回收子进程,子进程被回收,只剩下父进程,保持三秒后父进程也结束 ---- 2.waitpid 同样是父进程用于回收子进程的系统调用,但这个系统调用还能顺便拿到子进程退出时的退出码和信号...4.非阻塞式等待 在非阻塞等待中,父进程会采用轮询的方式检测子进程的状态,如果子进程没有退出,那么父进程就去继续做自己的事,如果在某一次询问中,父进程发现子进程已经结束了,那么父进程就会去回收子进程的资源...5.图解父进程等待子进程 进程等待的本质是父进程检测子进程的退出信息,这个退出信息保存到status中供父进程读取 四.进程替换 1.什么是进程替换 进程替换就是在这个进程中通过调用exec*系列的函数

77310

Linux系统-进程控制

Linux进程控制 零、前言 一、进程创建 1、fork函数 2、fork返回值 写时拷贝 3、fork用法 4、fork失败 二、进程终止 1、退出码 2、退出方法 1) 调用_exit函数 2)调用...零、前言 前篇我们讲解学习了关于进程的概念知识,本章主要讲解关于进程控制,深入学习进程 一、进程创建 1、fork函数 概念: 在linux中fork函数从已存在进程中创建一个新进程(子进程)...(例如PCB进程控制块,进程地址空间,页表等) 添加子进程到系统进程列表当中,当fork返回后开始调度器调度进程 示图: fork后执行问题: 当一个进程调用fork之后,父子进程共享同一份代码...定义了进程的终止状态,父进程通过wait来获取该值 虽然status是int,但是仅有低8位可以被父进程所用 注:_exit(-1)时,在终端执行$?...//注:对于这里两个ls其实并不冲突,第一个表示程序的名称,第二个表示如何通过参数列表使用程序(使用时需要带上名称) char* const MY_Env[]={ "MYENV=hello linux

1.5K30

Linux进程控制

前言 本文介绍了进程终止、进程等待、进程替换等进程控制的相关概念。 一、再识fork 我们在之前的内容中已经了解过系统调用fork,今天我们再来深入了解一下fork。...四、进程等待 1.进程等待的场景 之前讲进程状态的时候,我们讲到一种特殊的转态:僵尸状态:子进程退出,父进程没有等待子进程(没有回收子进程的资源),会造成子进程处于僵尸状态,造成内存泄漏,同时这种状态的进程无法被杀死...进程等待的信息存在哪里 子进程和父进程都有各自对应PCB,当子进程退出且父进程未回收子进程资源时,子进程的退出信息以及子进程的资源信息都保存在子进程的PCB中。...补充 对于获取进程的退出结果,我们可以不采用对输出型参数进行位操作,因为Linux提供了对应操作的宏。...本文作者目前也是正在学习Linux相关的知识,如果文章中的内容有错误或者不严谨的部分,欢迎大家在评论区指出,也欢迎大家在评论区提问、交流。

16120

Linux进程检测与控制

所以,探究Linux进程以及与进程有关的检测与控制是非常有意义的。这次内容如下。...一、Linux进程与程序 1、进程与程序的关系 进程是正在执行的一个程序或命令,每个进程都是一个运行的实体,并占用一定的系统资源。...eg:谷歌浏览器是一个程序,当我们打开谷歌浏览器,就会在系统中看到一个浏览器的进程,当程序被执行时,程序的代码都会被加载入内存,操作系统给这个进程分配一个 ID,称为 PID(进程 ID/进程控制符),...2、Linux下的进程管理工作 Linux下的进程管理主要有进程查看(判断健康状态)、终止和优先级控制三个方面,后续将围绕这几个方面展开论述。...,若与终端机无关,则显示 ?

33021

linux进程的管理和控制

Linux 进程的管理和控制是系统管理和应用开发中非常重要的一部分。在 Linux 系统中,有许多工具和命令可以用于进程的管理和控制,例如 ps、kill、top 等。...本文将介绍 Linux 进程的管理和控制,包括进程的查看、结束、挂起、恢复等操作。 一、查看进程Linux 系统中,可以使用 ps 命令来查看当前运行的进程。...ps 命令的常用参数包括: a:显示所有进程,包括其他用户的进程; u:显示进程的详细信息,包括进程所有者、CPU 占用率、内存占用率等; x:显示没有控制终端进程。...Linux 内核提供了多种进程调度算法,用于决定如何分配 CPU 时间。...SystemTap 是一个强大的 Linux 调试工具,可以对进程的运行进行动态追踪和分析。

70641

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

一.进程创建 fork函数创建进程,新进程为子进程,原进程为父进程; fork函数包含在头文件 进程调用fork,当控制转移到内核中的fork代码后,内核做: 分配新的内存块和内核数据结构给子进程...将父进程部分数据结构内容拷贝至子进程 添加子进程到系统进程列表当中 fork返回,开始调度器调度 关于fork函数的返回值: 返回0给子进程 返回子进程的PID给父进程 创建失败,返回值 < 0 子进程和父进程共享...答案是父进程。子进程在退出时,会成为僵尸进程,需要父进程的回收。 那么父进程期望获得子进程退出时得哪些信息呢?...; //有p的可以省去路径 execvpe("ls",myargv,environ); //有e的可以自己控制环境变量...因为在linux中,环境变量的内容是在一个区域放着的,而环境变量表 env 中存的是环境变量的地址,这些地址指向所对应的环境变量;         而我们putenv一个环境变量时,其实是在环境变量表中找一个未使用的下标

16610

Linux程序设计】之进程控制&守护进程

实验题目:Linux环境下的进程控制 实验目的:熟悉并掌握Linux环境下进程的相关函数的应用;守护进程的概念、启动和操作;进程操作程序的编写。...一、Linux进程控制 设计程序,满足如下要求: 1、设计一个程序,要求显示Linux系统分配给此程序的进程号(PID)和它的父进程号(PPID)。...在Linux环境下进程创建时,系统会分配一个唯一的数值给每个进程,这个数值就称为进程标示符(pid),他的父进程号用ppid表示。...在Linux中获取当前进程的pid、ppid可以调用getpid()和getppid()函数。...,需要该进程执行他的程序代码,在Linux系统中可以调用exec函数是程序执行。

2K20
领券