linux學習筆記之程序

2021-10-06 11:18:26 字數 3138 閱讀 8564

多程序程式設計函式: ===》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...