Linux进程管理与创建详解.pdfVIP

  • 1
  • 0
  • 约1.26万字
  • 约 50页
  • 2026-02-10 发布于四川
  • 举报

进程标识符

每个进程都有一个非负整型表示的唯一进程ID。

进程ID标识符总是唯一的,进程ID也可以重用。

当一个进程终止后,其进程ID就可以再次被

使用。

ID为0的进程通常是调度进程,常常被称为交换

进程。该进程是内核的一部分,它不执行任

何磁盘上的程序,所以也被称为系统进程。

ID为1的进程通常是init进程,在自举过程结束

时由内核调用,此进程负责在自举内核后启

动一个UNIX系统。init读与系统有关的

初始化文件,并将系统到一个状态。

init决不会终虽然是普通的用户进程但

是以超级用户运行。

ID为2的进程是页守护进程,此进程负责支持虚拟

系统的分页操作。

函数原型:#includeunistd.h

pid_tgetpid(void);

返回调用进程的进程ID

pid_tgetppid(void);

返回调用进程的父进程ID

uid_tgetuid(void);

返回调用进程的实际用户ID

uid_tgeteuid(void);

返回调用进程的有效用户ID

gid_tgetgid(void);

返回调用进程的实际组ID

返回调用进程的有效组ID

gid_tgetegid(void);

pid_t为int,uid_t和gid_t为unsignedint

创建进程

一个现有的进程创建一个新的进程。

函数原型:#includeunistd.h

pid_tfork(void);

子进程返回0,父进程中

返回子进程ID,出错返回-1

fork创建的新进程被称为子进程。fork函数被

调用一次,返回两次。

将子进程的ID返回给父进程是因为一个进程的

子进程可以有多个,并且没有一个函数使一

个进程可以获得其所有子进程的ID。

子进程返回0是因为一个进程只会有一个父进

程,可以通过getppid获得其父进程的ID。

子进程和父进程继续执行fork调用的语句。

需要注意的是子进程是父进程的副本,也就是

说子进程获得父进程数据空间、堆和栈的副本。

父子进程只共享正文段。

当然这些都是依靠相应的实现。因为现在很多的

实现并不执行一个父进程数据段、栈和堆的完

全。作为替代,使用了写时技术,就

是这些区域由父子进程共享,而且内核将他们

的权限改变为只读。如果父子进程中任意

一个修改这些区域,则内核只为修改区域的那

块内存制作一个副本。

在fork是父进程

先执行还是子进程

先执行是不确定的。

这取决于内核所使

用的调度算法。

左例中将父进程休眠

2秒,以使子进程

先执行。

注意在fork后的语句

依然属于程序的正

文段,父子进程是

共享的,所以父子

进程都会执行,但

是需要注意同步的

文档评论(0)

1亿VIP精品文档

相关文档