UNIX的程序終止狀態小結

2021-06-22 00:19:15 字數 1242 閱讀 4749

在unix中的程序退出狀態有三種,分別是

normal termination:一般在呼叫exit,_exit後,或別的程序kill它出現

abnormal termination:呼叫abort,出錯時強制退出時出現

stopped;在程序接受到stop訊號時退出

先來說如何捕捉子程序的退出狀態

#include 

#include

#include

void pr_exit(int status)

其中wifexited巨集用來判斷程序是否正常退出,wexitstatus用於獲取退出**編號

wifsignaled巨集用於判斷程序是否異常退出,wtermsig獲取程序終止的異常訊號編號

wifstopped巨集用於判斷stopped狀態,wstopsig取得使程序處於stopped的訊號編號

下面是用於遍歷這三個狀態的測試函式

#include 

#include

#include

#include

#include

#include

void pr_exit(int status); //上一段**的函式 int main() if (waitpid(pid,&status,wuntraced)!=pid) printf("wait error: %s\n", strerror(errno)); pr_exit(status); exit(0); }

32行呼叫了raise函式主動產生了乙個sigstop,是子程序停止,與父程序使用

kill(pid,sigstop);
的效果相同

34行的

waitpid(pid,&status,wuntraced)
wuntraced選項,是waitpid只返回處在停止狀態並且沒有被報告過的程序狀態,

wifstopped獲取其狀態

結果如下

normal termination, exit status = 7

abnormal termination, signal number = 6 (core file generated)

child stoopped, signalnumber 19

unix程序狀態轉換

3.7 unix svr4 程序管理 unix 系統v 使用了一種簡單但是功能強大的程序機制,且對使用者可見。unix 採用圖3.15b 中的模型,其中大部分作業系統在使用者程序環境中執行。unix 使用兩類程序,即系統程序和使用者程序。系統程序在核心態下執行,執行作業系統 以實現管理功能和內部處理...

《unix高階環境程式設計》程序環境 程序終止

當核心執行c程式時 使用乙個exec函式執行 在呼叫mian函式前先呼叫乙個特殊的啟動例程。可執行程式檔案將此啟動例程指定為程式的起始位址。下面是c程式啟動和終止的流程,由圖中可以知道,程序的終止根據不同的函式呼叫是不一樣的,其中 exit和 exit函式是終止程序直接進入核心,exit函式則先執行...

unix環境下程序意外退出終止

在編寫unix程式的時候,常常會出現一些錯誤,而最毀滅性的就是程序直接down掉 程序意外退出會給使用者帶來很多負面影響 同時如果除錯和日誌檔案不夠完善的話,查起錯來相當麻煩,再加上使用者環境和我們的開發環境不一樣,當你回過頭來改這個錯誤,如果日誌不夠完善,甚至需要在使用者的環境下復現錯誤,這基本上...