程序知識點2

2021-10-08 18:55:28 字數 2588 閱讀 1869

守護程序

程序間通訊ipc

管道、有名管道、訊號

共享記憶體、訊息佇列、執行緒、執行緒通訊、執行緒互斥

執行緒同步、程序同步、考試題

守護程序daemon

也叫後台程序或者精靈程序

守護程序在系統開機自動啟動,生命週期長,關機的時候結束。

一般守護程序用於監測工作環境的。

前提:

守護程序需要後台執行

守護程序需要和終端脫離關係

思考: 守護程序和終端脫離關係,所以,它的列印輸出無法輸出到終端

守護程序需要記錄和提示使用者一些資訊,可以寫日誌,還可以圖形化介面提示

在守護程序中按需來修改umask

相關概念

程序 程序id 父程序 程序組 會話組

父程序建立子程序,子程序會繼承父程序的很多東西,比如:程序組、會話組

建立守護程序 *****

建立新子程序,父程序退出

建立新的會話組setsid(); //脫離終端

修改umask

修改當前工作路徑

關閉繼承來的已經開啟檔案

做自己的事

程序間通訊

掌握:有幾種通訊方式,分別有什麼特點

管道(無名管道pipe)

特點:特殊的檔案,沒有名字

只能用於具有親緣關係的程序間進行通訊

半雙工的通訊模式,具有固定的讀端和寫端

父程序在建立管道後,會有讀端fd[0]又有寫端fd[1]

無法使用lseek進行游標跳轉

管道為空,讀阻塞;管道為滿,寫阻塞。

讀完後,資料消失。

有名管道fifo

特點:可以用於同乙個pc的任意兩個程序間實現通訊。

在檔案系統可見

使用檔案io進行操作//open, read, write, close

管道為空,讀阻塞;管道為滿,寫阻塞。

無法使用lseek進行游標跳轉

訊號signal

特點:

非同步方式實現通訊

是軟體層次去模擬中斷來實現的。

了解常見訊號

kill -l

ctrl-c : sigint

ctrl-\ : sigquit

ctrl-z : sigtstp(暫停)

sigalrm(鬧鐘), sigint(終止), sigse**(斷錯誤), sigabrt(記憶體溢位), sigkill(殺死), sigstop(暫停)

訊號的產生

kill();raise(); int alarm(int 秒);

訊號的處理

預設處理 sig_dfl

大部分情況下會終止當前程序。

忽略處理 sig_ign

收到沒有收到一樣。

捕獲處理 //函式指標

首先註冊某個訊號對應的處理函式,在當前程序收到該訊號時,自動呼叫該函式。

sigkill和sigstop無法捕獲處理也無法忽略處理。

訊號處理步驟

安裝訊號//註冊訊號對應處理函式

做自己的事

int alarm(int 秒); 啟動定時器,定時時間到以後,會給當前程序傳送sigalrm.

int pause(void); 暫停當前程序,直到收到訊號為止。

void (*signal(int signum, void (*handler)(int)))(int);

或者#include typedef void (*sighandler_t)(int);

sighandler_t signal(int signum, sighandler_t handler);

練習題1:

通過無名管道來實現程序間通訊。

步驟:父程序 建立管道 pipe

建立子程序 fork

父程序:

關閉寫端 close

讀管道到buf中 read

輸出buf printf

關閉讀端 close

子程序:

關閉讀端 close

寫資料到管道中 write

關閉寫端 close

相關函式

建立無名管道

#include

int pipe(int fd[2])

引數:fd:是乙個有兩個整型元素的陣列

返回值:成功的時候,返回0;失敗時,返回-1.

練習題2:

通過有名管道來實現程序間通訊。

1.cint main()

2.cint main()

gcc 1.c

gcc 2.c

相關函式 :

#include

#include

int mkfifo(const char *pathname, mode_t mode);

引數:pathname : 檔名

mode : 許可權,一般用8進製表示,例:0666

返回值:成功的時候,返回0;失敗時,返回-1。

例:#include

ret = mkfifo( 「myfifo」, 0666 );

if ( ret < 0 && errno != eexist)

小知識點2

find name svn exec rm rf find type d name svn xargs rm rf find type d name svn make otapackage j24 adb shell am start n 包名 類名 adb shell pm list packag...

介面知識點2

1.介面中常量的定義 public static final int num one 34 注意事項 前三個關鍵字可以省略,final定義的是不可變的量,名字盡量是用大寫,必須進行賦值。2.介面是沒有靜態 塊或者構造方法的。3.乙個類的直接父類只能有乙個,但是乙個類可以同時實現多個介面。格式為 pu...

框架知識點2

doctype html en utf 8 viewport content width device width,initial scale 1.0 document title jquery 1.10.1.min.js script 注 jq是js封裝的乙個 庫。注 jq中相容js所有的寫法。注...