【实验二】进程的创建与可执行程序的加载

作者:SA****6450  丁海蛟

实验总结:

    我们用fork()函数用来创建一个新的进程,新的进程是对当前进程的复制。新的进程又称为子进程,fork函数被调用一次,但返回两次,两次返回的区别是子进程的返回值是0,而父进程的返回值则是新子进程的进程ID,出错则返回-1子进程是父进程的副本,子进程获得父进程数据空间、堆和栈,但是父子进程并不共享这些存储空间部分,父子进程共享正文段。

   在fork()创建子进程后,子程序通常会调用 exec()函数族来执行另外一个程序,这个 exec 函数族就提供了一个在进程中启动另一个程序执行的方法。它根据指定的文件名或目录名找到可执行文件,并用它来代替当前进程的执行映像。也就是说,exec调用并没有生成新进程,一个进程一旦调用 exec函数系统把代码段替换成新程序的代码,原始进程就消失了,放弃原有的数据段和堆栈段,并为新程序分配新的数据段与堆栈段,惟一保留的就是进程的 ID。也就是说,对系统而言,还是同一个进程,不过执行的已经是另外一个程序了。

【附录】

一、实验任务:

        熟悉进程的创建和可执行程序的加载,熟悉folk()函数和exec()函数

二、实验环境:

        vmware9.0   ubuntu10.04

三、实验步骤:

        在vmware9.0环境下的虚拟机ubuntu10.04中打开terminal,启动gedit编辑实验代码test2.c。如图一所示。


图一

执行结果如图二所示。


图二

为了验证exec()的执行,本实验中加入了一句选择语句,在执行完父进程后,进入子进程,然后加入选择语句,如果输入为1,则正常执行子进程。如果输入为0,则执行execl("./test1","test",NULL),执行新的进程test1.结束原来的进程。

test1完成的功能只是在屏幕上打印一串字符“another procss test1”。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值