Linux企業級專案實踐之網路爬蟲(6)——將程式設計成為守護程式
在linux或者unix作業系統中在系統的引導的時候會開啟很多服務,這些服務就叫做守護程式。為了增加靈活性,root可以選擇系統開啟的模式,這些模式叫做執行級別,每一種執行級別以一定的方式配置系統。 守護程式是脫離於終端並且在後臺執行的程式。守護程式脫離於終端是為了避免程式在執行過程中的資訊在任何終端上顯示並且程式也不會被任何終端所產生的終端資訊所打斷。
由於在Linux中,每一個系統與使用者進行交流的介面稱為終端,每一個從此終端開始執行的程式都會依附於這個終端,這個終端就稱為這些程式的控制終端,當控制終端被關閉時,相應的程式都會自動關閉。但是守護程式卻能夠突破這種限制,它從被執行開始運轉,直到整個系統關閉時才退出。如果想讓某個程式不因為使用者或終端或其他地變化而受到影響,那麼就必須把這個程式變成一個守護程式。
我們用一個函式來封裝守護程式相關程式碼,同時使用命令列引數控制我們的爬蟲是否以守護程式的哦方式執行。
static void daemonize()
{
int fd;
if (fork() != 0) exit(0);
setsid();
SPIDER_LOG(SPIDER_LEVEL_INFO, "Daemonized...pid=%d", (int)getpid());
/* redirect stdin|stdout|stderr to /dev/null */
if ((fd = open("/dev/null", O_RDWR, 0)) != -1) {
dup2(fd, STDIN_FILENO);
dup2(fd, STDOUT_FILENO);
dup2(fd, STDERR_FILENO);
if (fd > STDERR_FILENO)
close(fd);
}
/* redirect stdout to logfile */
if (g_conf->logfile != NULL && (fd = open(g_conf->logfile, O_RDWR | O_APPEND | O_CREAT, 0)) != -1) {
dup2(fd, STDOUT_FILENO);
if (fd > STDERR_FILENO)
close(fd);
}
}
命令列引數處理程式碼:
int daemonized = 0;
char ch;
/* parse opt */
while ((ch = getopt(argc, (char* const*)argv, "vhd")) != -1) {
switch(ch) {
case 'v':
version();
break;
case 'd':
daemonized = 1;
break;
case 'h':
case '?':
default:
usage();
}
}
相關文章
- Linux企業級專案實踐之網路爬蟲(4)——主程式流程Linux爬蟲
- Linux企業級專案實踐之網路爬蟲(28)——爬蟲socket處理Linux爬蟲
- Linux企業級專案實踐之網路爬蟲(21)——擴充套件為多工爬蟲Linux爬蟲套件
- Linux企業級專案實踐之網路爬蟲(7)——DNS解析Linux爬蟲DNS
- Linux企業級專案實踐之網路爬蟲(19)——epoll介面Linux爬蟲
- Linux企業級專案實踐之網路爬蟲(8)——認識URLLinux爬蟲
- Linux企業級專案實踐之網路爬蟲(20)——擴充套件成為規則外掛模式Linux爬蟲套件模式
- Linux企業級專案實踐之網路爬蟲(25)——管理原始碼之SVNLinux爬蟲原始碼
- Linux企業級專案實踐之網路爬蟲(5)——處理配置檔案Linux爬蟲
- Linux企業級專案實踐之網路爬蟲(17)——儲存頁面Linux爬蟲
- Linux企業級專案實踐之網路爬蟲(18)——佇列處理Linux爬蟲佇列
- Linux企業級專案實踐之網路爬蟲(26)——執行緒池Linux爬蟲執行緒
- Linux企業級專案實踐之網路爬蟲(27)——多路IO複用Linux爬蟲
- Linux企業級專案實踐之網路爬蟲(29)——遵守robots.txtLinux爬蟲
- Linux企業級專案實踐之網路爬蟲(24)——定製規則擴充套件為垂直爬蟲Linux爬蟲套件
- Linux企業級專案實踐之網路爬蟲(13)——處理user-agentLinux爬蟲
- Linux企業級專案實踐之網路爬蟲(10)——處理HTTP狀態碼Linux爬蟲HTTP
- Linux企業級專案實踐之網路爬蟲(11)——處理http請求頭Linux爬蟲HTTP
- Linux企業級專案實踐之網路爬蟲(12)——處理HTTP應答頭Linux爬蟲HTTP
- Linux企業級專案實踐之網路爬蟲(9)——通過URL抓取網頁內容Linux爬蟲網頁
- Linux企業級專案實踐之網路爬蟲(22)——編寫爬蟲系統服務控制指令碼Linux爬蟲指令碼
- Linux企業級專案實踐之網路爬蟲(15)——區分文字檔案和二進位制檔案Linux爬蟲
- Linux企業級專案實踐之網路爬蟲(14)——使用正規表示式抽取HTML正文和URLLinux爬蟲HTML
- Linux企業級專案實踐之網路爬蟲(23)——系統測試:找出系統中的bugLinux爬蟲
- Linux企業級專案實踐之網路爬蟲(16)——使用base64傳輸二進位制資料Linux爬蟲
- Linux企業級專案實踐之網路爬蟲(30)——通過查閱RFC文件擴充更加複雜的功能Linux爬蟲
- 物聯網教程Linux系統程式設計——特殊程式之守護程式Linux程式設計
- Linux守護程式的程式設計實現(轉)Linux程式設計
- Linux 守護程式和超級守護程式(xinetd)Linux
- .NET跨平臺實踐:.NetCore、.Net5/6 Linux守護程式設計NetCoreLinux程式設計
- 成為專業程式設計師的6個技巧程式設計師
- 成為專業程式設計師的 6 個技巧程式設計師
- Python3 大型網路爬蟲實戰 — 給 scrapy 爬蟲專案設定為防反爬Python爬蟲
- 網路爬蟲專案爬蟲
- 企業資料爬蟲專案爬蟲
- 課程設計:python_網路爬蟲專案Python爬蟲
- 網路爬蟲專案蒐集爬蟲
- linux系統程式設計之程式(八):守護程式詳解及建立,daemon()使用Linux程式設計