Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1744277
  • 博文数量: 438
  • 博客积分: 9799
  • 博客等级: 中将
  • 技术积分: 6092
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-25 17:25
文章分类

全部博文(438)

文章存档

2019年(1)

2013年(8)

2012年(429)

分类: 系统运维

2012-03-29 13:12:57

每个进程都有一个独一无二的进程ID,一个非负整型。因为进程ID是一个总是独一无二的进程的仅有的被熟知的标识,所以它经常用来作为其它标识符的一部分,来保证唯一性。例如,应用程序有时包含进程ID作为文件名的一部分,来产生独一无二的文件名。


尽管唯一,进程ID是被重用的。当进程终止后,它们的ID变为可重用的侯选者。然而,多数UNIX系统实现算法来延迟重用,以便新创建的进程会分配一个与最近终止的进程不一样的ID。这避免了一个新的进程因为相同的ID被错当成之前的进程。


虽然有一些特殊的进程,但是各个实现上的细节都不同。进程ID 0通常是调用进程,并经常被熟知为对换程序(swapper)。在硬盘上没有对应于这个进程的程序,它是内核的一部分而被熟知为一个系统进程。进程ID 1通常是init进程,在启动过程结束后被内核调用。这个进程的程序文件在UNIX系统的早期版本是/etc/init,而在更新的版本在/sbin /init。这个进程负责在内核已经被启动后引入一个UNIX系统。init通常读取系统相关初始化文件--/etc/rc*文件或/etc /inittab和在/etc/init.d里的文件--和把系统引入一个特殊的状态,比如多用户。init进程绝对不死。这是普通的用户进程,不是内核 的系统进程,不像swapper,尽管它需要超级用户权限来运行。本章稍后,我们将看到init是如何变为任何孤立的子进程的父进程。


每个UNIX系统实现有它自己的内核进程集,来提供操作系统服务。例如,在UNIX系统上的一些虚拟内存实现,进程ID 2是换页后台。这个进程负责支持虚拟内存系统的换页。


除了进程ID,每个进程还有其它的标识符。以下的函数返回这些标识符。



  1. #include <unistd.h>

  2. pid_t getpid(void);

  3. 返回调用进程的进程ID。

  4. pid_t getppid(void);

  5. 返回调用进程的父进程ID。

  6. uid_t getuid(void);

  7. 返回调用进程的真实用户ID。

  8. uid_t geteuid(void);

  9. 返回调用进程的有效用户ID。

  10. gid_t getgid(void);

  11. 返回调用进程的真实组ID。

  12. gid_t getegid(void);

  13. 返回调用进程的有效组ID。


注意这些函数中没有一个有错误返回。我们将在下节讨论fork函数时回到父进程ID。真实和有效有户和组ID在4.4节讨论过了。

阅读(811) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~