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

 (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 }
 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值