关于进程,这些知识你都会了吗

进程概念

首先我们对进程进行介绍,进程顾名思义,就是运行中的程序,但是从操作系统的层面上来说,进程就是pcb,是操作系统对于程序运行的一个动态描述,通过这些描述让程序运行起来,实现操作系统对于程序运行的调度管理

PCB描述信息:pcb在Linux下是task_struct结构体,进程标识符,上下文信息,内存指针,程序计数器
cpu分时机制:将cpu处理程序运行的过程划分为时间片,每个程序在cpu上运行一段很短的时间,直到时间片用完,切换下一个进程
并发:同一时间段。cpu资源不够的情况下,采用cpu分时机制,任务轮询处理
并行:同一时刻。多核cpu上,多个进程同时占据cpu进行数据处理

进程的状态

  • 运行:包含正在运行以及就绪,运行态是一个进程拿到时间片就能进行数据处理的状态
  • 休眠:暂时不需要cpu进行调度运行,让出cpu资源,休眠也有唤醒条件,操作系统进行调度的时候,会查看状态,如果是休眠,会检查唤醒条件是否满足,如果满足,则将休眠进程进行唤醒,转为运行状态,如果不满足,则会转到下一个进程
  • 可中断休眠:对于休眠的进程来说,有些休眠是可以自然唤醒的,也可以通过人为的去唤醒,唤醒后转为运行态
  • 不可中断休眠:必须等到唤醒条件自然满足之后才能置为运行态(中间不能被打断)
  • 停止:停止与休眠不一样(休眠操作系统会去查看进程唤醒条件是否满足,满足则会进行置为运行态)停止只能手动的进行唤醒,等待处理的一种状态
  • 僵尸状态:一个进程退出了,但是进程资源没有完全被释放
  • 僵尸进程:处于僵尸状态的进程,退出了但是资源没有完全被释放的进程
    危害:资源泄露(正常进程运行不起来)
    产生:一个子进程先于父进程退出,父进程没有关注子进程退出状态,导致子进程资源无法完全释放
    解决:进程等待
  • 孤儿进程:父进程先于子进程退出,子进程变为孤儿进程
    特征:让出终端,让系统后台进行,并且父进程成为1号进程

进程创建

进程创建:pid_t fork(void)–通过复制调用进程,创建一个新的进程,进程就是pcb,创建一个进程就是创建一个pcb,复制了调用fork的这个进程(上下文信息,内存指针,程序计数器)
新创建的进程称为子进程,子进程的代码和父进程一样,并且运行位置也相同,通过fork的返回值判断哪个进程是父进程,哪个是子进程
在父进程中返回子进程的pid,是大于0的,在子进程中返回0,返回-1表示创建子进程失败
实例:

#include<stdio.h>
#include<unistd.h>
int main(int argc,char* argv[])
{
	pid_t ret=fork();
	if(ret>0)
	{
		printf("this is father progress:%d\n",getpid());
	}
	else if(ret==0)
	{
		printf("this is son progress:%d\n",getpid());
	}
	else
	{
		printf("error\n");
	}
	printf("this is end!\n");
	return 0;
}

运行结果:
在这里插入图片描述

通过上面的运行结果我们可以看到,父进程和子进程都打印出来this is end,说明fork的子进程和父进程执行位置相同
在这里插入图片描述
通过查看进程的运行状态和进程id,以及父进程的id,可以看出谁是子进程,谁是父进程,但是父子进程的执行顺序不是一成不变的

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值