进程的定义、创建(fork/vfork)及evec函数族详解

本文详细介绍了进程的概念,包括进程的状态变化、管理命令如ps和kill,以及创建子进程的fork和vfork函数,强调了它们的区别。此外,还讨论了在不同场景下如何使用exec函数族来替换进程执行的程序。
摘要由CSDN通过智能技术生成
一:进程和程序之间的区别

1:程序是静态的,它包括代码段,数据段(栈,普通数据区,堆区);

2:进程是程序的一次运行过程,即运行一次产生一个进程,运行两次产生两个进程;

3:进程存在一些状态的变化,他是动态的;

4:进程不仅包括程序的代码段,数据段内容,还有其他资源(因为要运行这个进程),如:一些系统数据,pc指针;

5:进程管理属于内核层,内核层的主要功能是设备驱动,进程管理,文件管理和网络通信。

二:进程的相关命令:

1:ps

     权限:所有用户

     命令格式:ps[选项]

     功能:查看系统中的进程状态

     eg:ps -axj ;    //运行结果为系统中的进程

2:kill

     权限:所有用户

     命令格式:kill[选项][进程号]

     功能:发送指定的信号给指定的进程或进程组

     常用选项:   -l   :查看有哪些信号,eg:kill -l

                        -9:结束进程(包括后台进程),如:kill -9 pid

三:创建子进程函数fork和vfork

1:fork函数

头文件:#include<sys/types.h>

功能:创建一个子进程

参数:没有参数

返回值:成功返回两个值。子进程中为0;父进程中为大于0 的值(子进程的pid号),出错则返回一个值-1.

成功时,内核为何会返回两个值?

这是因为用户空间的进程可以认为是一个封闭的房子(在用户空间),内核通过PID对用户空间的进程进行管理。fork函数调用成功后,内核则在用户空间创建一个新进程(房子),这个房子和之前的进程代码段,数据段等都一样(除了PID之外)。因此,当函数执行成功时,在父进程和子进程中返回两个不同的值。

产生的子进程在父进程原有的运行基础上继续运行,这样就能保证一个fork函数只能产生一个子进程,而不是多个子进程;

在一个main中若存在n个fork();则最终将产生2^n个进程。

注意:fork函数成功执行后,父进程和子进程的执行没有固定的先后顺序,这是因为CPU在微观上是串行执行,宏观上是并行执行。即CPU在一个时间片里运行一个进程,在另一个时间片里运行另一个进程,从而导致这两个进程交替运行,且运行顺序随机未知。

2:vfork函数

vfork函数也跟fork函数一样。vfork函数执行成功后,内核也在用户空间创建一个进程,但不会重新建造一个房子,父子进程共享父进程这个房子,同时子进程先执行,父进程后运行。

3: fork(࿰

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值