进程和程序
“执行一个命令或者程序”便可以触发一个事件而取得一个PID,这就产生了一个进程。而当我们想要系统进行工作时,我们就得需要启动一个二进制文件,而这个二进制文件就是程序。
每个进程都有三组人的权限,每组人都具有r/w/x
的权限,不同的用户执行这个程序时,系统所给予的权限也不一样。
例如当我们登录并执行bash
的时候,系统就已经根据etc/passwd
来赋予登陆者相应的权限和PID了。而当这个进程进行其他工作的时候,例如执行touch
命令时,那么由这个进程衍生出来的其他进程在一般状况下,也都会沿用这个进程的相关权限。
- 程序:通常为二进制程序放置在存储媒介中。
- 进程:程序被触发后,执行者的权限与属性、程序的程序代码与所需数据等都会被加载到内存中,操作系统会给予这个内存中的单元一个标识符,这就是PID。进程就是一个正在执行中的程序。
子进程与父进程
上文所述的“衍生出来的进程”就是一个子进程,而衍生出它的进程就是父进程。例如,在bash
执行touch
命令,这些另外执行的命令也会被触发成为PID,那么这个PID就是子进程的PID,而那个bash
环境就是父进程。子、父进程的关系可以通过PPID(ParentID)看出。
例如当我在当前bash
环境中再次触发bash
,使用ps -l
命令可以看出,新触发的bash
的PPID就是原先bash
的PID。
进程调用的流程
进程调用的流程通常称为fork-and-exec
的流程。进程会通过父进程以复制的方式(fork
)来产生一个一模一样的子进程,然后被复制出来的子进程再以exec
的方式来执行实际要进行的进程。
系统先以fork
的方式复制一个与父进程相同的暂存进程,这个进程与父进程区别就是PID
不同,还有就是暂存进程还会多一个PPID
。然后暂存进程就会以exec
的方式加载实际要执行的程序。
服务
常驻在内存中的进程通常都是负责一些系统所提供的功能以服务用户,因此这些常驻的进程通常被称为服务。