【Linux基础】进程属性

来源:互联网 发布:windows monaco 字体 编辑:程序博客网 时间:2024/04/30 04:10
1.进程标识
进程最主要的属性就是进程号(PID,process ID)和它的父进程号(PPID,parent process ID).PID和PPID都是非零正整数。从进程ID的名字就可以看出,它就是进程的身份证号码,每个人的身份证号码都不会相同,每个进程的进程ID也不会相同。系统调用getpid()就是获得进程标识符。
一个PID唯一地标识一个进程。一个进程创建一个新进程称为创建了子进程,创建子进程的进程称为父进程。
在Linux中获得当前进程的PID和PPID的系统调用函数为getpid()和getppid()。常常在程序获得进程的PID和PPID后,可以将其写入日志文件以做备份。运用getpid 和getppid获得当进程PID和PPID的例子。
/*pidandppid.c*/
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main()
{
printf(“PID = %d\n”, getpid());
printf(“PPID = %d\n”, getppid());
exit(0);
}
通过编译后,运行程序得到以下结果(该值在不同的系统上会有不同的值)
[root@localhost process]#./pidandppid
PID=18985
PPID=14481
进程中还有真实用户ID(UID)和有效的用户ID(EUID)。进程的UID就是其创建者的用户标识号,或者说就是复制了父进程的UID值,通常,只允许创建者(也称为属主)和超级用户对进程进行操作。EUID是“有效"的用户ID,这是一个额外的UID,用来确定进程在任何给定的时刻对哪些资源和文件具有访问权限。它们的函数分别是getuid和geteuid.
2.进程状态
为了对进程从产生到消亡的这个动态变化过程进行捕获和描述,就需要定义进程各种状态并制定相应的状态转换策略,以此来控制进程的运行。
因为不同操作系统对进程的管理方式和对进程的状态解释可以不同,所以不同操作系统中描述进程状态的数量和命名也会有所不同,但最基本的进程状态有三种:
(1)运行态:进程占有CPU,并在CPU上运行。
(2)就绪态:进程已经具备运行条件,但由于CPU忙而暂时不能运行
(3)阻塞态(或等待态):进程因等待某种事件的发生而暂时不能运行。(即使CPU空闲,进程也不可运行)。
进程在生命期内处于且仅处于三种基本状态之一,如图 7‑1所示。
这三种状态之间有四种可能的转换关系:
(1)运行态®阻塞态:进程发现它不能运行下去时发生这种转换。这是因为进程发生I/O请求或等待某件事情。
(2)运行态®就绪态:在系统认为运行进程占用CPU的时间已经过长,决定让其它进程占用CPU时发生这种转换。这是由调度程序引起的。调度程序是操作系统的一部分,进程甚至感觉不到它的存在。
(3)就绪态®运行态:运行进程已经用完分给它的CPU时间,调度程序从处于就绪态的进程中选择一个投入运行。
(4)阻塞态®就绪态:当一个进程等待的一个外部事件发生时(例如输入数据到达),则发生这种转换。如果这时没有其它进程运行,则转换③立即被触发,该进程便开始运行。
调度程序的主要工作是决定哪个进程应当运行,以及它应当运行多长时间。这点很重要,我们将在后面对其进行讨论。
本文转载于唯C教育,【Linux基础】进程属性
http://www.weicedu.com/forum.php?mod=viewthread&tid=107&fromuid=4
(出处: http://www.weicedu.com/)

原创粉丝点击