linux高級編程(進程)(2)

父子進程的關系:

子進程是父進程的副本。子進程獲得父進程數據段,堆,棧,正文段共享。(子分配了一塊新的內存,但是代碼段指向父進程,也就是說不論幾個子進程都只有一個code段)
?? ?
?? ?在fork之后,一般情況那個會先運行,是不確定的。如果非要確定那個要先運行,需要IPC機制。
?? ?
?? ?區別:
?? ?1)fork的返回值
?? ?2)pid不同

進程的終止:8種情況

? ? 1)main 中return
?? ?2)exit(), c庫函數,會執行io庫的清理工作,關閉所有的流,以及所有打開的文件,調用清理函數(atexit)。
?? ?(int atexit(void (* function) (void)))(回調函數,用于調用程序員自己寫的清理函數)?
?? ?3)_exit,_Exit 會關閉所有的已經打開的文件,不執行清理函數。
?? ?4) ?主線程退出
?? ?5)主線程調用pthread_exit(使單個線程退出)
?? ?6)abort()(強行終止線程,作為異常終止)
?? ?7)signal ? kill pid(外部信號,例如kill)
?? ?8)最后一個線程被pthread_cancle(系統的線程取消請求,但其實不等于線程結束)

exit ? ? 庫函數

? ? 退出狀態,終止的進程會通知父進程,自己使如何終止的。如果是正常結束(終止),則由exit傳入的參數。如果是異常終止,則有內核通知異常終止原因的狀態。任何情況下,負進程都能使用wait,waitpid獲得這個狀態,以及資源的回收。
?? ?void exit(int status)?
?? ?exit(1);
?? ?功能:
?? ??? ?讓進程退出,并刷新緩存區
?? ?參數:
?? ??? ?status:進程退出的狀態
?? ?返回值:
?? ??? ?缺省
?? ?
?? ?EXIT_SUCCESS?? ?0
?? ?EXIT_FAILURE? ? 非0(1~128,c語言錯誤列表共有128個)

?? ?return ?當該關鍵字出現在main函數中時候可以結束進程
?? ??? ??? ?如果在其他函數中則表示結束該函數。
?? ?exit -> 刷新緩存區 -> atexit注冊的退出函數 -> _exit

atexit(回調函數)

int atexit(void (*function)(void));
?? ?功能:
?? ??? ?注冊進程退出前執行的函數(也就是參數function,需要程序員自己構建)
?? ?參數:
?? ??? ?function:函數指針
?? ??? ??? ?指向void返回值void參數的函數指針
?? ?返回值:
?? ??? ?成功返回0
?? ??? ?失敗返回非0

?? ?當程序調用exit或者由main函數執行return時,所有用atexit
?? ?注冊的退出函數,將會由注冊時順序倒序被調用

wait:

?? ?pid_t wait(int *status);
功能:該函數可以阻塞等待任意子進程退出
? ? ? 并回收該進程的狀態。
?? ? ?一般用于父進程回收子進程狀態。

參數:status 進程退出時候的狀態
?? ? ?如果不關心其退出狀態一般用NULL表示
?? ? ?如果要回收進程退出狀態,則用WEXITSTATUS回收。

返回值:成功 回收的子進程pid
?? ??? ?失敗 -1;

退出狀態:

WIFEXITED(status) ?是不是正常結束

WEXITSTATUS(status) 使用這個宏去接收返回值(exit函數的返回值)

WIFSIGNALED(status) 是不是收到了信號而終止的

WTERMSIG(status)如果是信號終止的,那么是幾號信號。

(比如使用終端的kill命令,kill -9 pid號,此時的這個宏得到的值應該是9)

以上退出狀態兩個兩個一組使用:

        int status;pid_t recycle_pid = wait(&status);if(WIFEXITED(status)){  printf("child normal terminal,recycle pid %d , exit value %d\n",recycle_pid,WEXITSTATUS(status));}if(WIFSIGNALED(status)){printf("child terminal by signal ,rrecycle pid %d, signal num %d \n",recycle_pid,WTERMSIG(status));}

注:

? ? 1)如果所有的子進程都在運行,在阻塞
?? ?2)如果一個子進程終止,正在等待的父進程則獲得終止狀態,獲得子進程的狀態后,立刻返回。
?? ?3)如果沒有子進程,則立即出錯退出。
?

waitpid:

pid_t waitpid(pid_t pid, int *status, int options);(功能更強大的wait)
?? ?< -1 回收指定進程組內的任意子進程
?? ?-1 回收任意子進程,組內外
?? ?0 回收和當前調用waitpid一個組的所有子進程,組內
?? ?> 0 回收指定ID的子進程


?? ? waitpid (-1,a,0) ?== wait(a);(阻塞等待回收組內外任意子進程)


?? ? status 子進程退出時候的狀態,//一般使用非阻塞,因為如果阻塞的話,無法及時接收到數據
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ???如果不關注退出狀態用NULL;
?? ? ?options 選項:(是否阻塞)
?? ? ??? ??? ??? ?0 ?表示回收過程會阻塞等待 ?
?? ??? ??? ??? ?WNOHANG 表示非阻塞模式回收資源。
?? ?返回值:成功 返回接收資源的子進程pid
?? ??? ?失敗 ?-1
?? ??? ?0,

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/37978.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/37978.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/37978.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SpringCloud中復制模塊然后粘貼,文件圖標缺少藍色方塊

再maven中點擊&#xff0b;號&#xff0c;把當前pom文件交給maven管理即可

RabbitMq的基礎及springAmqp的使用

RabbitMq 官網:RabbitMQ: One broker to queue them all | RabbitMQ 什么是MQ&#xff1f; mq就是消息隊列&#xff0c;消息隊列遵循這先入先出原則。一般用來解決應用解耦&#xff0c;異步消息&#xff0c;流量削峰等問題&#xff0c;實現高性能&#xff0c;高可用&#xf…

容器技術-docker2

容器化技術Docker Docker介紹 官網&#xff1a; docker.io docker.com 公司名稱&#xff1a;原名dotCloud 14年改名為docker 容器產品&#xff1a;docker 16年已經被更名為Moby docker-hub docker.io docker容器歷史 和虛擬機一樣&#xff0c;容器技術也是一種資源隔…

java基于ssm+jsp 二手手機回收平臺系統

1前臺首頁功能模塊 二手手機回收平臺系統&#xff0c;在系統首頁可以查看首頁、手機商城、新聞資訊、我的、跳轉到后臺、購物車等內容&#xff0c;如圖1所示。 圖1前臺首頁功能界面圖 用戶注冊&#xff0c;在用戶注冊頁面可以填寫賬號、密碼、姓名、手機、郵箱、照片、地址、…

深度解析RocketMq源碼-消息推送、持久化、消費全流程

1.緒論 前面的幾篇文章都剖析了broker的存儲文件。那么生產者發送一條消息到達broker過后是如何處理的&#xff0c;這條消息結果什么處理過后&#xff0c;消費者才能夠消費這條消息。接下來&#xff0c;帶我們將仔細剖析一下一條消息從生產者生產消息&#xff0c;到到達broker…

在線字節大端序小端序轉換器

具體請前往&#xff1a;在線字節大端序小端序轉換器

操作系統期末復習真題四

一、前言&#x1f680;&#x1f680;&#x1f680; 小鄭在刷題的過程中幫大家整理了一些常見的考試題目&#xff0c;以及易于遺忘的知識點&#xff0c;希望對大家有所幫助。 二、正文?????? 1.OS的不確定性是指(ABC)。 A.程序的運行次序不確定 B.程序多次運行的時間不…

獨立開發者系列(13)——示例理解面向對象與過程

專業術語晦澀難懂&#xff0c;特別是當你沒有寫過稍微大點的系統的時候&#xff0c;你要理解這里面的區別很難。 從最簡單的早期我們學習開始&#xff0c;我們除了練習hello world掌握了入門函數之后&#xff0c;基本都再練習算法。比如水仙花數的獲取&#xff0c;冒泡排序&…

Redis的使用和原理

目錄 1.初識Redis 1.1 Redis是什么&#xff1f; 1.2 Redis的特性 1.2.1 速度快 1.2.2 基于鍵值對的數據結構服務器 1.2.3 豐富的功能 1.2.4 簡單穩定 1.2.5 持久化 1.2.6 主從復制 1.2.7 高可用和分布式 1.3 Redis的使用場景 1.3.1 緩存 1.3.2 排行榜系統 1.3.3 計數器應用 1.3…

【計算機網絡】HTTPS——更安全的HTTP通信(個人筆記)

學習日期&#xff1a;2024.6.26 內容摘要&#xff1a;HTTPS存在的意義、特點和工作方式 HTTP的缺點——易竊聽、偽裝、篡改 在Web及網絡基礎中&#xff0c;我們已經知道了網頁是怎么打開的&#xff0c;HTTP確實是一個相當優秀和方便的協議&#xff0c;但HTTP也有很多不足&…

【操作系統期末速成】 EP04 | 學習筆記(基于五道口一只鴨)

文章目錄 一、前言&#x1f680;&#x1f680;&#x1f680;二、正文&#xff1a;??????2.1 考點七&#xff1a;進程通信2.2 考點八&#xff1a;線程的概念2.3 考點九&#xff1a;處理機調度的概念及原則2.4 考點十&#xff1a;調度方式與調度算法 一、前言&#x1f680;…

排序(冒泡排序、選擇排序、插入排序、希爾排序)-->深度剖析(一)

歡迎來到我的Blog&#xff0c;點擊關注哦&#x1f495; 前言 排序是一種基本的數據處理操作&#xff0c;它涉及將一系列項目重新排列&#xff0c;以便按照指定的標準&#xff08;通常是數值大小&#xff09;進行排序。在C語言中&#xff0c;排序算法是用來對元素進行排序的一系…

FPGA 690T NVME高速存儲設計

高速存儲設計會有各種需求的考慮&#xff0c;那么對應的方案也不完全相同&#xff0c;這篇文章出一期純FPGA實現的高速存儲方案。用純fpga實現高速存儲板卡有易國產化&#xff0c;功耗低和體積小等特點&#xff0c;缺點就是靈活性不是很強&#xff0c;實現標準ext4和nfs文件系統…

計算機的錯誤計算(十六)

摘要 計算機的錯誤計算&#xff08;十五&#xff09;中歷史事件給我們的啟示或警示。 計算機的錯誤計算&#xff08;十五&#xff09;介紹了歷史上發生的一些事件。從這些事件我們可以得到一些啟示或警示。 若不是油氣平臺的沉沒&#xff0c;設計者會得出精度低了嗎&#x…

信息盲盒系統設計

信息盲盒系統是一種結合了隨機性和趣味性的信息傳遞和接收方式&#xff0c;類似于實體盲盒的概念&#xff0c;但在數字領域應用。這種系統通常用于增加用戶參與度、提升用戶體驗或作為營銷策略的一部分。設計一個信息盲盒系統需要考慮以下幾個關鍵要素&#xff1a; 1. 定義目標…

數據倉庫建模基礎理論-01-為什么需要數據建模?

一、什么是數據模型&#xff1f; 數據模型是數據庫的基礎結構&#xff0c;用于描述和組織數據的方式。 它不僅是數據庫的底層結構&#xff0c;還是一個概念性工具&#xff0c;幫助理解數據的含義和關系。 數據模型包括數據本身、數據之間的關系、數據的語義&#xff08;含義和…

C++ | Leetcode C++題解之第206題反轉鏈表

題目&#xff1a; 題解&#xff1a; class Solution { public:ListNode* reverseList(ListNode* head) {if (!head || !head->next) {return head;}ListNode* newHead reverseList(head->next);head->next->next head;head->next nullptr;return newHead;} …

在Ubuntu 16.04上安裝和配置GitLab的方法

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到網站。 簡介 GitLab CE&#xff08;Community Edition&#xff09;是一個開源應用程序&#xff0c;主要用于托管 Git 倉庫&#xff0c;并提供額…

AI在創造還是毀掉音樂之論文

AI在創造還是毀掉音樂&#xff1f; 簡介&#xff1a;最近一個月&#xff0c;輪番上線的音樂大模型&#xff0c;一舉將素人生產音樂的門檻降到了最低&#xff0c;并掀起了音樂圈會不會被AI徹底顛覆的討論。短暫的興奮后&#xff0c;AI產品的版權歸屬于誰&#xff0c;創意產業要…

一秒記單詞:音通義通,一秒牢記

一秒記單詞&#xff0c;從小學到高中&#xff0c;一秒牢記 一、小學生記單詞&#xff0c;快速突破 1.1 好的開始&#xff0c;是成功的一半 sun n.太陽 【通】尚 moon n.月亮 【通】母恩 mother n.母親&#xff0c;媽 【通】媽汁 sea n.海&#xff0c;大海 【通】細 sand …