Linux守護程序

2021-07-04 07:49:45 字數 2001 閱讀 7913

程式設計級別:

(一)守護程序的概念

守護程序是一種生存期比較長的程序,常常在系統自舉時啟動,在系統關閉時退出。因為他們沒有控制終端,因此是在後台執行的。

(二)守護程序的程式設計規則

1清除檔案模式建立遮蔽字

2成為乙個新的會話首程序

3略hup訊號。然後再次fork

4改變當前工作路徑

5關閉所有的檔案描述符

6把檔案描述符0 1 2都定向到 /dev/null

7日誌初始化

#include "apue.h"

#include #include #include void

daemonize(const char *cmd)

}

我們經常會碰到這樣的問題,用 telnet/ssh 登入了遠端的 linux 伺服器,執行了一些耗時較長的任務, 結果卻由於網路的不穩定導致任務中途失敗。如何讓命令提交後不受本地關閉終端視窗/網路斷開連線的干擾呢?

我們知道,當使用者登出(logout)或者網路斷開時,終端會收到 hup(hangup)訊號從而關閉其所有子程序。因此,我們的解決辦法就有兩種途徑:要麼讓程序忽略 hup 訊號,要麼讓程序執行在新的會話裡從而成為不屬於此終端的子程序。

1. nohup

nohup 無疑是我們首先想到的辦法。顧名思義,nohup 的用途就是讓提交的命令忽略 hangup 訊號。讓我們先來看一下 nohup 的幫助資訊:

nohup(1)                        user commands                        nohup(1)

name

nohup - run a command immune to hangups, with output to a non-tty

synopsis

nohup command [arg]...

nohup option

description

run command, ignoring hangup signals.

--help display this help and exit

--version

output version information and exit

可見,nohup 的使用是十分方便的,只需在要處理的命令前加上 nohup 即可,標準輸出和標準錯誤缺省會被重定向到 nohup.out 檔案中。一般我們可在結尾加上"&"來將命令同時放入後台執行,也可用">filename 2>&1"來更改預設的重定向檔名。

2。setsid

nohup 無疑能通過忽略 hup 訊號來使我們的程序避免中途被中斷,但如果我們換個角度思考,如果我們的程序不屬於接受 hup 訊號的終端的子程序,那麼自然也就不會受到 hup 訊號的影響了。setsid 就能幫助我們做到這一點。讓我們先來看一下 setsid 的幫助資訊:

setsid(8)                 linux programmer』s manual                 setsid(8)

name

setsid - run a program in a new session

synopsis

setsid program [ arg ... ]

description

setsid runs a program in a new session.

可見 setsid 的使用也是非常方便的,也只需在要處理的命令前加上 setsid 即可。

3。&

這裡還有乙個關於 subshell 的小技巧。我們知道,將乙個或多個命名包含在「()」中就能讓這些命令在子 shell 中執行中,從而擴充套件出很多有趣的功能,我們現在要討論的就是其中之一。

當我們將"&"也放入「()」內之後,我們就會發現所提交的作業並不在作業列表中,也就是說,是無法通過jobs來檢視的。讓我們來看看為什麼這樣就能躲過 hup 訊號的影響吧。

Linux守護程序

linux下守護程序一般分為5步,但是實際上只有前兩步是關鍵。第一步 建立子程序,關閉父程序。使用fork 建立,父程序exit 退出。關鍵第二步 建立新的會話id,setsid 作用是使子程序擺脫原有的會話 程序組 終端的控制,其實,linux下每個程序都是由一號程序建立而來的,每個程序都是1號程...

Linux 守護程序

守護程序daemon,是生存期較長的一種程序,名字一般以字母d結尾。它們常常在系統自舉時啟動,僅在系統關閉時才終止。因為它們沒有控制終端,所以說它們是在後台執行的。linux系統有很多守護程序,它們執行日常事務活動。自舉只有兩個功能 加電自檢和磁碟引導。加電自檢 當我們按下計算機電源開關時,頭幾秒鐘...

Linux 守護程序

概念 無控制終端的會話首程序,或者是孤兒程序組的成員,在後台執行任務。守護程序程式的名稱通常以 d 結尾。程式設計規則 1 呼叫unmask將檔案模式建立遮蔽字設定為乙個已知值 通常是0 因為繼承來的檔案模式建立遮蔽字可能會被設定為拒絕某些許可權。2 呼叫fork,然後父程序exit。作用 1 如果...