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

Linux 内核】进程管理 ( 系统调用简介 | 进程相关系统调用源码 )

文章目录 一、系统调用简介 二、进程相关系统调用源码 一、系统调用简介 ---- 在开发应用程序时 , 进行 " 进程创建 " , 调用的 fork() , vfork() , clone() 等函数..., 就是 " 系统调用 " ; " 系统调用 " 是 操作系统 提供的 应用程序 调用 内核功能 的接口 , 如 : 创建进程 , 文件操作 等 ; 系统调用 与 内核 的关系 : 在 应用进程调用...fork() 系统调用 函数 , 实际上调用的是 Linux 内核中的 sys_fork() 函数 ; 在 应用进程调用 vfork() 系统调用 函数 , 实际上调用的是 Linux 内核中的...sys_vfork() 函数 ; 在 应用进程调用 clone() 系统调用 函数 , 实际上调用的是 Linux 内核中的 sys_clone() 函数 ; Linux 内核中的 sys_fork...---- Linux 进程相关 " 系统调用 " 对应的源码在 linux-5.6.18\kernel\fork.c 源码中 ,

2.1K20

Linux内核设计与实现(进程管理、进程调度、系统调用)

1、虚拟处理器、虚拟内存:让进程感觉自己拥有所有 image.png 2、进程上限,cat /proc/sys/kernel/pid_max 3、进程的五种状态 image.png set_task_state...(task,state); 4、每个进程都有一个父进程 image.png 5、进程的创建:fork() exec() image.png 6、写时拷贝COW image.png 7、线程和进程的区别不大...image.png 8、孤儿进程,父进程先关掉,再设置一个父进程,如果没有,设置init image.png 9、2.6内核后进程调度算法CFS:完全公平调度算法 10、进程分为IO消耗型和处理器消耗型...image.png image.png 13、与调度相关的系统调用 image.png 14、系统调用在用户空间进程和硬件设备之间添加了一个中间层 image.png 15、中断 image.png...21、虚拟文件系统:VFS 22、IO调度 23、页高速缓存和页回写

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

LinuxLinux系统调用

Linux系统调用 前言 操作系统——管理计算机硬件与软件资源的软件,是用户和系统交互的操作接口,为它上面运行的程序提供服务。...操作系统内核——操作系统的内核,负责管理系统进程、内存、设备驱动程序、文件和网络系统。一个内核不是一套完整的操作系统。例如LinuxLinux操作系统——基于Linux内核的操作系统。...极大的提高了系统的安全性 将用户进程隔离,实现内核"保护",用户进程不允许访问内核数据,也无法使用内核函数。用户访问内核的路径是事先规定好的,只能从规定位置进入内核,而不允许肆意跳入内核。...---- 系统调用的实现 通过软件中断实现。 **软件中断:**它是通过软件指令触发的中断。Linux系统内核响应软件中断,从用户态切换到内核态,执行相应的系统调用。...系统调用控制程序执行软件中断的过程如下: 在进程的内核态堆栈中保存大多数寄存器的内容(即保存恢复进程到用户态执行所需要的上下文)。 根据用户态传递的系统调用号,确定系统调用的执行程序。

27.8K10

Linux 系统调用

Linux 中,系统调用是用户空间访问内核的唯一手段﹔除异常和陷入外,它们是内核唯一的合法入口。实际上,其他的像设备文件和/proc之类的方式,最终也还是要通过系统调用进行访问的。...而有趣的是,Linux 提供的系统调用却比大部分操作系统都少得多。 要访问系统调用(在 Linux 中常称作 syscall),通常通过C库中定义的函数调用来进行。...系统调用在出现错误的时候C库会把错误码写人errno全局变量。通过调用perror()库函数,可以把该变量翻译成用户可以理解的错误字符串。 在 Linux 中,每个系统调用被赋予一个系统调用号。...这样,通过这个独一无二的号就可以关联系统调用。当用户空间的进程执行一个系统调用的时候,这个系统调用号就用来指明到底是要执行哪个系统调用;进程不会提及系统调用的名称。...假设系统调用在内核空间定义为 sys_ioctl,那么该系统调用的用户空间接口为 ioctl Linux kernel-5.18.8 有 440 个系统调用,这些系统调用讲究通用性,一旦固定,很少修改,

9.7K20

Linux系统编程】通过系统调用获取进程标识符 及 创建子进程(fork)

通过系统调用获取进程标示符(PID) 上一篇文章我们了解了进程的概念,并学会了创建进程和查看进程,在查看进程的时候,我们重点了解了一个属性叫做PID,即进程标识符。...可以的: 我们可以通过一个系统调用来获取,这个系统调用叫做getpid 我们可以通过man手册学习一下 getpid没有参数,直接调用即可获取(返回)当前进程的pid,返回值是pid_t类型...用另一个系统调用——getppid 我们来试一下: 重新make运行 然后我们再多运行几次 我们会发现当前进程的PID每次都是不一样的,但是其父进程的PID是一直不变的 那它的父进程是谁呢...通过系统调用创建进程-fork初识 经过之前的学习我们知道我们可以通过运行一个程序使之变成进程,那有没有其它产生新进程的方法呢? 有的,我们可以通过系统调用来创建进程。...那对于fork来说: 它是一个系统调用,那其实就是操作系统提供的一个函数嘛。 那在fork最后将要return的时候,那它的主体功能即创建子进程当然已经完成了。

16410

Linux系统编程-进程创建(fork)、外部程序调用(exec)

1. fork函数介绍 在linux中fork函数是非常重要的函数,它可以从已存在进程中创建一个新进程。新进程为子进程,而原进程为父进程。...fork函数的返回值如下: 1、在父进程中,fork返回新创建的子进程的PID号。 2、在子进程中,fork返回0; 3、如果出现错误,fork返回一个负值。...因此可以通过返回值来判断是父进程还是子进程。 fork函数创建子进程的过程: 使用fork函数得到的子进程是父进程的一个复制品,它从父进程继承了进程的所有资源,相当于就是父进程的一个副本。...#include pid_t fork(void); 制作分身 函数功能: 创建新的子进程. 子进程是父的进程一个副本....思路: 父进程扫描目录,得到目录下的文件名称,在传递给子进程,子进程调用eog命令实现图片显示,父进程里2秒钟之后就杀死子进程,再读取目录下下一个文件,再传递给子进程……… #include <stdio.h

2.6K20

Linux 内核】进程管理 ( 进程状态 | 进程创建 | 进程终止 | 调用 exit 系统调用函数主动退出 | main 函数返回自动退出 | kill 杀死进程 | 执行异常退出 )

文章目录 一、进程状态 二、进程创建 三、进程终止 ( 调用 exit 系统调用函数主动退出 | main 函数返回自动退出 | kill 杀死进程 | 执行异常退出 ) 一、进程状态 ---- Linux..., 参考 【Linux 内核】进程管理 ( 进程相关系统调用源码分析 | fork() 源码 | vfork() 源码 | clone() 源码 | _do_fork() 源码 | do_fork()...源码 ) 博客中的 fork() , vfork() , clone() 等系统调用函数 ; 三、进程终止 ( 调用 exit 系统调用函数主动退出 | main 函数返回自动退出 | kill 杀死进程...| 执行异常退出 ) ---- 进程终止的方式 : 主动退出 : 主动调用 exit() 系统调用函数 主动退出 ; 自动退出 : 程序的 main 函数返回 , 自动退出 ; 从 main() 函数返回时...自己不能处理的信号 , 被迫终止 ; 前两种是 进程主动退出 , 后两种是 进程被动退出 ; exit() 系统调用 函数 , 定义在 linux-5.6.18\kernel\exit.c 源码中 ,

2.8K20

Linux系统进程管理)

进程:当我们运行程序时,Linux会为程序创建一个特殊的环境,包含程序运行的所有资源,这个环境就称为进程 前台进程:一般我们使用一些命令,都属于前台进程,直接输出结果到显示器 后台进程:在命令的末尾加上...&可以创建最简单的后台进程 常驻进程系统进程,以root权限运行在后台,可以处理其他进程请求 孤儿进程:杀掉父进程后,子进程没了父亲,成了孤儿进程,init进程成了它们父亲 僵尸进程进程被中止了,...ps命令还能看到,我们可以通过杀死他们的父进程来杀死僵尸 使用命令ps,查看运行的进程,参数:-f(full全部信息) -aux(查看内存中的所有进程) 例如: UID PID PPID...PID是进程id,PPID是父进程id,用户运行的大部分命令都将Shell作为父进程id ?...使用命令kill,杀掉进程,参数:pid

2K30

Linux系统-进程概念

Linux进程概念 零、前言 一、冯诺依曼体系结构 二、操作系统 三、进程 1、描述进程-PCB 2、查看进程 3、获取进程标示符 4、创建进程-fork() 5、进程状态 6、僵尸进程 7、孤儿进程...: 在开发角度,操作系统对外会表现为一个整体,但是会暴露自己的部分接口,供上层开发使用,这部分由操作系统提供的接口,叫做系统调用 系统调用在使用上功能比较基础,但对用户的要求相对也比较高,所以开发者对部分系统调用进行适度封装...1、描述进程-PCB 概念: 进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合;在Linux中描述进程的结构体叫做task_struct Linux操作系统下的PCB...系统调用函数: 使用getpid()系统调用函数获取当前进程id(PID) 使用getppid()系统调用函数获取当前进程的父进程id(PPID) 注:getpid()和getppid...当进程退出并且父进程(使用wait()系统调用)没有读取到子进程退出的返回代码时就会产生僵死(尸)进程 僵死进程会以终止状态保持在进程表中,并且会一直在等待父进程读取退出状态代码 即只要子进程退出

1.1K20

Linux系统-进程信号

Linux系统-进程信号 零、前言 一、信号入门 1、生活角度的信号 2、技术应用角度的信号 3、信号及其处理概念 二、信号产生 1、终端按键产生 2、kill命令发信号 3、软件条件产生信号 4、硬件异常产生信号...SIGALRM信号, 该信号的默认处理动作是终止当前进程 解释: 功能:让操作系统在seconds秒之后给当前进程发送SIGALRM信号,SIGALRM信号的默认处理动作是终止进程 返回值:若调用...系统发送信号的本质:修改进程PCB中的pending位图 如果在进程解除对某信号的阻塞之前这种信号产生过多次,将如何处理 POSIX.1允许系统递送该信号一次或多次,Linux是这样实现的...,而是被系统调用 注意: 当某个信号的处理函数被调用时,内核自动将当前信号加入进程的信号屏蔽字,当信号处理函数返回时自动恢复原来的信号屏蔽字,这样就保证了在处理某个信号时,如果这种信号再次产生,那么它会被阻塞到当前处理结束为止...此方法对于Linux可用,但不保证在其它UNIX系统上都可用 示例: #include #include #include #include

3.5K10

Linux 查看系统进程

本文记录Linux查看系统进程相关命令。...简介 进程是运行的程序在系统中的存在形式,通过查看进程的状态信息,我们可以了解进程占用的系统资源情况,对系统的运行状态进行分析、调整,从而让系统保持在一个平稳的状态下运行。...Linux中查看进程信息的基本命令有ps、top,其中ps(Process Status)查看的是进程信息的一个快照,显示的我们执行ps这个命令时进程的信息,top显示的是进程的动态信息,使用这个命令会看到进程信息的动态变化...查看进程 查看本次登录进程 ps -l 查看内存中所有进程 ps -aux 进程一般很多,如果需要查看指定进程 ps -aux | grep *** 动态信息 top 命令可以查看进程系统资源实时利用率...ps -l 列出与本次登录有关的进程信息 ps -aux 查询内存中进程信息 ps -aux | grep *** 查询***进程的详细信息 top / htop 查看内存中进程的动态信息

14.5K40

Linux系统调用原理

一、什么是系统调用 系统调用 跟用户自定义函数一样也是一个函数,不同的是 系统调用 运行在内核态,而用户自定义函数运行在用户态。...系统调用Linux 内核提供的一段代码(函数),其实现了一些特定的功能,用户可以通过 int 0x80 中断(x86 CPU)或者 syscall 指令(x64 CPU)来调用 系统调用。...二、进入系统调用 本文主要介绍的是 x86 CPU 进入系统调用的方式 Linux 提供了 int 0x80 中断来让用户程序进入 系统调用,我们来看看 Linux 对 int 0x80 中断的处理初始化过程...三、系统调用实现 当用户要调用 系统调用 时,需要通过向 eax 寄存器写入要调用系统调用 编号。...而 Linux 进入中断处理程序时,会把这些寄存器的值保存到内核栈中,这样 系统调用 就能通过内核栈来获取到参数。

4.1K30

Linux系统-进程控制

Linux进程控制 零、前言 一、进程创建 1、fork函数 2、fork返回值 写时拷贝 3、fork用法 4、fork失败 二、进程终止 1、退出码 2、退出方法 1) 调用_exit函数 2)调用...(例如PCB进程控制块,进程地址空间,页表等) 添加子进程系统进程列表当中,当fork返回后开始调度器调度进程 示图: fork后执行问题: 当一个进程调用fork之后,父子进程共享同一份代码...二、进程终止 1、退出码 概念: 其实main函数是间接性被操作系统调用的,当main函数调用结束后就应该给操作系统返回相应的退出信息,而这个所谓的退出信息就是以退出码的形式作为main函数的返回值返回...: 只有是在main函数的的return才算是终止进程,其他函数return只是结束函数,因为系统调用的是main函数,main函数返回才是进程的返回 调用main函数运行结束后,main函数的...,并调用系统接口wait/waitpid进行等待 系统会将当前进程放进等待队列,并将进程的状态设置为非R 当到一定程度时,系统会唤醒进程进程由等待队列转为运行队列,同时状态变为R 四、

1.4K30

Linux系统-进程间通信

Linux进程间通信 零、前言 一、进程间通信介绍 二、管道 1、匿名管道 2、命名管道 三、system V 1、共享内存概念及原理 2、共享内存使用接口介绍 1、共享内存资源的查看 2、共享内存的创建和释放...3、共享内存的链接与去连接 4、接口使用示例 3、共享内存与管道对比 4、消息队列/信号量 零、前言 本章主要讲解学习Linux中本系统下的进程间通信 一、进程间通信介绍 概念: 进程间通信简称...一旦这样的内存映射到共享它的进程的地址空间,这些进程间数据传递不再涉及到内核,换句话说是进程不再通过执行进入内核的系统调用来传递彼此的数据 system V IPC提供的通信方式有以下三种: system...(共享内存映射进进程地址空间的共享区) 各进程看到同一空间资源:OS将映射后的的共享内存的虚拟地址返回给进程 示图: 注:这里所说的开辟物理空间、建立映射等操作都是调用系统接口完成的,也就是说这些动作都由操作系统来完成...调用接口将申请到的共享内存挂接到地址空间,建立映射关系 使用之后调用接口将共享内存与地址空间去关联,取消映射关系 调用接口释放共享内存空间,将物理内存归还给系统 2、共享内存使用接口介绍 1、共享内存资源的查看

2.7K10

linux supervisor进程管理系统

supervisor supervisor管理进程,是通过fork/exec的方式将这些被管理的进程当作supervisor的子进程来启动,所以我们只需要将要管理进程的可执行文件的路径添加到supervisor...此时被管理进程被视为supervisor的子进程,若该子进程异常中断,则父进程可以准确的获取子进程异常中断的信息,通过在配置文件中设置autostart=ture,可以实现对异常中断的子进程的自动重启。...log文件 pidfile:pidfile保存子进程的路径 childlogdir:子进程log目录设为AUTO的log目录 [supervisorctl]: serverurl:进入supervisord...supervisord暂时切换到该目录 user:账户名 startsecs:进程从STARING状态转换到RUNNING状态program所需要保持运行的时间(单位:秒) redirect_stderr...:如果是true,则进程的stderr输出被发送回其stdout文件描述符上的supervisord stdout_logfile:将进程stdout输出到指定文件 stdout_logfile_maxbytes

1.3K20

Linux系统进程状态

很多操作系统教科书将正在CPU上执行的进程定义为RUNNING状态、而将可执行但是尚未被调度执行的进程定义为READY状态,这两种状态在linux下统一为 TASK_RUNNING状态。...例如,在进程对某些硬件进行操作时(比如进程调用read系统调用对某个设备文件进行读操作,而read系统调用最终执行到对应设备驱动的代码,并与对应的物理设备进行交互),可能需要使用TASK_UNINTERRUPTIBLE...只能等到调试进程通过ptrace系统调用执行PTRACE_CONT、PTRACE_DETACH等操作(通过ptrace系统调用的参数指定操作),或调试进程退出,被调试的进程才能恢复TASK_RUNNING...linux系统启动后,第一个被创建的用户态进程就是init进程。...它有两项使命: 1、执行系统初始化脚本,创建一系列的进程(它们都是init进程的子孙); 2、在一个死循环中等待其子进程的退出事件,并调用waitid系统调用来完成“收尸”工作; init进程不会被暂停

9.6K41

Linux 进程系统监测

Linux是一种基于Unix的操作系统,旨在提供稳定、高效、安全的环境。在Linux下,每个正在运行的程序都是一个进程进程是计算机系统中最为重要的一种资源,也是操作系统管理的最基本单元。...因此,了解Linux进程的管理与监测,对于保证系统稳定运行和提高系统性能具有非常重要的意义。...Zombie:子进程已经结束,但是父进程还没有调用wait()来获取子进程的退出状态。进程命令在Linux中,可以使用一些命令进行进程管理,例如:ps:查看系统中正在运行的进程。...kill:向指定进程发送一个指定的信号。top:动态查看系统进程的状态和资源占用情况。进程监测Linux系统提供了一些工具来监控和管理进程,这些工具大部分在命令行下操作。...图片总结Linux进程系统监测是Linux系统管理中非常重要的一个方面。了解Linux进程管理和监测的基本方法和工具,能够帮助管理员快速、准确地诊断和解决系统性能问题。

55940

Linux系统进程编程(二)

哈哈哈,听到僵尸两个字是不是有点小害怕,言归正传,在Linux系统中,我们要明白:进程在运行时是需要消耗系统资源(内存、IO),进程终止时理应完全释放这些资源(如果进程消亡后仍然没有释放相应资源则这些资源就丢失了...),所以linux系统设计时规定:每一个进程退出时,操作系统会自动回收这个进程涉及到的所有的资源(譬如malloc申请的内容没有free时,当前进程结束时这个内存会被释放,譬如open打开的文件没有close...但是操作系统只是回收了这个进程工作时消耗的内存和IO,而并没有回收这个进程本身占用的内存(8KB,主要是task_struct和栈内存),因为进程本身的8KB内存操作系统不能回收需要别人来辅助回收,因此我们每个进程都需要一个帮助它收尸的人...同时,linux系统规定:所有的孤儿进程都自动成为一个特殊进程进程1,也就是init进程)的子进程。...\n", getpid()); return 0; } 输出结果: 说明:这里父进程先运行死掉了,但是我们后面并没有发现特殊进程init为1,而是908,这其实是跟ubuntu系统有关系的,真实是为

1.6K10
领券