linux學習筆記(二)進程管理

進程管理

1、 進程

概念

進程就是處於執行的程序。包括可執行程序代碼、打開的文件、掛起的信號、
內核數據、處理器狀態,內存地址空間、一個或多個線程、全局數據段

線程

是進程中活動的對象。包括獨立的程序計數器、進程棧、一組進程寄存器

虛擬機制

虛擬處理器、虛擬內存(後面詳細講解)

進程api

fork()->exec()

進程描述符及任務結構

實踐:瞭解task_struct 結構定義

包括打開的文件,進程地址空間,掛起的信號,進程狀態。。。

分配進程描述符

實踐:瞭解thread_info,curent_thread_info()

進程描述符的存放

進程pid最大是 32768,但可以修改/proc/sys/kernel/pid_max

進程狀態

TASK_RUNNING,TASK_INTRRUPTIBLE,TASK_UNINTRRUPTIBLE,__TASK_TRACE(例如ptrace),

進程樹

init進程是根進程,其它進程都是由此的子樹

進程創建

fork() 創建子進程,exec()讀取執行文件並載入地址空間運行。

fork() 採用寫時拷貝(copy-on-write),需要的時候才拷貝。可以減少拷貝,讓父進程和子進程共享一個拷貝

vfork()

同fork()

線程

linux從本質上來說沒有線程概念。windows上線程是執行單元,而linux只是進程間共享資源的手段。

創建線程

clone(CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND,0) ;//地址空間,文件系統資源,文件描述符,信號
同fork()差不多,clone(SIGCHLD,0)
vfork() 是 clone(CLONE_VFORK|CLONE_VM|SIGCHLD,0)

標誌位列表

參數標誌 含義
CLONE_FILES 打開的文件
CLONE_FS 文件系統信息
CLONE_IDLETASK pid=0,只供idle進程使用
CLONE_NEWNS 爲子進程創建新命名空間
CLONE_PARENT 子與父擁有同一個父進程
CLONE_PTRACE 繼續調試子進程
CLONE_SETTID tid寫至用戶空間
CLONE_SETTLS TLS
CLONE_SIGHAND 共享信號
CLONE_SYSVSEM system v
CLONE_THREAD 父子進程放入相同的線程組
CLONE_VFORK 父進程準備睡眠等子進程喚醒
CLONE_UNTRACED 防止被CLONE_PTRACE
CLONE_STOP 以TASK_STOP開始進程
CLONE_SETTLS 創建新的TLS(線程本地存儲)
CLONE_CHILD_CLEARTID 清除子進程tid
CLONE_CHILD_SETTID 設置子進程tid
CLONE_PARENT_SETTID 設置父進程tid
CLONE_VM 共享地址空間

內核線程創建

kthread_run(),kthread_stop()

查找新的父進程

如果父進程先被關閉,就需要給子進程查找其它父進程。find_new_reaper(father)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章