【Linux】什么是进程(process)?

这篇具有很好参考价值的文章主要介绍了【Linux】什么是进程(process)?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

进程与程序概念

在Linux系统中,触发任何一个事件时,系统都会将它定义成为一个进程,并且给予这个进程一个ID,成为PID,同时根据触发这个进程的用户与相关属性关系,给予这个PID一组有效的权限设置。

  • 程序(program):通常为二进制程序,存放在存储媒介中(如硬盘、光盘、软盘、磁带等),以物理文件的形式存在。
  • 进程(process):程序被触发后,执行者的权限与属性、程序的代码与所需数据等都会被加载到内存中,操作系统给予这个内存中的单元一个标识符(PID),可以说进程就是一个正在运行中的程序。内核观点:担当分配系统资源(CPU时间,内存)的实体

如何产生一个进程?
  执行一个程序或命令就可以触发一个事件而获取一个PID。系统只认识二进制文件,当我们要让系统工作的时候,就需要启动一个二进制文件,这个二进制文件就是程序(program)。
  程序一般是放置在物理磁盘中,通过用户的执行来触发。触发后会加载到内存中成为一个个体,那就是进程。
  为了让操作系统可以管理进程,进程会给予执行者权限/属性等参数,以及进程所需要的脚本或数据等,最后再给予一个PID。操作系统通过这个PID来判断该进程是否具有执行权限。

【Linux】什么是进程(process)?


描述进程-PCB

进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合。
课本上称之为PCB(process control block),Linux操作系统下的PCB是: task_struct

task_struct-PCB的一种:

  • 在Linux中描述进程的结构体叫做task_struct。
  • task_struct是Linux内核的一种数据结构,它会被装载到RAM(内存)里并且包含着进程的信息

【Linux】什么是进程(process)?
  实际上,有太多的需要加载进CPU的程序,那么操作系统要不要管理这些加载进来的程序呢?答案是肯定的

PCB:

//进程控制块
struct task_struct{
	//该进程所有属性
	//该进程对应的代码和属性地址
	struct task_struct* next;//用来链接PCB
}

  我们在每个需要加载进入CPU的程序分配一个PCB,用来管理这些程序,通过该程序属性里的优先级决定什么时候加载进入CPU。
  所谓对进程的管理,实际是对进程对应的PCB进行相关管理。对进程的管理转化成对链表的增删改。

task_ struct内容分类:

  • 标示符: 描述本进程的唯一标示符,用来区别其他进程。
  • 状态: 任务状态,退出代码,退出信号等。
  • 优先级: 相对于其他进程的优先级。
  • 程序计数器: 程序中即将被执行的下一条指令的地址。
  • 内存指针: 包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针
  • 上下文数据: 进程执行时处理器的寄存器中的数据[休学例子,要加图CPU,寄存器]。
  • I/O状态信息: 包括显示的I/O请求,分配给进程的I/O设备和被进程使用的文件列表。
  • 记账信息: 可能包括处理器时间总和,使用的时钟数总和,时间限制,记账号等。
  • 其他信息

struct task_struct 内核结构体 -> 内核对象task_struct对象 -> 将该结构与代码和数据关联起来 -> 先描述再组织的工作
进程 = 内核数据结构(task_struct)+ 进程对应的磁盘代码

Windows进程与Linux进程

Windows下的进程:
【Linux】什么是进程(process)?
Linux下的进程:
【Linux】什么是进程(process)?

//显示进程标题
ps axj | head -1
//显示标题的同时将进程信息显示出来
ps axj | head -1 && ps axj | grep 'Test'

【Linux】什么是进程(process)?
杀掉一个进程:

kill -9 +(PID)

【Linux】什么是进程(process)?

进程在调度运行的时候,进程就具有动态属性


Linux进程操作

子进程

查看进程id(PID):

getpid();

【Linux】什么是进程(process)?

【Linux】什么是进程(process)?
【Linux】什么是进程(process)?

另一种查看进程方法:

ls /proc 

【Linux】什么是进程(process)?
【Linux】什么是进程(process)?
 进程终止,这个以进程PID命名的文件会自动被系统回收
【Linux】什么是进程(process)?
 进入这个PID命名的进程目录
【Linux】什么是进程(process)?

如果我们在进程正在运行的时候将进程的二进制文件删除,那么进程会继续运行吗?
【Linux】什么是进程(process)?
【Linux】什么是进程(process)?
【Linux】什么是进程(process)?
 一个进程对应的程序在加载到内存中后,理论上就与磁盘中的可执行程序没有关系了。(当然也有特殊情况)

父进程

父进程id(PPID)

getppid();

【Linux】什么是进程(process)?
运行程序发现:
【Linux】什么是进程(process)?
【Linux】什么是进程(process)?
  我们发现这个父进程的ID对应的就是bash,这个bash是什么呢?
  shell是一个程序,可以称之为壳程序,用于用户与操作系统进行交互,bash命令是shell命令的超集,大多数shell脚本都可以在bash下运行。
  当我们登陆系统后,会获取一个bash的shell,然后我们用这个bash提供的接口去执行各种命令,比如ll、ls、touch、mkdir等,这个另外执行的命名也会触发成为PID,这个后来执行命令所产生的PID就是子进程,而在我们原本的bash环境下就是父进程

命令行上启动的进程,一般它的父进程没有特殊情况的话,都是bash

创建进程(初识-fork)

fork是一个函数,函数在执行前只有一个父进程,函数在执行后是为 父进程+子进程
【Linux】什么是进程(process)?
 上面的ID关系是 24923是爷爷 5338是儿子 5339是孙子

fork的返回值:【Linux】什么是进程(process)?
 在父进程中返回子进程的PID,而在子进程中返回0
【Linux】什么是进程(process)?

初识多进程:
【Linux】什么是进程(process)?
 fork()之后,就有父进程和子进程两个进程同时执行后续代码,fork后续的代码为父子进程共享,通过fork返回值的不同,使得父子进程运行的代码不同。


如有错误或者不清楚的地方欢迎私信或者评论指出🚀🚀文章来源地址https://www.toymoban.com/news/detail-478285.html

到了这里,关于【Linux】什么是进程(process)?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux:创建进程 -- fork,到底是什么?

     相信大家在初学进程时,对fork函数创建进程一定会有很多的困惑,比如: 1.fork做了什么事情??  2.为什么fork函数会有两个返回值? 3.为什么fork的两个返回值,会给父进程谅回子进程pid,给子进程返回0? 4.fork之后:父子进程谁先运行?? 5.如何理解同一个变量,会有不同的值?? 本

    2024年02月05日
    浏览(29)
  • Linux:进程等待究竟是什么?如何解决子进程僵尸所带来的内存泄漏问题?

     进程等待通常是指: 父进程通过wait()/waitpid()的方式,让父进程对子进程进行资源回收的等待过程!!  进程等待通常是为了解决以下两种情况: 解决子进程僵尸所带来的内存泄漏问题,对僵尸子进程进行资源回收! 原因在于当子进程僵尸后,便“刀枪不入”了。即使是

    2024年04月16日
    浏览(37)
  • 【Linux】 由“进程”过渡到“线程” -- 什么是线程(thread)?

    如何看待地址空间和页表: 地址空间是进程能看到的资源窗口 页表决定,进程真正拥有资源的情况(页表映射多少才是拥有多少) 合理的对地址空间+页表进行资源划分,我们就可以对一个进程所有的资源进行分类 虚拟地址如何找到物理地址: 最后一级页表存放的是页框的起

    2024年02月15日
    浏览(33)
  • 一篇文章教会你什么是Linux进程控制

    在Linux上一篇文章进程概念详解我们提到了在linux中fork函数是非常重要的函数,它从已存在进程中创建一个新进程。新进程为子进程,而原进程为父进程。 返回值 自进程中返回0,父进程返回子进程id,出错返回-1 1.1那么fork创建子进程时,操作系统都做了什么呢? 当在操作系

    2024年02月13日
    浏览(26)
  • 『Linux从入门到精通』第 ⑭ 期 - 僵尸进程?孤儿进程?为什么他有如此惨烈的身世...

    🌸作者简介: 花想云 ,在读本科生一枚,C/C++领域新星创作者,新星计划导师,阿里云专家博主,CSDN内容合伙人…致力于 C/C++、Linux 学习。 🌸 专栏简介:本文收录于 Linux从入门到精通 ,本专栏主要内容为本专栏主要内容为Linux的系统性学习,专为小白打造的文章专栏。

    2024年02月16日
    浏览(56)
  • 电脑技巧:进程管理工具Process Explorer介绍

    目录 1、介绍 2、常用功能介绍 2.1 替代微软自带的任务管理器 2.2 查看当前系统中运行的进程 2.3 查看进程的详细信息 2.4 检索进程 2.5 监控操作系统的性能指标 2.6 获取Dump文件 2.7 进程操作功能 今天给大家推荐一款非常强大的进程管理工具 Process Explorer,感兴趣的朋友可以下载

    2024年02月04日
    浏览(68)
  • jps(JVM Process Status Tool):虚拟机进程状况工具

    列出正在运行的虚拟机进程,并显示虚拟机执行主类名称(Main Class,main()函数所在的类)以及这些进程的本地虚拟机唯一ID(LVMID,Local Virtual Machine Identifier)。对于本地虚拟机进程来说,LVMID与操作系统的进程ID(PID,Process Identifier)是一致的, 使用Windows的任务管理器或者

    2024年02月12日
    浏览(32)
  • 应急响应 - Windows进程分析,Windows网络分析,tasklist,wmic process

    「作者简介」: CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」: 对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 tasklist命令用来查看计算机上的进程,默认显示所有进程。 参数/v,可以显示详细信息,也就是显示所有

    2023年04月14日
    浏览(46)
  • R语言【cli】——通常,您调用cli_process_start()来启动进程,然后在完成后调用cli_process_done()。

    Package  cli  version 3.6.0 参数【msg】 :要显示的用于指示进程或计算开始的消息。它将被折叠成一个字符串,第一行将被保留并剪切为 console_width() 。 参数【msg_done】 :用于成功终止的消息。 参数【msg_failed】 :用于不成功终止的消息。 参数【on_exit】 :当调用函数(或 参数【

    2024年01月19日
    浏览(29)
  • 并行计算+Linux process

    两个进程都会输出1 说明子进程的空间独立于父进程的,本质上是写时复制 总共会有一个父进程和三个子进程,一共四个进程。调用一次fork就会产生一个子进程,此外第一个子进程内部又会调用一次fork并再产生一个子进程 第一个fork只会执行一次;第二个fork会执行两次(主

    2024年04月27日
    浏览(22)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包