多程序程式設計函式: ===》fork函式
#include
pid_t fork(void);
功能:該函式可以動態的生成乙個同名程序。
父子程序具有相同的邏輯和空間,類似於轉殖程式。
但是父子程序執行的位置不同,子程序永遠從fork函式之後執行。
如果要區分父子程序的執行邏輯,可以根據函式返回值來判斷
約定 fork返回值為0 的是子程序執行邏輯
fork返回值》0 的是父親程序執行邏輯
引數:無
返回值:
大於0 表示子程序pid號
等於0 表示子程序
小於0 表示異常
pid_t getpid(void);
功能: 該函式可以獲取當前程序自身的pid號
返回值:就是當前程序pid號
pid_t getppid(void);
功能:該函式可以獲取當前程序的父程序的pid號
返回值:就是父程序pid號
#include
#include
intmain
(int argc,
char
*ar**)
if(pid ==0)
if(pid <0)
while(1
)sleep(1
);return0;
}
多程序的控制:
1、程序的退出
return 關鍵字:在main函式中,表示程序結束。
在非main函式中,表示當前函式結束呼叫。
1.1 在父子程序中都可以使用return關鍵字結束程序。
1.2 exit函式
#include
void exit(int status);
功能:使程序正常終止
引數:status 程序結束時候的狀態,用於返回程序呼叫者
返回值:無
1.3 _exit函式
#include
void _exit(int status);
功能:類似exit函式可以使程序正常結束。
exit和_exit函式的區別,exit結束時候會自動重新整理快取區
_exit結束時候不會重新整理快取區
殭屍程序:父子程序建立後,子程序退出
父程序執行
子程序變為殭屍程序
判斷依據: ps aux ==>stat 列為 z
孤兒程序:父子程序建立後,父親程序退出
子程序執行
子程序變為孤兒程序
判斷依據: ps -ef ===>ppid 列為 1
2、程序的** ===》避免殭屍程序和**pid號
2.1 wait 函式**
#include #include pid_t wait(int *status);
功能:該函式可以阻塞等待並**任意子程序退出的資源。
一次該函式執行只能**乙個子程序的資源。
該函式只能有建立者程序呼叫,否則無效。
引數:status **的子程序返回的狀態,如果不關注
子程序的返回值,則用null表示,如果要關注
子程序的返回值,則用wexitstatus獲取返回值。
返回值:成功 **的子程序pid
失敗 -1
2.2 多程序之**資源:
pid_t waitpid(pid_t pid, int *status, int options);
功能:該函式可以指定**程序的資源資訊。
引數:pid 要**的目標程序pid號,
特殊: pid > 0 要**的目標pid
pid = 0 相同組id的程序
pid = -1 任意子程序,等價於 wait
pid < -1 按照pid的絕對值等於組id的程序
status 表示要**的子程序資源資訊,可以用wexitstatus巨集
獲取其資料值;
options **子程序資源的方式,0 表示阻塞**
wnohang 表示非阻塞**
返回值:成功 **資源的pid號
失敗 -1
沒有**到資源 0
多程序程式設計的框架:
fork ===> exit() ====>wait()
守護程序:
1、製作孤兒程序:
建立父子程序 =》fork()
父程序退出,子程序保留,=》exit()
孤兒程序
2、設定會話組長: setsid
pid_t setsid(void);
功能:修改當前程序為會話組長。
引數: 無
返回值:新的組長pid
3、修改工作目錄: chdir
chdir("/"); ===> chdir("/daemon");
4、修改工作目錄的許可權掩碼: umask
mode_t umask(mode_t mask);
功能:修改當前工作目錄中檔案的預設許可權掩碼
引數:mask 目標許可權掩碼
返回值: 成功 新的許可權掩碼
失敗 -1;
5、關閉已經開啟的檔案描述符: close getdtablesize
int getdtablesize(void);
功能:該函式用於獲取當前程序能開啟的最大檔案描述符
引數: 無
返回值:成功 最大描述符
失敗 -1;
驗證是否具備守護程序的特徵:
1、ps aux ===>stat 列 必須有 s 的會話組長
2、ps -ef ===>ppid 列 必須是 1 的孤兒程序
3、ps aux ===>tty 列 必須是 ? 的非終端程序
#include
#include
#include
#include
#include
#include
intdaemon_init()
return0;
}int
main
(int argc,
char
*ar**)
;while(1
)return0;
}
linux學習筆記之程序管理
ps process state unix system v bsdps e 顯示所有程序 tty相關的是前台程序 tty無關 u 使用者相關 f full format listing f print extra information o command 選擇顯示字段 ps aux ps ef ...
Linux基礎學習筆記之 程序管理
在 linux 系統當中 觸發任何乙個事件,系統都會將他定義為乙個程序,並且給予這個程序乙個 id,稱為 pid,同時依據啟發這個程序的使用者與相關屬性,給予這個 pid 一組有效的許可權設定。如上圖所示,程式一般儲存在實體磁碟中的,然後通過使用者的執行來觸發。觸發後會載入到記憶體中成為乙個個體,那...
Linux學習之程序
程序process pid 子程序 ppid 父程序 top 動態檢視系統程序占用資源高,不常用 ps aus 靜態檢視當前系統程序,常用。sort cpu 以cpu使用率來排序,降序 sort cpu 以cpu使用率來排序,公升序 sort mem 以記憶體占用情況來排序,降序。vsz rss t...