2023-2024-1 20232818 《Linux内核原理与分析》第七周作业

一、实验过程

1. 进入内核,将fork函数写入test.c文件中,并构建新的根文件系统
cd LinuxKernel
cd menu
vi test.c
make rootfs
//fork函数代码如下
#include <unistd.h> 

int Fork(int argc, char *argv[]) {
    int pid;
    /* fork another process */
    pid = fork();                                 
    if (pid<0) { 
       /* error occurred */
       fprintf(stderr,"Fork Failed!");
       exit(-1);
    } else if (pid==0) {
       /*   child process  */
       printf("This is Child Process!\n");
    } else {   
       /*  parent process   */
       printf("This is Parent Process!\n");          
       /* parent will wait for the child to complete*/
       wait(NULL);
       printf("Child Complete!\n");
    }
}

//在main函数中写入如下代码
MenuConfig("fork","Fork a new process",Fork);


 2. 进入gdb并进行调试

分别在sys_clone、do_fork、dup_task_struct、copy_process、copy_thread、ret_from_fork处设置断点:

开始调试:

 二、总结

        当Linux系统创建一个新进程,通常使用fork()系统调用,这使得当前进程复制出一个与其几乎完全相同的子进程。子进程继承了父进程的内存、文件描述符、状态等属性,但有自己的进程ID。虽然子进程初时使用其父进程的内存页面,但在尝试修改时会触发“写时复制”机制,为其创建新的内存页面。通常,子进程创建后,可以使用exec()系列函数来加载并执行新程序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值