Linux进程管理(图解)

什么是程序

在 Linux 下面所有的指令与你能够进行的动作都与权限有关, 而系统如何判定你的权限呢?当然就是帐号管理当中提到的 UID/GID 的相关概念,以及文件的属性相关性
在 Linux 系统当中: “ 触发任何一个事件时,系统都会将他定义成为一个程序,并且给予这个程序一个 ID ,称为 PID ,同时依据启发这个程序的使用者与相关属性关系,给予这个 PID 一组有效的权限设置。 ” 从此以后,这个 PID 能够在系统上面进行的动作,就与这个 PID 的权限有关了


程序与进程 (program & process)

如何产生一个程序呢?很简单, “ 执行一个程序或指令 ” 就可以触发一个事件而取得一个 PID 。我们说过,系统是仅认识binary file 的,那么当我们要让系统工作的时候,当然就是需要启动一个binary file ,那个 binary file 就是程序 ( program )
我们知道,每个程序都有三组人马的权限,每组人马都具有 r/w/x 的权限,所以: “ 不同的使用者身份执行这个 program(程序)时,系统给予的权限也都不相同 ” 举例来说,我们可以利用 touch 来创建一个空的文件,当 root 执行这个 touch 指令时,他取得的是 UID/GID = 0/0 的权限,而当 adam ( UID/GID=1000/1000 ) 执行这个 touch 时,他的权限就跟root 不同了

在这里插入图片描述
如上图所示,程序一般是放置在磁盘中的,然后通过使用者的执行来触发。触发后会载入到内存中成为一个个体,那就是程序。 为了操作系统可管理这个程序,因此程序有给予执行者的权限 / 属性等参数,并包括程序所需要的指令码与数据或文件数据等, 最后再给予一个 PID 。系统就是通过这个 PID 来判断该 process 是否具有权限

  • 进行工作的举例
    我们要操作系统的时候,通常是利用连线程序或者直接在主机前面登陆,然后取得我们的 shell 。那么,我们的 shell 是 bash ,这个bash在 /bin/bash 对吧,那么同时间的每个人登陆都是执行 /bin/bash 不过,每个人取得的权限就是不同,也就是说,我们可以这样看:

在这里插入图片描述
也就是说,当我们登陆并执行 bash 时,系统已经给我们一个 PID 了,这个PID 就是依据登陆者的 UID/GID( /etc/passwd ) 来的。以上面的 第一个图来做说明的话,我们知道 /bin/bash 是一个程序 ( program),当 adam登陆后,他取得一个 PID 号码为 2234 的程序,这个程序的User/Group 都是 adam ,而当这个程序进行其他作业时,例如 touch 这个指令时, 那么由这个程序衍生出来的其他程序在一般状态下,也会沿用这个程序的相关权限

  • 总结
    程序 ( program ):通常为 binary program ,放置在储存媒体中 (如硬盘、光盘、软盘、磁带等), 为实体文件的型态存在;二进制文件,比如静态/bin/date,/usr/sbin/httpd,/usr/sbin/sshd,/usr/local/nginx/sbin/nginx;
  • 进程 ( process )
    程序被触发后,执行者的权限与属性、程序的程序码与所需数据等都会被载入内存中, 操作系统并给予这个内存内的单元一个识别码 ( PID ),可以说,进程就是一个正在运行中的程序。是程序运行的过程, 动态,有生命周期及运行状态.

父进程与子进程

在这里插入图片描述
程序彼此之间是有相关性的,以上面的图示来看,连续执行两个bash 后,第二个 bash的父程序就是前一个 bash 。因为每个程序都有一个 PID ,那某个程序的父程序就通过 Parent PID( PPID )来判断即可

  • 进程调用
    一个进程通过fork()函数,创建一个和自己一样的进程。被创建出来的进程是子进程,而创建子进程的进程就是父进程子进程是父进程的一个副本,是它的复制,两者不共享地址空间(内存)
    fork and exec :程序调用的流程:
    其实子程序与父程序之间的关系还挺复杂的,最大的复杂点在于程序互相之间的调用。在 Linux 的程序调用通常称为 fork-and-exec 的流程程序都会借由父程序以复制 ( fork )的方式产生一个一模一样的子程序, 然后被复制出来的子程序再以 exec的方式来执行实际要进行的程序,最终就成为一个子程序的存在。 整个流程有点像下面这张图:
    在这里插入图片描述
  • 常驻程序
    如果就我们之前学到的一些指令数据来看,其实我们下达的指令都很简单,包括用 ls 显示文件啊、用 touch 创建文件啊、rm/mkdir/cp/mv 等指令管理文件啊、 chmod/chown/passwd 等等的指令来管理权限等等的,不过, 这些指令都是执行完就结束了。也就是说,该项指令被触发后所产生的 PID 很快就会终止。那有没有一直在执行的程序呢?举个简单的例子,我们知道系统每分钟都会去扫描 /etc/crontab
    以及相关的配置文件, 来进行工作调度。那个工作调度是 crond 这个程序所管理的,我们将他启动在背景当中一直持续不断的运行,那就是“常驻在内存当中的程序”常驻在内存当中的程序通常都是负责一些系统所提供的功能以服务使用者各项任务,因此这些常驻程序就会被我们称为:服务( daemon )。系统的服务非常的多, 不过主要大致分成系统本身所需要的服务,例如刚刚提到的 crond 及 atd ,还有rsyslogd等等的。还有一些则是负责网络连线的服务,例Apache, named, postfix, vsftpd… 等等的。这些网络服务比较有趣的地方,在于这些程序被执行后,他会启动一个可以负责网络监听的端口 ( port ) ,以提供外部用户端 ( client ) 的连线要求

工作管理

这个工作管理 ( job control ) 是用在 bash 环境下的,也就是说: “ 当我们登陆系统取得 bash shell 之后,在单一终端机接口下同时进行多个工作的行为管理 ” 。举例来说,我们在登陆 bash 后, 想要一边复制文件、一边进行数据搜寻、一边进行编译,还可以一边进行 vim 程序撰写。当然我们可以重复登陆那六个命令行的终端机环境,不过我们可以使用 job control 使其在一个 bash 内达成


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

3369_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值