服务器 频道

4.1.5 Linux进程的创建

  4.1.5  Linux进程的创建

  fork函数在Linux下产生新的进程的系统调用,这个函数名是英文中"分叉"的意思。为什么取这个名字呢?因为一个进程在运行中,如果使用了fork,就产生了另一个进程,于是进程就"分叉"了,所以这个名字取得很形象。fork的语法:

  #include <unistd.h>#include <sys/types.h>pid_t fork();

  说明  本系统调用产生一个新的进程,叫子进程,调用进程叫父进程。

  在Linux网络编程中经常用到fork()系统调用。例如在一个客户机/Web服务器构建的网络环境中,Web服务器往往可以满足许多客户端的请求。如果一个客户机要访问Web服务器,需要发送一个请求,此时由服务器生成一个父进程,然后父进程通过fork()系统调用产生一个子进程,此时客户机的请求由子进程完成。父进程可以再度回到等待状态不断服务其他客户端。原理如图4-2所示。

    
  图4-2  fork()的作用示意图

  有一个更简单的执行其他程序的函数system,参数string传递给一个命令解释器(一般为sh)执行,即string被解释为一条命令,由sh执行该命令。若参数string为一个空指针,则为检查命令解释器是否存在。该命令可以和同命令行下的命令形式相同,但由于命令作为一个参数放在系统调用中,应注意编译时对特殊意义字符的处理。命令的查找是按PATH环境变量的定义的。命令所生成的后果一般不会对父进程编程造成影响。返回值:当参数为空指针时,只有当命令解释器有效时返回值为非零。若参数不为空指针,返回值为该命令的返回状态(同waitpid())的返回值。命令无效或语法错误则返回非零值,所执行的命令被终止。其他情况则返回-1。它是一个较高层的函数,实际上相当于在Shell下执行一条命令,除了system之外,系统调用exec用来执行一个可执行文件,来代替当前进程的执行映像。系统调用exit的功能是终止发出调用的进程。sleep函数调用用来指定进程挂起的秒数。wait函数族用来等待和控制进程。poppen函数和system函数类似,区别是它用管道方式处理输出。

  父进程和子进程的关系是管理和被管理的关系,当父进程终止时,子进程也随之而终止。但子进程终止时,父进程并不一定终止。比如httpd服务器运行时,我们可以杀掉其子进程,父进程并不会因为子进程的终止而终止。


 

0
相关文章