位置: 编程技术 - 正文

Linux进程基础知识 Linux线程介绍(linux进程的概念)

编辑:rootadmin

推荐整理分享Linux进程基础知识 Linux线程介绍(linux进程的概念),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:linux进程管理基础知识,linux进程的概念,linux进程的概念,linux进程常用命令,linux进程的概念,linux进程详解,linux进程常用命令,linux进程常用命令,内容如对您有帮助,希望把文章链接给更多的朋友!

计算机实际上可以做的事情实质上非常简单,比如计算两个数的和,再比如在内存中寻找到某个地址等等。这些最基础的计算机动作被称为指令 (instruction)。所谓的程序(program),就是这样一系列指令的所构成的集合。通过程序,我们可以让计算机完成复杂的操作。程序大多数时候被存储为可执行的文件。这样一个可执行文件就像是一个菜谱,计算机可以按照菜谱作出可口的饭菜。

那么,程序和进程(process)的区别又是什么呢?

进程是程序的一个具体实现。只有食谱没什么用,我们总要按照食谱的指点真正一步步实行,才能做出菜肴。进程是执行程序的过程,类似于按照食谱,真正去做菜的过程。同一个程序可以执行多次,每次都可以在内存中开辟独立的空间来装载,从而产生多个进程。不同的进程还可以拥有各自独立的IO接口。

操作系统的一个重要功能就是为进程提供方便,比如说为进程分配内存空间,管理进程的相关信息等等,就好像是为我们准备好了一个精美的厨房。

看一眼进程

首先,我们可以使用$ps命令来查询正在运行的进程,比如$ps -eo pid,comm,cmd,下图为执行结果:

(-e表示列出全部进程,-o pid,comm,cmd表示我们需要PID,COMMAND,CMD信息)

每一行代表了一个进程。每一行又分为三列。第一列PID(process IDentity)是一个整数,每一个进程都有一个唯一的PID来代表自己的身份,进程也可以根据PID来识别其他的进程。第二列COMMAND是这个进程的简称。第三列CMD是进程所对应的程序以及运行时所带的参数。(第三列有一些由中括号[]括起来的。它们是kernel的一部分功能,被打扮成进程的样子以方便操作系统管理。我们不必考虑它们。)我们看第一行,PID为1,名字为init。这个进程是执行/bin/init这一文件(程序)生成的。当Linux启动的时候,init是系统创建的第一个进程,这一进程会一直存在,直到我们关闭计算机。这一进程有特殊的重要性,我们会不断提到它。如何创建一个进程

实际上,当计算机开机的时候,内核(kernel)只建立了一个init进程。Linux kernel并不提供直接建立新进程的系统调用。剩下的所有进程都是init进程通过fork机制建立的。新的进程要通过老的进程复制自身得到,这就是fork。fork是一个系统调用。进程存活于内存中。每个进程都在内存中分配有属于自己的一片空间 (address space)。当进程fork的时候,Linux在内存中开辟出一片新的内存空间给新的进程,并将老的进程空间中的内容复制到新的空间中,此后两个进程同时运行。

老进程成为新进程的父进程(parent process),而相应的,新进程就是老的进程的子进程(child process)。一个进程除了有一个PID之外,还会有一个PPID(parent PID)来存储的父进程PID。如果我们循着PPID不断向上追溯的话,总会发现其源头是init进程。所以说,所有的进程也构成一个以init为根的树状结构。

如下,我们查询当前shell下的进程:

Linux进程基础知识 Linux线程介绍(linux进程的概念)

复制代码代码如下:root@vamei:~# ps -o pid,ppid,cmd PID PPID CMD sudo -i -bash ps -o pid,ppid,cmd

我们可以看到,第二个进程bash是第一个进程sudo的子进程,而第三个进程ps是第二个进程的子进程。

还可以用$pstree命令来显示整个进程树:

复制代码代码如下:init─┬─NetworkManager─┬─dhclient │ └─2*[{NetworkManager}] ├─accounts-daemon───{accounts-daemon} ├─acpid ├─apache2─┬─apache2 │ └─2*[apache2───*[{apache2}]] ├─at-spi-bus-laun───2*[{at-spi-bus-laun}] ├─atd ├─avahi-daemon───avahi-daemon ├─bluetoothd ├─colord───2*[{colord}] ├─console-kit-dae───*[{console-kit-dae}] ├─cron ├─cupsd───2*[dbus] ├─2*[dbus-daemon] ├─dbus-launch ├─dconf-service───2*[{dconf-service}] ├─dropbox───*[{dropbox}] ├─firefox───*[{firefox}] ├─gconfd-2 ├─geoclue-master ├─6*[getty] ├─gnome-keyring-d───7*[{gnome-keyring-d}] ├─gnome-terminal─┬─bash │ ├─bash───pstree │ ├─gnome-pty-helpe │ ├─sh───R───{R} │ └─3*[{gnome-terminal}]

fork通常作为一个函数被调用。这个函数会有两次返回,将子进程的PID返回给父进程,0返回给子进程。实际上,子进程总可以查询自己的PPID来知道自己的父进程是谁,这样,一对父进程和子进程就可以随时查询对方。

通常在调用fork函数之后,程序会设计一个if选择结构。当PID等于0时,说明该进程为子进程,那么让它执行某些指令,比如说使用exec库函数(library function)读取另一个程序文件,并在当前的进程空间执行 (这实际上是我们使用fork的一大目的: 为某一程序创建进程);而当PID为一个正整数时,说明为父进程,则执行另外一些指令。由此,就可以在子进程建立之后,让它执行与父进程不同的功能。

子进程的终结(termination)

当子进程终结时,它会通知父进程,并清空自己所占据的内存,并在kernel里留下自己的退出信息(exit code,如果顺利运行,为0;如果有错误或异常状况,为>0的整数)。在这个信息里,会解释该进程为什么退出。父进程在得知子进程终结时,有责任对该子进程使用wait系统调用。这个wait函数能从kernel中取出子进程的退出信息,并清空该信息在kernel中所占据的空间。但是,如果父进程早于子进程终结,子进程就会成为一个孤儿(orphand)进程。孤儿进程会被过继给init进程,init进程也就成了该进程的父进程。init进程负责该子进程终结时调用wait函数。

当然,一个糟糕的程序也完全可能造成子进程的退出信息滞留在kernel中的状况(父进程不对子进程调用wait函数),这样的情况下,子进程成为僵尸(zombie)进程。当大量僵尸进程积累时,内存空间会被挤占。

进程与线程(thread)

尽管在UNIX中,进程与线程是有联系但不同的两个东西,但在Linux中,线程只是一种特殊的进程。多个线程之间可以共享内存空间和IO接口。所以,进程是Linux程序的唯一的实现方式。

总结 程序,进程,PID,内存空间

子进程,父进程,PPID,fork, wait

linux中快速清空文件内容的几种方法 复制代码代码如下:$:filename$filename$echo""filename$echofilename$cat/dev/nullfilename

科普:Linux系统与Windows系统的区别 问:为什么我们的终端输入不了密码?答:其实终端并不存在不能输入密码的情况,因为用户的密码在Linux系统中非常重要,所以在终端等程序中输入密

解决Linux系统之间拷贝文件的方案 Linux系统之间如何拷贝文件?日常工作中需要经常从远程或本地服务器拷贝/移动大量文件。遇到文件比较多比较散的时候速度较慢,所以在想有没有较

标签: linux进程的概念

本文链接地址:https://www.jiuchutong.com/biancheng/353484.html 转载请保留说明!

上一篇:Linux中rz命令使用实例分享(批量上传文件、简单易用)(linux的rz sz命令)

下一篇:linux中快速清空文件内容的几种方法(linux快速清空大日志文件)

  • 计算本月所得税税率为25%
  • 完税证明是可以抵扣吗
  • 自来水适用的税率是多少
  • 销售净水器营业执照范围
  • 房地产开发企业预缴增值税
  • 发包工程会计账务处理
  • 如何理解递延所得税资产和负债计算
  • 应纳税调增调减会计分录
  • 忘了作废的发票能补开吗
  • 小企业净资产收益率
  • 固定资产增值税可以一次性抵扣吗
  • 携程电子发票可以发到QQ邮箱吗
  • 普通发票电子发票没有章
  • 股东投入固定资产进来怎么做账
  • 纳税服务一体化综合监督工作情况报告
  • 电子承兑到期收款怎么做账务
  • 异地预缴本地申报流程
  • 冲回累计折旧
  • 以前年度损益在借方
  • 工程施工科目核算
  • 无法取得发票的费用如何入账
  • 注销税务登记后多久注销工商登记
  • 超过三年的坏帐损失税前扣除怎样规定?
  • 暂估固定资产原值减少
  • 腾讯电脑管家中的软件市场打不开
  • 认缴出资日期是2050什么意思
  • 行纪合同的效力
  • 房地产开发商负责什么
  • php sql语句
  • 企业注销清算流程
  • 固定资产转让出去租赁收入怎么入账
  • 专家评审费发放新规定2023
  • html制作网页教程
  • 独立核算的分公司的账务处理
  • java基础面试题选择题
  • userpasswords
  • 股权划转有税费吗
  • 公司与公司往来账表格怎么制作
  • 外贸企业出口货物增值税的计算依据
  • 罚款属于其他业务收入吗
  • 邀请客户参加会议
  • 织梦专题页模板
  • mongodb常用命令
  • 超出python用什么
  • 税控盘怎么看是否清盘
  • 非营利企业的劳动力需求有哪些特点
  • 哪些属于发票
  • 房地产销售老项目增值税
  • 购入固定资产入账会计凭证怎么做
  • 融资租赁的会计处理方法举例子
  • 土地入账成本包括哪些
  • 营改增后建筑劳务分包开票一般几个点
  • 增值税递延纳税
  • 服装、眼镜、鞋、西药的发票如何做账较好?
  • 建筑简易征收适用哪些业务
  • 收到红字发票怎么做账怎么做进项税额转出
  • 非流动资产处置利得计入什么科目
  • win8系统打开我的电脑就黑屏
  • centos安装编译环境
  • 2007皖价服
  • windows8安装密钥永久
  • win10系统浏览器怎么换成ie
  • 怎么设置永久禁止下载拼多多
  • win81和win10
  • win7系统自动重启日志
  • 新装win8系统卡顿严重,虚拟内存为0
  • cocos2dx游戏开发教程
  • nodejs执行cmd命令
  • jquery输入框改变事件
  • nodejs中的事件循环的执行顺序
  • cocos2dx-3.2+lua 常用函数
  • JavaScript中的数据类型
  • node.js 的适用场景?
  • unity游戏开发的技术路线有哪些
  • js arrayfrom
  • jquery实现ajax加载超时提示的方法
  • 湖南税务发票查询系统查不到外省的发票
  • 小规模纳税人可以开13%的发票吗
  • 十四五时期税收制度
  • 如何下载电子国税app
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设