程序和进程以及信号的概念

来源:互联网 发布:淘宝怎么查看买家信用 编辑:程序博客网 时间:2024/05/29 10:13

1. 程序和进程的区别

程序是存储在一个磁盘上某个目录中的可执行文件。内核使用exec函数将程序读入内存,并执行程序。


进程和进程ID:

程序的执行实例被称为进程(Process)。Unix 系统确保每个进程都有一个唯一的数字标识符,称为进程ID(Process ID),进程的ID总是一个非负整数。


进程控制

主要有3个用于进程控制的主要函数: fork、exec和waitpid。


线程和线程ID

通常,一个进程只有一个控制线程(thread)-某一个时刻执行的一组机器指令。

一个进程内的所有线程共享同一个地址空间、文件描述符、栈以及进程相关的属性。因为它们能访问同一个存储区,所以各线程在访问共享数据时需要采取同步措施以避免不一致。

线程的ID只在它所属的进程内起作用。一个进程中的线程ID在另一个进程中没有意义。当在一个进程中对某个特定的线程进行处理时,我们可以使用该线程的ID引用它。


2.  Unix 系统中信号的概念

信号(Signal)用于通知进程发生了某种情况。例如,若某一个进程执行除法操作,其除数为0,则将名为SIGFPE(浮点异常)的信号发送给该进程。

进程有如下的三种处理信号的方式:

1. 忽略信号。有些信号表示硬件异常,例如,除以0或者访问进程地址空间以外的存储单元等。因为这些异常产生的后果不确定,所以不推荐使用这种处理方式。

2. 按系统默认的方式处理。对于除以0,系统默认的处理方式是终止该进程。

3. 提供一个函数,信号发生时调用该函数,这被称为捕捉该信号。通过提供自己编写的函数,我们就知道什么时间产生了信号以及我们自己按需要来处理它。


信号的产生:

终端键盘上有两种方式来产生信号,分别是中断键(interrupt key,通常是Delete键或者Ctrl +C)和退出键,它们被用于中断当前运行的进程。

另一种产生信号的方法是调用kill函数。在一个进程中调用此函数可以向另外一个进程发送一个信号。但是有个限制:当向另一个进程发送信号时,我们必须是那个进程的所有者或者是超级用户。


3. Linux系统常用的衡量进程的时间

进程时间:也被称为CPU时间,用来衡量进程使用的中央处理器资源。进程的时间以时钟滴答计算。每秒钟曾经取为50、60、100个时钟滴答。


当衡量一个进程的执行时间时,Unix 系统为一个进程维护了3个进程的时间值。

时钟时间、用户CPU时间、系统CPU时间

时钟时间:是进程运行的时间总量,其值与系统中同时运行的进程数有关。运行的进程越多,时钟时间会越大。

用户CPU时间: 是指执行用户指令所用的时间量。

系统CPU时间: 是指为该进程执行内核程序所花费的时间。

例如:

一个进程执行一个系统服务时,如read或者write,在内核内执行该服务所花费的时间会计入该进程的系统CPU时间。

用户CPU时间+系统CPU时间=CPU时间


原创粉丝点击