Ubuntu下进程的创建fork




前言

进程在计算机中是不可或缺的一部分,是系统资源分配和调度的基本单位,进程是程序执行的实体。


一、进程是什么?

进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。
程序:程序是静态,存储在磁盘中的有序指令的集合(文件:可以在计算机中去执行)
进程:程序执行的过程。抽象的概念,动态的执行过程(需要进行进程的创建、调度、消亡)。

二、如何创建进程

1.使用fork函数创建进程

fork函数原型如下():

#include <unistd.h>
pid_t fork(void);

在Linux系统中,创建一个子进程需要用到fork();需要引用头文件unistd.h;main函数是父进,在fork函数之后通过判断fork函数的返回值来判断哪一部分代码是子进程模块的,返回值为0的为子进程,大于0的为父进程,后面代码部分为公共部分。

2.代码实例

代码如下(示例):

#include <stdio.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
	printf("111\n");
	pid_t pid = fork();
	if(pid==0)
	{
		printf("这是子进程\n");
	}
	if(pid > 0 )
	{
		printf("这是父进程\n");
	}
	printf("222\n");
	return 0;
}

上图是程序运行的结果
以上是上面的代码的运行结果;从以上结果可以看到“111”只被打印了一次,“222”打印了两次,打印“111”的时候还没创建子进程,只有主进程进行一次打印,fork之后创建了子进程,子进程括号部分运行完了并没有结束进程,又执行打印了“222”,父进程和子进程各打印一次,所以打印了两次“222”;可能每次打印的顺序不一样,但内容是一样的。


总结

退出进程用exit()函数,退出子进程不会影响父进程,子进程未退出而父进程退出,则子进程变成孤儿进程。
fork:

  1. 在创建子进程成功,父子进程的执行顺序是随机的(程序员无法控制)
  2. 在创建一个子进程的时候,子进程会复制拷贝父进程中的所要资源,他们各自访问的是独立的空间
  3. 在创建进程的时候,需要创建空间(效率不能保证),如果需要提高效率,同时父子进程访问同一空间使用vfork来实现:

vfork

  1. 在创建子进程,父进程阻塞,子进程退出,父进程才会执行;
  2. 父子进程共享同一物理空间的数据。
  3. 在退出进程的时候,需要使用exit退出;
  • 3
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值