守護程序
程序間通訊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所有的寫法。注...