Linux 進程等待

在2號手冊里查wait()。wait()等待任意一個子進程的狀態。

wait()等待成功會返回該子進程的id,返回失敗會返回-1:

小實驗? ? ?子進程的退出碼

子進程執行work(),父進程wait子進程。

子進程跑完5秒之后就exit(0)退出。

子進程跑的時候是run狀態

當子進程跑完,父進程接收到子進程的狀態,即僵尸狀態,然后父進程會跑10秒,10秒過后父進程也結束進程。

代碼如下:

#include<sys/types.h>
#include<sys/wait.h>
#include<unistd.h>
#include<stdlib.h>
#include<stdio.h>void work()
{int cnt=5;    while(cnt--)    {    printf("子進程開始啟動:pid:%d,ppid:%d,cnt:%d\n",getpid(),getppid(),cnt);    sleep(1);    }    
}    int main()    
{    sleep(10);    pid_t id=fork();    if(id==0)      //子進程{    work();                                                                                                                                        exit(0);    }    else //父進程{pid_t ret=wait(NULL);    if(ret==id)    {printf("wait success,pid:%d\n",getpid());}
}sleep(10);return 0;}
~

結論:子進程在跑,父進程就要進行阻塞等待。等子進程跑完,父進程才wait sucess,總結如下:

waitpid()

用法:

?三個參數,重點講一下? stauts

status是輸出型參數,所謂輸出型參數需要用戶自己定義變量,然后傳參,操作系統接收這個參數經過操作之后再返回給用戶級變量

如下,定義一個int型變量,變量名為status,取地址傳參,然后等如果父進程等待子進程之后就把status的值打印出來看看:

結果如下:

status是一個整形,有32位,分為高八位和低八位:

?如果進程正常退出,就返回低八位的0,高八位的退出狀態。

如果異常退出,就返回低七位的終止信號,為什么不是低八位呢? 低八位的第一位是core dump標志,所以只返回低七位。

如下,我們把子進程的退出碼改為exit(10),再讓父進程去等待:
運行結果:status為2560。

因為退出碼10的二進制為1010,又因為異常所以在高八位,如下:

轉化為十進制就是2560;








exit sign為stautus的信號退出碼,exit code為status的進程退出碼:

printf("wait success,pid:%d,status返回碼:%d, exit sign:%d    ,exit code:%d\n",getpid(),ret,status&0x7F,(status>>8)&0xFF);      

為什么exit sign是 status&0x7F?

因為信號退出碼在低七位? 7是3個1,F是4個1,合起來就是7個1,&7個1就把低七位保留,其他位全變0

同理,exit code為高八位??

運行結果:

退出信號為0,退出碼為10、

如果我們把子進程的退出碼改為正常退出碼,即0,再跑,就會退出信號為0,退出碼為0:

我們給子進程寫一個除0錯誤:

?退出信號會顯示8:

我們讓子進程出現空指針錯誤:

退出信號為11:11就是段錯誤:

第二個實驗? 手動退出

我們讓子進程不要退出了,一直運行:

此時運行之后子進程就會一直跑,然后我們輸入kill -9 pid終止進程,進程退出信號會顯示9:

小結

父進程得到子進程的退出結果實際上是調用stautus這個整型變量,可以用一個指針解引用即可得到status。

WIFEXITED? ??WEXITSTAUS

?用這兩個宏就我們就可以不用關注返回值,宏會自己獲取子進程的返回值。

調用WIFEXITED獲取是否正常退出,如果為假,直接輸出else里面的異常。

如果為真,就調用WEXITSTAUS獲取子進程的退出碼并打印出來。

我們可以先搞一個異常出來,把子進程死循環:

運行:

我們再把子進程改為正常的再運行:

非阻塞輪巡/非阻塞等待

與阻塞式等待相對。

阻塞式等待父進程什么事情也不干,就在那等著子進程返回值。

阻塞式等待可以干自己的事情,等子進程返回的時候接收一下就可以了。

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

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

相關文章

GCANet_Gated context aggregation network for image dehazing and deraining

2019、中科大港科、有代碼 Chen D, He M, Fan Q, et al. Gated context aggregation network for image dehazing and deraining[C]//2019 IEEE winter conference on applications of computer vision (WACV). IEEE, 2019: 1375-1383. GitHub - cddlyf/GCANet: Implementation…

丟掉破解版,官方免費了!!!

哈嘍&#xff01;大家好。 幾天不見&#xff0c;今天給大家帶來一款海外的神器&#xff0c;官方宣布完全免費&#xff0c;但僅限于個人與教育用途&#xff0c;切勿商用噢&#xff01; 不要看這個軟件名字普普通通&#xff0c;實際上內蘊乾坤&#xff01; 接下來看我給大家炫一…

隊列的實現和OJ練習(c語言)

目錄 概念 隊列的實現 利用結構體存放隊列結構 為什么單鏈表不使用這種方法&#xff1f; 初始化隊列 小提示&#xff1a; 隊尾入隊列 隊頭出隊列 獲取隊頭元素 獲取隊尾元素 獲取隊列中有效元素個數 檢測隊列是否為空 銷毀隊列 最終代碼 循環隊列 隊列的OJ題 …

元素清空操作clear與選擇操作check

元素清空操作clear與選擇操作check clear() 作用 清空輸入框的所有內容.clear() 等價于 .type("{selectall}{backspace}") 語法 .clear() .clear(options)option選項 元素選中操作check與uncheck check 語法 // 所有匹配到的選擇框都會被選中一遍 .check()/…

CISP模擬考試(二)

免責聲明 文章僅做經驗分享用途,利用本文章所提供的信息而造成的任何直接或者間接的后果及損失,均由使用者本人負責,作者不為此承擔任何責任,一旦造成后果請自行承擔!!! 1.DDoS攻擊主要目的是: A.破壞完整性 B.破壞機密性 C.破壞可用性 D.破壞不可抵賴性 答案:…

三、防火墻-源NAT

學習防火墻之前&#xff0c;對路由交換應要有一定的認識 源NAT基本原理1.1.NAT No-PAT1.2.NAPT1.3.出接口地址方式&#xff08;Easy IP&#xff09;1.4.Smart NAT1.5.三元組 NAT1.6.多出口場景下的源NAT 總結延伸 ——————————————————————————————…

C語言prim算法求最小生成樹

Prim算法是一種用于尋找無向帶權圖的最小生成樹的算法。該算法的基本思想是從一個源點開始&#xff0c;逐步向外擴展生成樹&#xff0c;每次找到與當前生成樹最近的未被訪問的頂點&#xff0c;并將其加入到生成樹中&#xff0c;直到所有頂點都被加入到生成樹中為止。 具體來說…

部署你的第一個應用

&#x1f5d3;?實驗環境 OS名稱Microsoft Windows 11 家庭中文版系統類型x64-based PCDocker版本Docker version 24.0.6, build ed223bcminikube版本v1.32.0 &#x1f913;FastAPI 構建應用 #基于fastapi快速創建一個項目 rkun1LAPTOP-TUS5FU0D MINGW64 / $ mkdir k8s-appr…

1688 API接口測試指南

本文為您提供1688 API接口的測試指南。我們將介紹1688 API的基本概念&#xff0c;詳解測試步驟&#xff0c;并為您提供一系列的最佳實踐&#xff0c;以確保您在與1688平臺進行API交互時能夠獲得最佳的效果和穩定性。 一、了解1688 API 1688 API是1688平臺為開發者提供的一套用…

數學建模之擬合及其代碼

發現新天地&#xff0c;歡迎訪問Cr不是鉻的個人網站 引言 與插值問題不同&#xff0c;在擬合問題中不需要曲線一定經過給定的點。擬合問題的目標是尋求一個函數&#xff08;曲線&#xff09;&#xff0c;使得該曲線在某種準則下與所有的數據點最為接近&#xff0c;即曲線擬合…

基于跳蛛算法優化概率神經網絡PNN的分類預測 - 附代碼

基于跳蛛算法優化概率神經網絡PNN的分類預測 - 附代碼 文章目錄 基于跳蛛算法優化概率神經網絡PNN的分類預測 - 附代碼1.PNN網絡概述2.變壓器故障診街系統相關背景2.1 模型建立 3.基于跳蛛優化的PNN網絡5.測試結果6.參考文獻7.Matlab代碼 摘要&#xff1a;針對PNN神經網絡的光滑…

7_畫圖常用代碼

plt.figure(dpi200) # 設置 dpi 為 200&#xff08;可以根據需要調整這個值&#xff09;

數據結構學習筆記——多維數組、矩陣與廣義表

目錄 一、多維數組&#xff08;一&#xff09;數組的定義&#xff08;二&#xff09;二維數組&#xff08;三&#xff09;多維數組的存儲&#xff08;四&#xff09;多維數組的下標的相關計算 二、矩陣&#xff08;一&#xff09;特殊矩陣和稀疏矩陣&#xff08;二&#xff09;…

從權限跳轉看Activity的data android:scheme

在應用申請懸浮窗權限的時候&#xff0c;可以跳轉到相應的設置界面&#xff0c;并且自動切換到應用的條目&#xff0c;高亮顯示一下&#xff0c; android懸浮窗權限怎么申請 在Android中&#xff0c;要申請懸浮窗權限&#xff0c;需要以下步驟&#xff1a; 在 AndroidManifes…

hp惠普Victus Gaming Laptop 15-fa1025TX/fa1005tx原裝出廠Win11系統ISO鏡像

光影精靈9筆記本電腦原廠W11系統22H2恢復出廠時開箱狀態一模一樣 適用型號&#xff1a;15-fa1003TX&#xff0c;15-fa1005TX&#xff0c;15-fa1007TX&#xff0c;15-fa1025TX 鏈接&#xff1a;https://pan.baidu.com/s/1fBPjed1bhOS_crGIo2tP1w?pwduzvz 提取碼&#xff1a…

每天一道算法題(十一)——滑動窗口最大值_困難(中等)

文章目錄 1、問題2、示例3、解決方法&#xff08;1&#xff09;方法1——雙指針 總結 1、問題 給你一個整數數組 nums&#xff0c;有一個大小為 k 的滑動窗口從數組的最左側移動到數組的最右側。你只可以看到在滑動窗口內的 k 個數字。滑動窗口每次只向右移動一位。 返回 滑動窗…

c++ 函數的申明

1 一個cpp中 兩種情況 1.1 定義 使用 1.2 聲明 使用 定義 2 按 定義 后 直接使用的順序 不用 聲明 函數 #include <iostream> using namespace std;int max(int a, int b) {int max a>b?a:b;return max; }int main() {int a 1;int b 2;cout << max(a, b…

解決vue中引入天地圖顯示不全問題,設置setTimeout即可解決!

index.html中引入天地圖api <script type"text/javascript" src"https://api.tianditu.gov.cn/api?v4.0&tk你的key"></script>map.vue中初始化天地圖 //初始化天地圖 initTMap() {const T window.T;// 3.初始化地圖對象this.tMap new…

flink1.13.6版本的應用程序(maven版)

問題 想要一個指定flink版本的java計算任務hello world最簡工程。 解決 mvn archetype:generate \-DarchetypeGroupIdorg.apache.flink \-DarchetypeArtifactIdflink-quickstart-java \-DarchetypeVersion1.13.6這里直接使用官方mave模版工程&#xff0c;指…

系統架構設計:13 論基于構件的軟件開發

論基于構件的軟件開發 軟件系統的復雜性不斷增長、軟件人員的頻繁流動和軟件行業的激烈竟爭迫使軟件企業提高軟件質量、積累和固化知識財富,并盡可能地縮短軟件產品的開發周期。 集軟件復用、分布式對象計算、企業級應用開發等技術為一體的“基于構件的軟件開發”應運而生,…