中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當前位置: 首頁 > news >正文

揭陽網(wǎng)站制作案例/如何在各種網(wǎng)站投放廣告

揭陽網(wǎng)站制作案例,如何在各種網(wǎng)站投放廣告,專題網(wǎng)站開發(fā)報價,建設公司網(wǎng)站方案目錄 一、守護進程的定義與特點 1、定義 2、特點 二、守護進程的原理 三、守護進程與會話(Session)的關系 四、C實現(xiàn)守護進程 守護進程(Daemon Process)是一個在后臺運行、通常不與用戶直接交互的進程。守護進程是操作系統(tǒng)中…

目錄

一、守護進程的定義與特點

1、定義

2、特點

二、守護進程的原理

三、守護進程與會話(Session)的關系

四、C++實現(xiàn)守護進程

?????守護進程(Daemon Process)是一個在后臺運行、通常不與用戶直接交互的進程。守護進程是操作系統(tǒng)中非常重要的一部分,常見的應用包括系統(tǒng)日志、網(wǎng)絡服務、數(shù)據(jù)庫管理等。在這篇博客中,我們將詳細探討守護進程的原理、如何與會話管理聯(lián)系,并通過C++實現(xiàn)一個簡單的守護進程。將服務器守護進程化的主要目的是確保服務器在后臺持續(xù)運行,并在意外崩潰或重啟后自動恢復。這樣可以使服務在沒有人工干預的情況下長期穩(wěn)定運行,并減少系統(tǒng)管理的復雜度。

一、守護進程的定義與特點

1、定義

守護進程是一個沒有終端控制的進程,它通常在系統(tǒng)啟動時啟動,獨立于任何用戶會話(session),并且在后臺持續(xù)運行。守護進程的特點是它不依賴于用戶的輸入輸出,運行時不會產(chǎn)生終端交互。

2、特點

  • 后臺運行:守護進程通常在操作系統(tǒng)啟動時啟動,或者在用戶登錄后由系統(tǒng)服務啟動,并在后臺持續(xù)運行。
  • 無終端:守護進程不與任何終端或用戶會話關聯(lián),它通常不與標準輸入輸出(stdin, stdout, stderr)相關聯(lián)。
  • 獨立性:守護進程與用戶的登錄會話是獨立的,它在后臺靜靜運行,執(zhí)行系統(tǒng)級任務,如日志記錄、定時任務、文件清理等。
  • 父進程為init進程:守護進程在系統(tǒng)啟動時由父進程(通常是init進程)啟動,運行時不會退出。
  • PID(進程ID):守護進程的PID是由操作系統(tǒng)分配的,它通常會被寫入到某個文件中以供后續(xù)管理和終止。

二、守護進程的原理

守護進程是通過脫離控制終端、使自己成為一個獨立的后臺進程來實現(xiàn)的。這是通過幾個步驟實現(xiàn)的:

  1. 創(chuàng)建子進程:守護進程首先會創(chuàng)建一個子進程,父進程退出,子進程繼續(xù)執(zhí)行,這樣可以讓守護進程避免與任何用戶會話或終端直接交互。

  2. 創(chuàng)建新的會話(Session):守護進程通常會調用 setsid() 系統(tǒng)調用創(chuàng)建一個新的會話,成為該會話的首進程。新會話的創(chuàng)建意味著它不再與原始的控制終端和進程組相關聯(lián)。

  3. 改變工作目錄:守護進程通常會調用 chdir() 來更改工作目錄。為了避免占用終端的目錄,守護進程通常會將工作目錄更改為 /

  4. 關閉文件描述符:守護進程還會關閉與終端相關的文件描述符,包括標準輸入(stdin)、標準輸出(stdout)、標準錯誤(stderr)。通常會將它們重定向到 /dev/null,以防止輸出到終端。

  5. 忽略信號:守護進程會設置適當?shù)男盘柼幚?#xff0c;避免因收到如SIGHUP等信號導致進程退出。

void Daemon(const std::string &cwd = "")
{// 1. 忽略其他異常信號 signal(SIGCLD, SIG_IGN);signal(SIGPIPE, SIG_IGN);signal(SIGSTOP, SIG_IGN);// 2. 將自己變成獨立的會話if (fork() > 0)//>0說明是父進程,讓父進程直接退出exit(0);setsid(); //子進程// 3. 更改當前調用進程的工作目錄if (!cwd.empty())chdir(cwd.c_str());// 4. 標準輸入,標準輸出,標準錯誤重定向至/dev/null 垃圾桶int fd = open(nullfile.c_str(), O_RDWR);if(fd > 0){dup2(fd, 0);dup2(fd, 1);dup2(fd, 2);close(fd);}
}

三、守護進程與會話(Session)的關系

會話(Session)是與進程、終端和進程組密切相關的概念。會話的作用是管理一組相關的進程。

  1. 會話的創(chuàng)建:每個登錄的用戶會話都有一個會話ID(Session ID),一個會話可以有多個進程組(Process Group),而每個進程組中的進程共享同一個控制終端。

  2. 脫離控制終端:守護進程通過 setsid() 系統(tǒng)調用來脫離當前會話及其控制終端,成為一個新的會話的首進程。這樣,守護進程就不再與任何終端關聯(lián),它可以自由地運行而不受用戶的控制。

  3. 控制終端:一旦守護進程創(chuàng)建了新的會話并成為首進程,它就不再與任何控制終端關聯(lián)。控制終端通常與用戶的登錄會話相關聯(lián),但守護進程會斷開這一關系,避免終端輸入或輸出干擾其運行。

  4. 進程組與信號處理:會話中的進程通常共享進程組,而進程組的控制由會話首進程管理。守護進程通常會設置信號處理機制,使其能夠管理來自進程組的信號。


四、C++實現(xiàn)守護進程

#pragma once#include <iostream>
#include <cstdlib>
#include <unistd.h>
#include <signal.h>
#include <string>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>const std::string nullfile = "/dev/null";void Daemon(const std::string &cwd = "")
{// 1. 忽略其他異常信號 signal(SIGCLD, SIG_IGN);signal(SIGPIPE, SIG_IGN);signal(SIGSTOP, SIG_IGN);// 2. 將自己變成獨立的會話if (fork() > 0)//>0說明是父進程,讓父進程直接退出exit(0);setsid(); //子進程// 3. 更改當前調用進程的工作目錄if (!cwd.empty())chdir(cwd.c_str());// 4. 標準輸入,標準輸出,標準錯誤重定向至/dev/null 垃圾桶int fd = open(nullfile.c_str(), O_RDWR);if(fd > 0){dup2(fd, 0);dup2(fd, 1);dup2(fd, 2);close(fd);}
}
#pragma once#include <iostream>
#include <string>
#include <cstdlib>
#include <cstring>
#include <unistd.h>
#include <sys/wait.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <pthread.h>
#include <signal.h>
#include <signal.h>
#include "Log.hpp"
#include "ThreadPool.hpp"
#include "Task.hpp"
#include "Daemon.hpp"const int defaultfd = -1;
const std::string defaultip = "0.0.0.0";
const int backlog = 10; // 但是一般不要設置的太大
extern Log lg;enum
{UsageError = 1,SocketError,BindError,ListenError,
};class TcpServer;class ThreadData
{
public:ThreadData(int fd, const std::string &ip, const uint16_t &p, TcpServer *t): sockfd(fd), clientip(ip), clientport(p), tsvr(t){}
public:int sockfd;std::string clientip;uint16_t clientport;TcpServer *tsvr;
};class TcpServer
{
public:TcpServer(const uint16_t &port, const std::string &ip = defaultip) : listensock_(defaultfd), port_(port), ip_(ip){}void InitServer(){listensock_ = socket(AF_INET, SOCK_STREAM, 0);if (listensock_ < 0){lg(Fatal, "create socket, errno: %d, errstring: %s", errno, strerror(errno));exit(SocketError);}lg(Info, "create socket success, listensock_: %d", listensock_);int opt = 1;setsockopt(listensock_, SOL_SOCKET, SO_REUSEADDR|SO_REUSEPORT, &opt, sizeof(opt)); // 防止偶發(fā)性的服務器無法進行立即重啟(tcp協(xié)議的時候再說)struct sockaddr_in local;memset(&local, 0, sizeof(local));local.sin_family = AF_INET;local.sin_port = htons(port_);inet_aton(ip_.c_str(), &(local.sin_addr));// local.sin_addr.s_addr = INADDR_ANY;if (bind(listensock_, (struct sockaddr *)&local, sizeof(local)) < 0){lg(Fatal, "bind error, errno: %d, errstring: %s", errno, strerror(errno));exit(BindError);}lg(Info, "bind socket success, listensock_: %d", listensock_);// Tcp是面向連接的,服務器一般是比較“被動的”,服務器一直處于一種,一直在等待連接到來的狀態(tài)if (listen(listensock_, backlog) < 0){lg(Fatal, "listen error, errno: %d, errstring: %s", errno, strerror(errno));exit(ListenError);}lg(Info, "listen socket success, listensock_: %d", listensock_);}void Start(){Daemon();ThreadPool<Task>::GetInstance()->Start();// for fork();// signal(SIGCHLD, SIG_IGN);lg(Info, "tcpServer is running....");for (;;){// 1. 獲取新連接struct sockaddr_in client;socklen_t len = sizeof(client);int sockfd = accept(listensock_, (struct sockaddr *)&client, &len);if (sockfd < 0){lg(Warning, "accept error, errno: %d, errstring: %s", errno, strerror(errno)); //?continue;}uint16_t clientport = ntohs(client.sin_port);char clientip[32];inet_ntop(AF_INET, &(client.sin_addr), clientip, sizeof(clientip));// version 4 --- 線程池版本Task t(sockfd, clientip, clientport);ThreadPool<Task>::GetInstance()->Push(t);}}~TcpServer() {}private:int listensock_;uint16_t port_;std::string ip_;
};

表示服務已經(jīng)啟動

http://www.risenshineclean.com/news/89.html

相關文章:

  • 網(wǎng)站免費正能量入口/百度首頁推薦關不掉嗎
  • 網(wǎng)站建設步驟及分工/優(yōu)秀軟文范例100字
  • 對網(wǎng)站進行優(yōu)化/網(wǎng)站排名快速提升
  • 武城網(wǎng)站建設費用/品牌營銷公司
  • 佛山市企業(yè)網(wǎng)站建設平臺/太原關鍵詞優(yōu)化軟件
  • 做網(wǎng)站大概價格/南昌seo排名優(yōu)化
  • 做網(wǎng)站的公司有前途嗎/如何制作網(wǎng)站和網(wǎng)頁
  • 免費建站的站點網(wǎng)站/游戲推廣是什么工作
  • 無錫企業(yè)網(wǎng)站seo/百度廣告投訴電話
  • 網(wǎng)站代碼怎么改/個人在線做網(wǎng)站免費
  • 網(wǎng)站首頁html/怎樣打百度人工客服熱線
  • 深圳市企業(yè)網(wǎng)站建設價格/整合營銷理論主要是指
  • 個人主頁頁面/seo優(yōu)化招商
  • 工信部網(wǎng)站備案查詢步驟詳解/公司網(wǎng)站
  • 做航模的網(wǎng)站/網(wǎng)銷怎么做
  • 網(wǎng)站pv統(tǒng)計方法/推廣策劃方案
  • tornado 做網(wǎng)站/seo刷詞工具在線
  • 網(wǎng)站建設和維護合同/湖南seo優(yōu)化首選
  • 淘寶網(wǎng)站建設哪個類目/seo公司
  • 做網(wǎng)站怎么偷源碼做網(wǎng)站/阿里seo排名優(yōu)化軟件
  • 電商網(wǎng)站建設與運營/網(wǎng)站管理
  • 文學投稿網(wǎng)站平臺建設/好f123網(wǎng)站
  • 做網(wǎng)站策劃需要用什么軟件/bt磁力搜索引擎在線
  • 沈陽網(wǎng)站建設制作公司/友情鏈接怎么設置
  • 學校資源網(wǎng)站的建設方案/東莞seo推廣機構帖子
  • 建設部資質上報系統(tǒng)網(wǎng)站/重慶百度推廣優(yōu)化
  • 南昌網(wǎng)站建設哪家好/什么軟件可以推廣自己的產(chǎn)品
  • 個人網(wǎng)站 作品/站長之家工具
  • 吳謹含廠家不愿做網(wǎng)站/平臺網(wǎng)站開發(fā)公司
  • 網(wǎng)站項目策劃書實例/網(wǎng)絡推廣深圳有效渠道