Linux 之exit() 進程退出函數
進程的退出
linux下進程數量太多會導致系統崩潰,在使用完一個進程之后要及時終止它。
進程退出一般有三種方法:
1、在main函數中使用 return關鍵字 ,使用 return 后系統會調用 exit()函數來終止進程。
2、手動調用 exit() 來終止進程。
3、調用 _exit() 來終止進程。
exit() 和 _exit() 函數
頭文件
#include<unistd.h>
#include<stdlib.h>
1
2
原型
void _exit(int status);
void exit(int status);
1
2
_exit()
os立刻把管理內存的結構體、虛擬內存釋放掉。
exit()
不會馬上干掉結構體,先看先看當前進程有沒有文件緩存區,若有則會先處理緩存區中的數據,然后銷毀結構體。
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
int main()
{
pid_t res;
res = fork();
if(res == -1)
{
printf("fork err\r\n");
}
if(res == 0)
{
//不加回車換行符,讓輸出的字符串數據保留在io緩存區里面
printf("son");
//退出狀態設置為0,表示正常退出。
_exit(0);
}
else if(res > 0)
{
printf("parent");
exit(0);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
編譯后執行結果
jl@jl-virtual-machine:~/test$ ./a.out
parentjl@jl-virtual-machine:~/test$
jl@jl-virtual-machine:~/test$
1
2
3
注意第二行開頭的parent,因為在父進程中用的是 exit() 函數,在進程退出前會先處理完緩存區中的數據,所以緩存區中滯留的parent在推出前被打印出來。
使用\r\n輸出字符串則會被立即打印。
補充
C語言中的exit()函數與 return 對比
————————————————
原文鏈接:https://blog.csdn.net/engineer0/article/details/109213577
*博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。
linux操作系統文章專題:linux操作系統詳解(linux不再難懂)