1. 程式人生 > 其它 >linux程序和排程

linux程序和排程

一、程序的狀態
就緒,執行,睡眠(深度,淺度),停止(手動停止程式,如ctrl+z,gdb 除錯,fg/bg實現停止和就緒的切換),殭屍(子程序退出,父程序沒有wait)
二、程序的建立
1.程序資源分配單位,包括mm fs signal,pid等資源
2.fork,就是把描述程序資源的task struct拷貝一份。同時linux利用了copy-on-write機制(需要mmu的支援),拷貝task struct時候,把mm許可權設定為只讀,這樣在寫的時候,出現缺頁,實現記憶體拷貝,
vfork,也是拷貝一份task struct,但是mm資源是共享的,執行exec,替換自己
clone,拷貝一份task struct,但是可以指定需要共享什麼資源,如mm,fs,等,有選擇性的拷貝父資源的。
pthead_create,拷貝一份task struct,但是資源和父程序完全一樣的。

3.每個程序都有一個pid,但是linux這邊真實的pid,其實是tgid,對應多個程序,getpid(),返回的是自己的pid,但是對應一個程序,多個執行緒,這getpid()返回的是tgid.

top -H 執行緒視角看 ,看到執行緒真實的pid
top 程序視角,看程序的pid

託孤,父程序退出了,但是子程序沒有退出,就會託孤, 通過pstree,找到上一級的init的程序。