3.1 进程的建立与运行

目录

3.1.1 进程的概念

3.1.2 进程的建立

3.1.3 进程的运行

3.1.4 数据和文件描述符的继承


3.1.1 进程的概念


在 UNIX 中,进程是正在执行的程序。它相当于 Windows 环境内的任务这一概念。每个进程包括程序代码和数据。其中数据包含程序变量数据、外部数据和程序堆栈等。


系统的命令解释程序 shell 为了执行一条命令,就要建立一个新的进程并运行它,例如:
$cat file1
该命令就会使 shell 专门建立一个进程来运行 cat 命令。再看一个复杂一些的命令:
$ls | wc –ll
这个命令就会使 shell 建立两个进程,以并发运行命令 ls 和 wc,把目录列表命令 ls 的输出通过管道送至字计数命令 wc。


因为一个进程对应于一个程序的执行,所以绝对不要把进程与程序这两个概念相混淆。进程是动态的概念,而程序为静态的概念。实际上,多个进程可以并发执行同一个程序, 对于公用的实用程序就常常是这样。例如,几个用户可以同时运行一个编辑程序,每个用户对此程序的执行均作为一个单独的进程。


在 UNIX 中,一个进程又可以启动另一个进程,这就给 UNIX 的进程环境提供了一个象文件系统目录树那样的层次结构。进程树的顶端是一个控制进程,它是一个名为 init 的程序的执行,该进程是所有用户进程的祖先。
Linux 同样向程序员提供一些进程控制方面的系统调用,其中最重要的有以下几个:
1. fork()。它通过复制调用进程来建立新的进程,它是最基本的进程建立操作。
2. exec。它包括一系列的系统调用,其中每个系统调用都完成相同的功能,即通过用一个新的程序覆盖原内存空间,来实现进程的转变。各种 exec 系统调用之间的区别仅在于它们的参数构造不同。
3. wait()。它提供了初级的进程同步措施,它能使一个进程等待,直到另一个进程结束为止。
4. exit()。这个系统调用常用来终止一个进程的运行。
在下面,我们将对 Linux 的进程进行详细的讨论,并要对以上系统调用作出详细的介绍。



3.1.2 进程的建立


系统调用 fork()是建立进程的最基本操作,它是把 Linux 变换为多任务系统的基础。fork() 在 Linux 系统库 unistd.h 中的函数声明如下:
pidtfork(void);
如果 fork()调用成功,就会使内核建立一个新的进程,所建的新进程是调用 fork()的进程的副本。也就是说,新的进程运行与其创建者一样的程序,其中的变量具有与创建进程那变量相同的值。但是这两个进程间还是有差距的,我们在下面将详细的讨论。


新建立的进程被成为子进程(child process),那个调用 fork()建立此新进程的进程被称为父进程(parent process)。以后,父进程与子进程就并发执行,它们都从 fork()调用后的那句语句开始执行。
有些读者可能习惯于纯串行的程序设计环境,一开始对 fork() 调用的理解可能会有一些困难。图 3-1 给出了 fork()调用的情况,有助于对 fork()调用的理解。图中给出了三个语句,先是调用 printf(),随后调用 fork(),然后又调用 printf()。
 

图 3- 1 fork()调用执行示意图


如图 3-1,它分为 fork()调用前和调用后两部分。调用前的那一部分给出了进程 A 调用fork()的情况。PC(程序计数器)指向当前执行的语句。这时它指向第一个 printf 语句。调用后那一部分给出了调用 fork()以后的情况。这时进程 A 和 B 一起运行,进程 A 是父进程, 进程 B 是子进程,它是进程 A 的副本,执行与 A 一样的程序。两个 PC 都指向第二个 printf 语句,即 fork()调用之后的语句。也就是说,A 和 B 都从程序的相同点开始执行。
系统调用 fork()没有参数,它返回一个 pid_t 类型的值 pid。pid 被用来区分父进程和子进程。在父进程中,pid 被置为一个非 0 的正整数;在子进程中&

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值