首頁  >  文章  >  系統教程  >  Linux 下結束進程的方法:正常與異常終止詳解

Linux 下結束進程的方法:正常與異常終止詳解

王林
王林原創
2024-07-18 22:11:07592瀏覽

Linux 下结束进程的方法:正常与异常终止详解

在前兩章中我們了解了創建進程,這一章我們來了解下,在linux下如何結束進程。

在linux中,有3種正常結束進程的方式和2種異常中止的方式:

1、正常結束:

a、在main函數中呼叫return。這個相當於呼叫exit。

b、呼叫exit函數,依這個函數在ANSIC的定義,呼叫時將執行所有註冊過的exit句柄,關掉所有的標準I/O流,而且不處理檔案描述子、多進程(父進程與子行程)、作業等,因此對linux系統而言並不健全。

c、呼叫_exit函數。 exit被_exit呼叫linux培訓,關掉一些linux特有的退出句柄。

2、異常中止

linux保存退出命令行_linux退出保存文件_linux下退出不保存

a、呼叫abort。這個似乎是第二種情形的特例,由於它形成一個SIGABRT訊號。

b、程式收到特定訊號,這個訊號可以是流程自己形成的(如abort函數),也可以來自其他行程或核心。諸如:程序試圖存取越界的顯存位址或則除數為零時linux模擬,核心就會形成訊號中斷程序。

不管用何種方法結束進程,最終都要執行核心的同一段程式碼。這段程式碼關掉該行程開啟的所有檔案描述符,私訪佔用的顯存等。

接出來我們來了解下exit和_exit函數

這兩個函數在不同的頭檔:exit在stdlib.h中,_exit在unistd.h中

linux退出保存文件_linux下退出不保存_linux保存退出命令行

她們的具體調用方式如下:

voidexit(int__status)

void_exit(int__status)

參數status為退出的狀態。

我們來看看下邊這兩段程式碼:

linux保存退出命令行_linux下退出不保存_linux退出保存文件

圖1

linux下退出不保存_linux退出保存文件_linux保存退出命令行

圖2

linux退出保存文件_linux保存退出命令行_linux下退出不保存

linux保存退出命令行_linux下退出不保存_linux退出保存文件

圖3

linux保存退出命令行_linux退出保存文件_linux下退出不保存

圖4

圖1的程式碼缺乏了n造成了沒有影印出測試結束的句子,這是由於printf若果不加n,則資訊是不會立即複印下來的,而_exit不會強制輸出緩衝區中的數據,即透過printf/fprintf這類呼叫形成的仍未寫入裝置仍在緩衝中的資料就會遺棄,_exit時複印訊息會遺失,而exit不會。假如有n,則直接影印下來,此時exit/_exit無差別

兄妹進程中止的先後次序不同會形成不同的結果

1.父進程先於子進程中止:

此種情況就是我們所說的孤兒進程。當父行程先退出時,系統會讓init行程接管子程序。

2.子行程先於父行程中止,而父行程又沒有呼叫wait函式

此種情況子進程步入僵死狀態,而且會始終保持下去直至系統重啟。子進程處於僵死狀態時linux下退出不保存,核心只保存進程的一些必要資訊以備父進程所需。此時子進程仍佔有資源,同時也降低了系統可以創造的最大進程數。

哪些是僵死狀態呢?

一個早已中止、但是其父進程仍未對其進行善後處理(獲取中止子進程的有關信息,釋放它仍佔有的資源)的進程被稱為僵死進程(zombie)。

3.子進程先於父進程中止linux下退出不保存,而父進程調用了wait函數

此時父進程會等待子進程結束。

以上是Linux 下結束進程的方法:正常與異常終止詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn