Linux系統fork執行過程__Linux

來源:互聯網
上載者:User

鄭德倫 原創作品轉載請註明出處 《Linux核心分析》MOOC課程
http://mooc.study.163.com/course/USTC-1000029000
一、配置環境:
首先我們把環境配置完成
在實驗樓中輸入

rm menu –rfgit clone https://github.com/mengning/menu.gitcd menumv test_fork.c test.cmake rootfs

啟動MenuOS後發現fork已經被加入到了MenuOS中了


二、跟蹤調試fork
輸入qemu –kernel ../linux-3.18.6/arch/x86/boot/bzImage –initrd ../rootfs.img –s –S
然後在另一個終端輸入

gdb(gdb)file linux-3.18.6/vmlinux(gdb)target remote:1234(gdb)b sys_clone(gdb)b do_fork(gdb)b dup_task_struct(gdb)b copy_process(gdb)b copy_thread(gdb)b ret_from_fork

設定好斷點之後 我們進行跟蹤fork的過程
首先會觸發sys_clone的系統調用

然後進入do_fork函數

在do_fork函數中會調用copy_process

在copy_process中調用dup_task_struct和copy_thread


最後調用ret_from_fork()完成進程的fork

整個過程我們用流程圖表示一下:

三、總結
Linux建立一個新進程時,可能會使用到sys_vfork sys_clone sys_fork系統調用,但是這三個系統調用都會調用do_fork函數,do_fork會調用copy_process來複製父進程的資源給子進程。在copy_process中有各種copy_xxx 函數來進行複製初始化工作。完成各項工作之後會執行ret_from_fork,這是子進程的起點。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.