日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

进程(day09)

發布時間:2023/12/20 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 进程(day09) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
進程的管理 一、進程的基礎 進程和程序的區別 每個進程有自己的pid、PCB 操作系統上運行的所有進程構成一顆樹。 如何查看這顆樹? pstree(1) 樹根進程是init pid是 1進程間的親緣關系兩種 父子關系 兄弟關系使用top(1)命令觀察進程的狀態 使用ps(1)命令也可以查看進程。二、進程的創建 父進程創建子進程父進程如何去創建子進程? 父進程調用fork(2),創建新的子進程。 #include <unistd.h> pid_t fork(void); 功能:創建一個子進程 參數: void: 返回值: 在父進程中 -1 錯誤 errno被設置 成功 在父進程中 子進程的pid被返回在子進程中 0 被返回寫時復制技術舉例說明 使用fork(2),創建新的子進程 代碼參見 fork.c三、進程的退出 1、注意return和exit(3)的區別 return只是從函數返回。結束函數的生命周期。 exit(3)結束進程的生命周期exit(3) #include <stdlib.h> void exit(int status); 功能:使進程正常終止 參數: status:指定進程的退出狀態碼。 返回值: 返回這個值 status & 0377給父進程 舉例說明 exit(3)的使用 代碼參見 exit.c目前,在bash下執行的程序,這個進程的父進程是bash。2、可以使用atexit(3)或者on_exit(3)向進程注冊函數,在進程退出的時候調用這寫注冊的函數。 從main函數中返回的時候,進程結束了嗎? 進程沒有結束。atexit(3) #include <stdlib.h> int atexit(void (*function)(void)); 功能:向進程注冊函數,在進程退出的時候被調用 參數: function:指定遺言函數返回值: 0 成功 非0 失敗注意: 1、同一個函數注冊一次就被調用一次,注冊多次就被調用多次。 2、函數注冊的順序和調用的順序相反 3、注冊的遺言函數被子進程繼承void (*function)(void)舉例說明 使用atexit向進程注冊遺言函數 代碼參見 atexit.con_exit(3) #include <stdlib.h> int on_exit(void (*function)(int , void *), void *arg); 功能:注冊一個函數在進程終止的時候被調用 參數: function:指定了遺言函數的名字 arg:指定了function函數的第二個參數,function的第一個參數是exit(3) 的退出狀態碼。返回值: 0 成功 非0 失敗void (*function)(int , void *)舉例說明 使用on_exit(3)注冊遺言函數 代碼參見 on_exit.c_exit(2)父進程創建子進程,然后父進程馬上退出,子進程還沒有終止的情況下,子進程過繼給init進程。這些子進程被稱為孤兒進程。演示孤兒進程的現象 代碼參見alone.c四、進程資源的回收 在進程終止的時候,會向父進程發送SIGCHLD信號,父進程收到這個信號以后,調用wait(2)家族的函數,去回收子進程的資源。在父進程還沒有回收子進程的資源的時候,這時候,子進程處于僵尸狀態。這時候的子進程稱為僵尸進程。舉例說明僵尸進程 代碼參見zomble.cwait(2) #include <sys/types.h> #include <sys/wait.h> pid_t wait(int *status); 功能:等待進程狀態的改變 參數: status:如果不為空,存儲子進程的信息。 這個整數可以使用宏來檢測。 WIFEXITED(status) 如果子進程正常終止,返回true。 WEXITSTATUS(status) 返回子進程的退出狀態碼。只有在上邊的宏返回真的時候,被使用 WIFSIGNALED(status) 如果子進程被信號終止,那么返回true WTERMSIG(status) 只有在上邊的宏為真的情況下使用。返回的是使子進程終止的信號編號。返回值: -1 錯誤 返回終止的子進程的pid。舉例說明 使用wait(2)回收子進程的資源。 代碼參見 wait.c補充: 如何給進程發送信號,終止進程? kill -信號編號 pid信號編號 2 3 9pid_t waitpid(pid_t pid, int *status, int options); 功能:等待子進程狀態的改變 參數: pid:指定了要等待的子進程的pid。 <-1: 等待任意子進程,子進程的組id等于pid的絕對值。 -1:等待任意子進程 0 :等待任意子進程,這寫子進程的組id等于當前進程組id。 >0:pid指定了要等待的子進程pid。status:如果不為空,存儲子進程的信息。 options:可以改變是否等待子進程的終止。 WNOHANG:如果沒有子進程退出,立即返回。 0 如果沒有子進程退出,阻塞等待子進程退出。返回值: 成功 返回子進程的pid 錯誤 -1 如果WNOHANG被指定 。0 代表等待的所有子進程都沒有終止。wait(&s)===waitpid(-1,&s,0) 進程組中有1個或更多個進程。一般情況下子進程和父進程屬于同進程組。總結: 一、進程的基礎 pstree ps top 二、進程的創建 fork(2)三、進程的退出 exit _exit atexit on_exit 孤兒進程四、回收子進程的資源wait waitpid僵尸進程

?

轉載于:https://www.cnblogs.com/Kernel001/p/7732604.html

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的进程(day09)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。