Process 进程

原文参考鸟哥第十七章
这里写图片描述

1.什么是进程

1.1进程与程序

1.2Linux 的多用户、多任务环境

1.什么是进程

我们一直强调在 Linux 底下所有的命令不你能够进行的动作都与权限有关, 而系统如何判定
你的权限呢?当然就是第十四章账号管理当中提到的 UID/GID 的相关概忛,以及文件的属性
相关性!再进一步来解释,你现在大概知道,在 Linux 系统当中:触发任何一个事件时,系
统都会将他定义成为一个程序,并且给予这个程序一个 ID ,称为 PID,同时依据触发这个程
序的用户不相关属性关系,给予这个 PID 一组有效的权限设置。从此以后,这个 PID 能够在
系统上面进行的操作,就与这个 PID 的权限有关了!

看这个定义似乎没有什举很奇怪的地方,不过,您得要了解什举叫做“触发事件”才行啊!
我们在什么情况下会触发一个事件?而同一个事件可否被触发多次?


1.1进程与程序(process & program)

我们如何产生一个程序呢?其实很简单啦,就是执行一个程序或命令就可以触发一个事件而
取得一个 PID 啰!我们说过,系统应该是仅认识二进制文件的,那么当我们要让系统工作的
时候,当然就是需要启动一个二进制文件啰,那个二进制文件就是程序 (program) 啦!

那我们知道,每个程序都有三组人的权限,每组人马都具有 r/w/x 的权限,所以不同的使用
者身份执行这个 program 时,系统给予的权限也都不相同!举例来说,我们可以利用 touch
来建立一个空的文件,当 root 执行这个 touch 命令时,他取得的是 UID/GID = 0/0 的权限
,而当 dmtsai (UID/GID=501/501) 执行这个 touch 时,他的权限就跟 root 不同啦!我们
将这个概念绘制成下图:

这里写图片描述

如上图所示,程序一般是放置在实体磁盘中,然后透过用户的执行来触发。触发后会加载到内
存中成为一个个体,那就是程序。为了操作系统可管理这个程序,因此程序有给予执行者的权
限/属性等参数,并包括程序所需要的脚本与数据或文件数据等,最后再给予一个 PID。系统就
是透过这个 PID 来判断该 process 是否具有权限进行工作的!他是很重要的哩!

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

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

让我们将程序与进程作个总结:
~程序 (program):通常为二进制文件,放置在储存媒体中 (如硬盘、光盘、软盘、磁带等), 为
实体文件型态存在;
~程序 (process):程序被触发后,执行者的权限与属性、程序的程序代码与所需数据等都会被加
载内存中,操作系统并给予这个内存内的单元一个标识符 (PID),可以说,程序就是一个正在运作
中的程序。

  • 子进程与父进程
    ~在上面的说明里面,我们有提到所谓的“衍生出来的程序”,那是个什么?这样说好了,当我们
    登入系统后,会取得一个 bash 的 shell ,然后,我们用这个 bash 提供的接口去执行另一个命令,
    例如 /usr/bin/passwd 或者是 touch 等等,那些另外执行的命令也会被触发成为 PID ,呵呵!
    那个后来执行命令才产生的 PID 就是“子程序”了,而在我们原本的 bash 环境下,就称为“父
    进程”了!借用我们在 十一章 Bash 课到的 export 所用的图示好了:

    这里写图片描述
    ~所以你必项要知道,程序彼此之间是有相关性的!以上面的图示来看,连续执行两个 bash 后,第二个
    bash父程序就是前一个 bash。因为每个程序都有一个 PID ,那某个程序的父程序该如
    何判断?就透过 Parent PID (PPID) 来判断即可。此外,由十一章的 export 内容我们也探讨过
    环境变量的继承问题,子程序可以取得父程序的环境变量啦!

~很多朋友常常会发现:『咦!明明我将有问题的程序关闭了,怎么过一阵子他又自动
的产生?而且新产生的那个程序的 PID 与原先的不一样,这是怎么回事呢?不要怀疑,如果不是
crontab 工作调度的影响,肯定有一支父程序存在,所以你杀掉子程序后,父程序就会主动再生
一支!那怎么办?正所谓这:“擒贼先擒王”,找出那支父程序,然后将他删除就对啦!

  • fork and exec:过程调用的流程
    ~其实子程序不父程序之间的关系还挺复杂的,最大的复杂点在于程序互相之间的调用。在 Linux
    的过程用通常称为 fork-and-exec 的流程 !程序都会由父程序以复制 (fork) 的方式产生一个一模
    一样的子程序, 然后被复制出来的子程序再以 exec 的方式来执行实际要进行的程序,最终就成
    为一个子程序的存在。 整个流程有点像底下这张图:

    这里写图片描述
    ~(1)系统先以 fork 的方式复制一个与父程序相同的暂存程序,这个程序与父程序唯一的差别就是
    PID 不同! 但是这个暂存程序还会多一个 PPID 的参数,PPID 如前所述,就是父程序的程序标
    识符啦!然后(2)暂存程序开始以 exec 的方式加载实际要执行的程序,以上述图标来讲,新的程
    序名称为 qqq ,最终子程序的程序代码就会变成 qqq 了!

  • 系统或网络服务:常驻在内存的程序
    ~如果就我们之前学到的一些命令数据来看,其实我们下达的命令都很简单,包括用 ls 显示文
    件啊、用 touch 建立文件啊、rm/mkdir/cp/mv 等命令管理文件啊、chmod/chown/passwd
    等等的命令来管理权限等等的,不过,这些命令都是执行完就结束了。也就是说,该项命令被
    触发后所产生的 PID 很快就会终止呢! 那有没有一直在执行的程序啊?当然有啊!而且多的
    是呢!

    ~举个简单的例子来说好了,我们知道系统每分钟都会去扫瞄 /etc/crontab 以及相关的配置文件,
    来进行工作调度吧?那么那个工作排程是谁负责的?当然不是鸟哥啊! 呵呵!是 crond 这个程
    序所管理的,它在启动后台中一直持续不断的运行,套句以前 DOS 年代常常说的一句话,那
    就是“常驻在内存当中的程序”啦!

    ~常驻在内存当中的程序通常都是负责一些系统所提供的功能以朋务用户各项任务,因此这些常
    驻程序就会被我们称为:服务 (daemon)。系统的服务非常的多,不过主要大致分成系统本身所
    需要的服务,例如刚刚提到的 crond 及 atd ,还有 syslog 等等的。还有一些则是负责网绚联机
    的服务,例如 Apache, named, postfix, vsftpd... 等等的。这些网络服务比较有趣的地方,在于
    这些程序被执行后,他会启动一个可以负责网绚监吩听的端口 (port) ,以提供外部客户端 (client)
    的联机要求。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值