操作系统课程设计创建新进程造成消耗系统资源死机问题的原因

首先要明确一个概念:

1、初始化:C++中变量的初始化是如下形式:
int a = 0;

也就是说在创建变量的时候,在内存中为这个变量开辟一段内存,同时把这个数值填进去。如果只是定义变量

int a;

那么此时虽然 创建了a变量,为a变量开辟了一个内存空间,但是此时这段内存空间里面的值没有被指定,是随机的,也就是垃圾值

2、赋值

赋值是在定义了变量之后,利用其他内存块中的数值来覆盖当前变量的所在的内存。

初始化只能进行一次,即在变量定义的时候,但是赋值却可以进行多次。



在实验2-1的时候,可能大家没有发现,所谓的创建进程就是以你自己写出代码的那个进程为父进程,进而运行这个程序创建一些子进程,并且程序做了明确的限制,只创建5个进程就停止这个程序。


int main(int argc, char *argv[])
{
	int nClone;
	//nClone = 0;     NO1

	if(argc > 1)
	{
		::sscanf(argv[1], "%d", &nClone);
	}
	nClone = 0;     NO2
	cout << "Process ID:" << ::GetCurrentProcessId()
		<<",Clone ID:" << nClone
		<<endl;

	const int c_nCloneMax = 5;
	if(nClone < c_nCloneMax)
	{
		StartClone(++nClone);
	}

	getchar();
	return 0;
}

这是我们这次实验的主函数,当我们运行这个程序的时候,第一次执行的就是父进程,因为我们在运行程序的时候没有为main函数提供多余的参数,所以此时argc参数个数是等于1,所以此时不执行if那个语句。改了 第二次的样子应该像上面一样,先是定义这个NCLONE变量,此时这个变量里面就是垃圾值,因为没有初始化,该变量所在的内存里面的值不确定,是随机的,因为跳过了IF语句执行了nCloneDE  = 0,这个赋值语句,所以当前执行的这个父进程没有问题。但是在父进程创建第一个子进程的时候,nClone因为是做进程个数的计数器,此时已经变为1,创建子进程的时候,再调用Main函数就会执行主函数里面的if语句,因为要把当前创建子进程的个数传递进去,因为只有这样,随着创建进程个数的增加,整个程序才会停止,但是因为第二次修改在if语句后面把本来已经获取到值得nClone给覆盖了,再次改成0,所以此时程序就默认以前是只创建了一个进程,一次类推,程序不断的默认只创建一个进程,永远不会被限制条件所限制停止程序,最终耗光所有的系统资源,造成死机 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值