日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

c語言退出程序命令exit c語言exit函數(shù)用法

使用C/C++語言在UNIX或者Linux系統(tǒng)下編程,應(yīng)該都會遇到很多的進程退出相關(guān)的函數(shù) 。有些是C標準庫提供的函數(shù),有些是系統(tǒng)調(diào)用,有些又是某個系統(tǒng)所獨有的系統(tǒng)調(diào)用或者函數(shù),并且命名上也極為類似,給人眼花繚亂的感覺 。
【c語言退出程序命令exit c語言exit函數(shù)用法】這篇文章嘗試去總結(jié)下其中常見的那幾個系統(tǒng)調(diào)用和函數(shù),并通過一個例子來展示下基本用法 。
進程退出系列系統(tǒng)調(diào)用/函數(shù)

  • _exit
_exit(2) 屬于 POSIX 系統(tǒng)調(diào)用,適用于 UNIX 和 Linux 系統(tǒng) 。調(diào)用該系統(tǒng)調(diào)用后會導致當前進程直接退出,且函數(shù)不會返回 。內(nèi)核會關(guān)閉該進程打開的文件描述符,若還存在子進程,則交由1號進程領(lǐng)養(yǎng),再向進程的父進程發(fā)送 SIGCHLD 信號 。
函數(shù)原型如下:
#include <unistd.h>noreturn void _exit(int status);參數(shù)列表
– `status`: 進程退出碼
返回值
無返回值
  • exit_group
exit_group(2) 是 Linux 系統(tǒng)所獨有的系統(tǒng)調(diào)用,調(diào)用后會使得進程的所有線程都退出 。從 glibc 2.3 開始,_exit 實際上是對 exit_group 系統(tǒng)調(diào)用的包裝 。因此,在Linux系統(tǒng)上兩者是等價的 。
函數(shù)原型如下:
#include <linux/unistd.h>void exit_group(int status);參數(shù)列表
– `status`: 進程退出碼
返回值
無返回值
  • _Exit
_Exit(3) 是C標準庫函數(shù),功能上等價于 _exit 系統(tǒng)調(diào)用,由 C99 引入 。由于是標準庫提供的函數(shù),在跨平臺移植性上比 _exit 好,建議優(yōu)先使用 。
函數(shù)原型如下:
#include <stdlib.h>void _Exit(int status);參數(shù)列表
– `status`: 進程退出碼
返回值
無返回值
  • exit
exit(3) 是C標準庫函數(shù),也是最常用的進程退出函數(shù) 。它區(qū)別于 _exit、_Exit 的地方在于,除了使進程退出(也是通過調(diào)用 _exit 系統(tǒng)調(diào)用實現(xiàn)的)這個核心功能外,它還會執(zhí)行一些前置動作:
  1. 逐個執(zhí)行用戶注冊的自定義清理函數(shù)(通過 atexit 或者 on_exit 函數(shù)注冊)
  2. 刷新標準I/O流緩沖區(qū)并關(guān)閉
  3. 刪除由標準庫函數(shù) tmpfile 創(chuàng)建的臨時文件
函數(shù)原型如下:
#include <stdlib.h>noreturn void exit(int status);參數(shù)列表
– `status`: 進程退出碼
返回值
無返回值
  • atexit
atexit(3) 是C標準庫函數(shù),用于注冊進程退出清理函數(shù) 。該函數(shù)在使用時有以下幾個注意點:
  1. 清理函數(shù)的執(zhí)行順序與注冊順序相反 。
  2. 當進程收到致命信號時,注冊的清理函數(shù)不會被執(zhí)行 。
  3. 當進程調(diào)用 _exit(或者 _Exit)時,注冊的清理函數(shù)不會被執(zhí)行 。
  4. 當執(zhí)行到某個清理函數(shù)時,若收到致命信號或者清理函數(shù)內(nèi)調(diào)用了 _exit(或者 _Exit),那么該清理函數(shù)不會返回并且后續(xù)的其它清理函數(shù)也會被丟棄 。
  5. 當同一個清理函數(shù)被注冊多次,那么正常情況下該清理函數(shù)也會被執(zhí)行相應(yīng)的次數(shù) 。
  6. 父進程在調(diào)用 fork 前注冊了清理函數(shù),那么這些清理函數(shù)也會被子進程所繼承;若子進程后續(xù)又調(diào)用了 exec 系列函數(shù),那么子進程所繼承的清理函數(shù)則會被移除 。
  7. 單個進程能夠注冊的清理函數(shù)的數(shù)量不會少于32個 。
函數(shù)原型如下:
#include <stdlib.h>int atexit(void (*function)(void));參數(shù)列表
– `function`: 用戶自定義的進程退出清理函數(shù) 。
返回值
成功返回0,非0值則表示失敗 。
  • on_exit
功能上與 atexit 函數(shù)類似的,還有on_exit(3)函數(shù) 。它是 Linux 系統(tǒng)下所獨有的函數(shù),用于注冊進程退出清理函數(shù),區(qū)別于 atexit 函數(shù)的是,它支持了額外的入?yún)?。

推薦閱讀