关于进程加载执行的描述正确的是()
A: 系统调用exec( )加载新程序取代当前运行进程
B: 系统调用exec( )允许进程“加载”一个完全不同的程序,并从main开始执行
C: exec调用成功时,它是相同的进程,但是运行了不同的程序
D: exec调用成功时,代码段、堆栈和堆(heap)等完全重写了
A: 系统调用exec( )加载新程序取代当前运行进程
B: 系统调用exec( )允许进程“加载”一个完全不同的程序,并从main开始执行
C: exec调用成功时,它是相同的进程,但是运行了不同的程序
D: exec调用成功时,代码段、堆栈和堆(heap)等完全重写了
举一反三
- 调用exec可能有变化的是()。 A: 调用前后进程ID B: 调用exec前后实际用户ID C: 调用exec前后实际组ID D: 调用exec前后有效用户ID和有效组ID
- 在Linux下,采用exec系统调用创建新的子进程和父进程共享所有资源。
- 编写程序,在程序中创建一个子进程,使子进程通过exec更改代码段,执行cat命令。
- 中国大学MOOC: 在Linux下,采用exec系统调用创建新的子进程和父进程共享所有资源。
- 实验目的 通过进程的创建、撤消和运行加深对进程概念和进程并发执行的理解,明确进程与程序之间的区别。 实验内容 [br][/br] (1) 了解系统调用fork()、execvp()和wait()的功能和实现过程。 (2) 编写一段程序,使用系统调用fork()来创建两个子进程,并由父进程重复显示字符串“parent:”和自己的标识数,而子进程则重复显示字符串“child:”和自己的标识数。 (3) 编写一段程序,使用系统调用fork()来创建一个子进程。子进程通过系统调用execvp()更换自己的执行代码,新的代码显示“new program.”。而父进程则调用wait()等待子进程结束,并在子进程结束后显示子进程的标识符,然后正常结束。 [br][/br] 思考 (1)系统调用fork()是如何创建进程的? (2)当首次将CPU调度给子进程时,其入口在哪里? (3)系统调用exec()是如何更换进程的可执行代码的? (4)系统调用exit()是如何终止一个进程的? (5)对一个应用,如果多个进程的并发执行来实现,与单个进程来实现有什么不同?