您的位置:首页 > 编程语言 > PHP开发

(三)和菜鸟一起学习unix之创建进程 fork getpid getppid

2012-10-14 18:20 239 查看
 (1 )进程基本环境

                      进程是程序的一次执行,是运行在自己的虚拟地址空间的一个具有独立功能的程序。进程是分配和释放资源的基本单位, 当程序执行时, 系统创建进程,分配内存和cpu资源;系统结束时,系统回收这些资源。

 

(2 )进程概念

               进程通常是由程序,数据和进程控制块(pcb)三个部分组成。其中,程序部分描述了进程所要完成的功能,数据部分为进程提供了运行所需的堆栈和私有数据;进程控制块则含有进程的描述和控制信息,集中反映进程的动态特性,是系统识别和控制进程的依据。

 

(3 )进程定义:

             进程是一个具有一定独立的功能程序,关于某个数据集合的一次运行活动

 

(4 )进程的状态及其转换

 1.进程基本状态

  (1)就绪状态

    当进程已经分配到除处理机以外的所有必要的资源后,只要再获得处理机便可立即执行。

  (2)执行状态

    执行状态是指进程已经获得处理机,其程序正在执行的状态。

  (3)阻塞状态

    正在执行的进程因发生某时间而暂时无法继续执行时,便放弃处理机而处于暂停状态。

(5)父子进程

                     进程采用树型结构管理,当一个进程启动另一个进程时,被启动的进程就是子进程,原进程就是父进程。在UNIX中使用系统调用fork创建进程。fork复制了父进程的数据,堆栈和进程环境,因此,子进程继承了父亲的某些环境,并且共享了父进程的代码段。但子进程也拥有自己的环境,父子进程进程以并行的方式执行同一程序的不同分支。

              UNIX  中存在一个标识符为 1 的进程 init,它是计算机中除了sysproc 外其他所有进程的父进程。

man fork:

 

FORK(2)                    Linux Programmer’s Manual                   FORK(2)

NAME

       fork - create a child process    //创建一个子进程

SYNOPSIS  //头文件

       #include <sys/types.h>

       #include <unistd.h>

       pid_t fork(void);

RETURN VALUE

       On success, the PID of the child process is returned  in  the  parent’s

       thread  of execution, and a 0 is returned in the child’s thread of exe-

       cution.  On failure, a -1 will be returned in the parent’s context,  no

       child process will be created, and errno will be set appropriately.

 功能:创建一个子进程

返回值:子进程返回0 ,父进程返回子进程的ID,出错返回-1;

 

GETPID:

 #include <sys/types.h>

 #include <unistd.h>

 pid_t getpid(void);

 功能:获取当前进程ID

 返回:进程ID

GETPPID:

 #include <sys/types.h>

 #include <unistd.h>

 pid_t getppid(void);

 功能:获取父进程ID

 返回:父进程ID

例子:

 1 #include<sys/types.h>

  2 #include<stdio.h>

  3 #include<unistd.h>

  4 #include<stdlib.h>

  5 int main(void)

  6 {

  7     pid_t pid;

  8     pid = fork();

  9     switch(pid)

 10     {

 11         case -1:

 12             perror("error:");

 13             exit(1);

 14             break;

 15         case 0:

 16             printf("当前进程ID %d, 父进程ID %d\n",getpid(),getppid());

 17                 break;

 18         default:

 19             printf("当前进程ID %d, 父进程ID %d\n",getpid(),getppid());

 20     }

 21 }

 

 

 

 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: