首页
学习
活动
专区
工具
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.9K10

    Linux进程控制】二、进程控制——fork()系统调用深度刨析

    Linux下最基本的一个系统调用。...通过复制的方式创建一个进程,被创建的进程称为子进程调用进程称为父进程,复制的子进程是从父进程fork()调用后面的语句开始执行的。...我们已经知道,fork()系统调用的特点是一次调用两次返回,并且子进程的创建是对父进程的复制,那么是从哪复制开始复制的呢,我们根据程序运行结果分析,程序只打印了一次begin语句,说明不是从头开始复制的...(实际上,这里的3397进程就是我们的shell进程,shell进程是我们自己启动的进程的父进程;而1号进程则是init进程,init进程Linux下最原始的进程,是所有进程最终的父进程。)...3.2 进程顺序控制 使用fork()创建的进程都是一样的,在操作系统看来没有区别,先后顺序也是不确定的,我们要想控制进程的退出顺序,需要自己去实现这个逻辑。

    39310

    Linux 系统调用

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

    9.8K20

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

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

    34710

    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

    3K20

    Go: 系统调用进程替换

    在这篇文章中,我们将通过分析一个使用 Go 语言编写的示例程序来探讨 Go 语言在进行系统调用进程替换方面的应用。...这是程序安全性和可移植性的重要步骤,确保调用的命令在系统中确实存在。 2....这个调用实际上将替换当前的进程映像与 ls 命令的进程映像,包括其内存和其他资源。如果这个调用成功,当前的 Go 程序将不会继续存在;如果有错误发生,如无法执行该命令,则会引发 panic。...等同linux中的exec命令。 实用性和应用场景 通过上述代码,我们可以看到 Go 语言在系统级编程中的强大能力。...此外,它的跨平台支持也有限,主要适用于 Unix-like 系统。 未来展望 通过本文的分析,我们了解到 Go 语言处理系统调用进程替换的能力,并具体看到了这些功能是如何在实际代码中被利用的。

    13410

    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.9K20

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

    2K30

    Linux:管理系统进程

    Linux 操作系统本身也由进程组成。这些正在运行的服务、应用程序和操作系统组件会消耗计算机上的资源,并可能访问数据。...本教程是关于 Linux 系统管理员的综合系列的一部分,旨在为您提供有效管理 Linux 环境所需的技能和知识。...在本系列中,我们还介绍了 Linux 内核如何与硬件交互,如何Linux 管理系统服务以及如何Linux 管理用户。 了解进程 进程系统上正在执行的程序。...父进程 ID (PPID):生成您正在使用的进程进程Linux 进程具有以下几个特点: 父进程和子进程的层次结构。 访问系统资源(主要是 CPU)的调度。...总结 Linux 用户和管理员将定期需要管理其系统上运行的代码。CPU 执行的代码称为进程,您可以使用 ps 命令显示进程和相关信息。进程管理的一个关键组成部分是进程 ID——系统用来识别进程的标签。

    10710

    Linux系统调用原理

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

    4.2K30

    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 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进程不会被暂停

    10.2K41

    Linux系统-进程间通信

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

    2.8K10
    领券