Linux系列(13)之程序与服务的概念
知道如何区分程序与进程吗?
知道如何产生进程吗?
知道进程之间的相关性吗?
知道进程调用的流程吗?
知道进程与服务的区别吗?
1.程序与进程的区别
bash就是一个程序,当我们登录之后系统就会给我们分配一个PID。
1.产生进程(process)
我们如何产生一个进程呢?很简单的,就是“执行一个程序或指令”就会触发一个事件而取得一个PID。我们知道系统只认识二进制文件,那么当我们要让系统执行某个工作时,就需要启动(加载)某个二进制文件了。
我们知道,在Linux下执行一个指令时,系统会将相关的权限、属性、程序码、数据等均载入内存,并给予这个内存单元一个程序码(PID),最终该指令可以进行的任务则与这个PID的权限有关。
2.进程与子进程
在这里举个例子,当我们登录系统后会取得一个shell,然后,我们用这个shell提供的接口去执行另一个指令,例如usr/bin/passwd或者是touch等等,那些另外执行的指令也会被触发成PID,那个后来执行指令产生的PID就是“子程序”,而在我们原本的shell环境下就称为父程序了。
父程序与子程序的关系图如下所示:
解惑:
你有没有遇到这种情况,明明我将有问题的程序关闭了,怎么过一阵子它又自动产生了呢?而且新产生的那个程序的PID与原来的还不一样,这是什么原因呢?
不要怀疑,如果不是crontab工作调度的影响,则肯定有一个父程序存在,所以你杀掉子程序后父程序会再主动调用那个程序从而生成一个新的进程。那怎么才能杀死子程序呢,只要杀死父进程,子进程自然就会被杀死的。
3.程序调用流程
程序调用流程:fork and exec
Linux的程序调用通常称为fork and exec的流程。程序都会借由父程序以复制(fork)的方式产生一个一模一样的子程序,然后被复制出来的子程序再以exec的方式来执行实际要执行的程序,最终就成为一个子程序的存在。流程如下:
4.常驻内存的服务
进程与服务的区别:进程在执行完任务就会死亡,因此只会在内存中停留一会儿;而服务则是一直在内存中运行着。
那么有哪些常驻内存的程序?就是系统或网络服务咯。
工作调度的文件/etc/crontab,我们知道系统每分钟都会去扫描/etc/crontab以及相关的配置文件,来进行工作调度吧?工作调度谁负责呢?是crond这个程序所管理的,因此crond就是一直常驻内存中。
常驻内存当中的程序通常都是负责一些系统所提供的功能以服务使用者各项任务,因此这些常驻内存的程序就会被我们称之为:服务(daemon)。
1.服务分类
系统的服务分类非常多,大致分为系统本身所需的服务、网络服务等
1.系统所需服务
常见的系统服务:crond、atd、rsyslogd等等
2.网络服务
网络服务通常会启动一个负责网络监听的端口。
常见的网络服务:Apache、named、postfix、vsftpd等等。
服务总结
注意:常见的系统服务的名称都会以d结尾,为什么需要这样,这是因为Linux希望我们可以简单的判断该程序是否为daemon,所以一般daemon的程序都会加上d在文件名后。