Linux中相关知识(atexit(),fork(),粘滞位)
1、atexit()函數
? ? ? 函數名: atexit
頭文件:#include<stdlib.h>
功 能: 注冊終止函數(即main執行結束后調用的函數)
用 法: int atexit(void (*func)(void));
注意:一個進程可以登記32個函數,這些函數由exit自動調用,這些函數被稱為終止處理函數,atexit函數可以登記這些函數。 exit調用終止處理函數的順序和atexit登記的順序相反,如果一個函數被多次登記,也會被多次調用。
程序例:
#include <stdio.h>
#include <stdlib.h>
void exit1()
{
? ?printf("Exit1 called\n");
}
void exit2()
{
? printf("Exit2 called\n");
} int main(void){
atexit(exit1);
atexit(exit2);
return 0;
}
輸出:Exit2 called
Exit1 called
由此結果可知:注冊函數的順序與調用函數的順序相反
進程的終止方式:
有8種方式使進程終止,其中前5種為正常終止,它們是
1:從 main 返回
2:調用 exit
3:調用 _exit 或 _Exit
4:最后一個線程從其啟動例程返回
5:最后一個線程調用 pthread_exit
異常終止有3種,它們是
6:調用 abort
7:接到一個信號并終止
8:最后一個線程對取消請求做出響應
2、粘滯位
? ? Sticky 位是一個訪問權限標志位,可以用來標示文件和路徑。最常見的用法在目錄上設置粘滯位,如此以來,只有目錄內文件的所有者或者root才可以刪除或移動該文件。如果不為目錄設置粘滯位,任何具有該目錄寫和執行權限的用戶都可以刪除和移動其中的文件。實際應用中,粘滯位一般用于/tmp目錄,以防止普通用戶刪除或移動其他用戶的文件。
普通文件的sticky位會被linux內核忽略,??
目錄的sticky位表示這個目錄里的文件只能被owner和root刪除??
比如:添加粘滯位到路徑/usr/local/tmp,
1.??????chmod +t /usr/local/tmp
2.??????chmod?1777 /usr/local/tmp
3、fork()函數
fork函數
#include <unistd.h>
pid_t fork(void);
一個現有進程可以調用fork創建一個新進程。
返回值: 子進程中返回0,父進程中返回子進程ID,出錯返回-1。
注意:子進程是父進程的副本。例如:子進程獲得父進程數據空間、堆和棧的副本(主要是數據結構的副本)。 父子進程不共享這些存儲空間部分。父子進程共享正文段。
分析一下代碼:
?
?
?
?
分析
?
轉載于:https://www.cnblogs.com/Blog-day/p/My_Blog_Days1-12.html
總結
以上是生活随笔為你收集整理的Linux中相关知识(atexit(),fork(),粘滞位)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: nfs的挂载方法
- 下一篇: Linux 下C++编写