linux 創建精靈進程,linux 進程通信之 守護進程

守護進程(Daemon)

Daemon(精靈)進程,是linux中的后臺服務進程,通常獨立于控制終端并且周期性地執行某種任務或等待處理某些發生的時間。一般采用以d結尾的名字。從下面的進程信息可以看出,守護進程都是【?】。

colord 1160 0.0 0.2 399424 14520 ? Ssl 6月06 0:00 /usr/lib/colord/colord

Linux后臺的一些系統服務進程,沒有控制終端,不能直接和用戶交互。不受用戶登錄,注銷的影響,一直在運作著,他們都是守護進程。如ftp服務器;nfs服務器等。

創建守護進程,最關鍵的一步是調用setsid函數創建一個新的會話(session),并成為session leader。

會話和進程組

會話比進程組更高一級,多個進程組對應一個會話。

多個進程在同一個進出組,第一個進程是進程組的組長。

組長(父進程)不可以創建會話,必須是組員(子進程)創建。

創建會話(session)

1,創建會話的進程不能是組長進程(父進程)

2,創建會話成功的進程,變成組長進程(父進程)

3,新會話的進程丟棄原來的終端控制

4,建立新會話時,先調用fork,終止父進程,子進程調用創建會話的函數setsid

#include

#include

pid_t setsid(void);

DESCRIPTION

setsid() creates a new session if the calling process is not a process

group leader. The calling process is the leader of the new session

(i.e., its session ID is made the same as its process ID). The calling

process also becomes the process group leader of a new process group in

the session (i.e., its process group ID is made the same as its process

ID).

The calling process will be the only process in the new process group

and in the new session.

普通的進程為什么不是守護進程?因為,普通的進程在終端執行,當關閉終端時,終端會給這個終端里執行的所有進程發送信號SIGHUP,這個信號的默認處理的中斷進程。所以,當終端被關閉時,所以的進程都被終止了,不能成為守護進程。

Signal Value Action Comment

──────────────────────────────────────────────────────────────────────

SIGHUP 1 Term Hangup detected on controlling terminal

or death of controlling process

創建守護進程的步驟:

1,創建子進程,終止父進程

2,在子進程中調用函數setsid,來創建新會話

3,改變當前進程的目錄。chdir函數

4,重新設置文件權限的掩碼。umask函數

5,關閉0,1,2文件描述符。守護進程用不到0,1,2文件描述符。避免浪費資源。

6,開始執行守護進程的核心代碼。

7,推出守護進程,一般執行不到這里,因為一直在循環里。

例子:每分鐘做一個文件

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define _FILE_ "%s/log/data_%ld"

void catc(int num){

char* host = getenv("HOME");

char buf[256] = {0};

sprintf(buf, _FILE_, host, time(NULL));

int fd = open(buf, O_WRONLY|O_CREAT, 0664);

if(fd < 0){

perror("open:");

exit(1);

}

close(fd);

}

int main(){

//創建子進程

pid_t pid = fork();

//關閉父進程

if(pid > 0){

exit(0);

}

//創建新會話

setsid();

//設置掩碼

umask(0);

//改變工作目錄

chdir(getenv("HOME"));

//關閉文件描述符

close(0),close(1),close(2);

//設置定時器

struct itimerval it = {{60, 0}, {1, 0}};

setitimer(ITIMER_REAL, &it, NULL);

//捕捉信號SIGALRM

struct sigaction act;

act.sa_flags = 0;

sigemptyset(&act.sa_mask);

act.sa_handler = catc;

sigaction(SIGALRM, &act, NULL);

while(1)

sleep(1);

}

守護進程擴展了解

普通的進程也能強行變成守護進程。使用命令【nohup】。

它的作用是,阻塞信號SIGHUP,也就是當終端被關閉時,信號SIGHUP被阻塞了,所以進程就沒有被終止。

nohup ./a.out >> a.log &

命令解釋:

./a.out:要執行的程序

把輸出重定向到a.log

&:后臺執行的意思

標簽:process,創建,session,linux,進程,include,守護

來源: https://www.cnblogs.com/xiaoshiwang/p/10988899.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/385819.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/385819.shtml
英文地址,請注明出處:http://en.pswp.cn/news/385819.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java開發崗位招聘,吊打面試官

一.java基礎面試知識點 java中和equals和hashCode的區別 int、char、long各占多少字節數 int與integer的區別 探探對java多態的理解 String、StringBuffer、StringBuilder區別 什么是內部類&#xff1f;內部類的作用 抽象類和接口區別 抽象類的意義 抽象類與接口的應用…

linux 調用默認程序打開文件,Excel VBA如何使用默認應用程序打開文件

我無法評論現有答案(分數不足)&#xff0c;因此我在回答以添加信息。從Access 2010開始&#xff0c;我遇到了以下語法的無提示故障&#xff1a;Dim URL As StringURL "http://foo.com/"CreateObject("Shell.Application").Open URL如果用URL括號括起來&am…

java開發工作找不到要放棄嗎,年薪50W

1. Redis面試專題 絕大部分寫業務的程序員&#xff0c;在實際開發中使用 Redis 的時候&#xff0c;只會 Set Value 和 Get Value 兩個操作&#xff0c;對 Redis 整體缺乏一個認知。這里以面試題的形式對 Redis 常見問題做一個總結&#xff0c;解決大家的知識盲點。 什么是Red…

linux 函數手冊 在線,Linux系統API函數手冊

Linux系統API函數手冊 (34頁)本資源提供全文預覽&#xff0c;點擊全文預覽即可全文預覽,如果喜歡文檔就下載吧&#xff0c;查找使用更方便哦&#xff01;11.90 積分(一)文件操作篇 1、creat(建立文件)頭文件1 #include2 #include3 #include定義函數1 int creat(const char * pa…

java開發工具包的英文縮寫,程序員翻身之路

基本概念面試題集&#xff08; Spring 相關概念梳理&#xff09; 談談對Spring loC的理解?談談對Spring Dl的理解?BeanFactory 接口和ApplicationContext接口不同點是什么?請介紹你熟悉的Spring 核心類&#xff0c;并說明有什么作用?介紹一下Spring的事務的了解?介紹—下…

linux 磁盤管理3板斧,Linux磁盤管理三板斧的使用心得

磁盤是Linux系統中一項非常重要的資源&#xff0c;如何對其進行有效的管理直接關系到整個系統的性能問題。對Linux磁盤管理稍微有一 些學習和經驗的朋友們應該都知道df、du和fdisk這三個常用命令&#xff1a;df用于檢查文件系統磁盤占用情況&#xff0c;du檢查磁盤空間占用情況…

java開發工程師學什么專業,Java核心知識點

應聘求職 每年這個時候&#xff0c;都是應屆生求職以及在職人員跳槽的高峰期。對于即將成為程序員的應屆畢業生們。在求職過程中怎樣確定目標公司和目標職位&#xff0c;大家在求職過程中要注意哪些細節?這些都是大家所關心的話題。 ①應聘渠道&#xff1a; ⑴學校招聘會&a…

linux查看服務器電源風扇,nagios監控vsphere ESXi主機硬件狀態(CPU風扇、電源模塊、硬盤、溫度)...

nagios監控vsphere ESXi主機硬件狀態(CPU風扇、電源模塊、硬盤、溫度)esxi 的只讀賬戶和密碼(本文以chkhardware/chkreadonly為例)插架下載地址,此地址附有相關說明:http://www.claudiokuenzler.com/nagios-plugins/check_esxi_hardware.phpESXI主機:DELL R410ESXI版本:ESXI4.0…

java開發工程師招聘軟件,面試題附答案

螞蟻金服一面&#xff08;技術面&#xff09; JVM 內存分哪幾個區&#xff0c;每個區的作用是什么?JVM有哪些回收算法&#xff0c;對應的收集器有哪些&#xff1f; GC 的兩種判定方法 &#xff1f;CMS 收集器與 G1 收集器的特點。 hashmap源碼問題 HashMap、HashMap如何保…

java高分面試指南:redis怎么保證高可用

緩存雪崩 緩存雪崩指的是Redis當中的大量緩存在同一時間全部失效&#xff0c;而假如恰巧這一段時間同時又有大量請求被發起&#xff0c;那么就會造成請求直接訪問到數據庫&#xff0c;可能會把數據庫沖垮。 緩存雪崩一般形容的是緩存中沒有而數據庫中有的數據&#xff0c;而因…

linux文件系統只有幾k,關于Linux文件系統的的簡單理解和認識

關于Linux文件系統的的簡單理解和認識關于文件系統的運作&#xff0c;這與操作系統帶的檔案數據有關。例如Linux操作系統的檔案權限(rwx)與文件屬性(擁有者&#xff0c;群組&#xff0c;時間參數等)。文件系統通常會將這兩部分的數據分別存放在不同的區塊&#xff0c;權限與屬性…

Java高級工程師必備知識!java入門書籍pdf

美團技術一面20分鐘 晚7點&#xff0c;因為想到下周一才面試&#xff0c;我剛準備出去打個羽毛球&#xff0c;北京的電話就來了。面試官各種抱歉&#xff0c;說開會拖延了。 1、自我介紹 說了很多遍了&#xff0c;很流暢撿重點介紹完。 2、問我數據結構算法好不好 挺好的&…

機器人足球比賽linux,機器人足球實驗報告.doc

機器人足球實驗報告.doc實驗一一、實驗目的掌握RoboCup仿真機器人足球比賽相關知識點&#xff0c;具體內容如下&#xff1a;Linux操作系統的熟悉及了解其基本操作。掌握Linux下如何進行C編程&#xff0c;了解gcc編譯器以及一些簡單編輯工具&#xff0c;如&#xff1a;vi、emacs…

linux eclipse設置顏色,Linux Eclipse美化:解決工具欄過大和 Javadoc背景色修改

Eclipse 在Ubuntu 下總是感覺上面的工具欄感覺特別的大&#xff0c;控件之間的空隙非常的大&#xff0c;和在Windows 下的感覺非常的不一樣(畢竟是剛剛從windows叛逃出來)&#xff0c;其實也不光光是Eclipse 是這樣&#xff0c;其他也軟件也同樣有這個問題。嘗試過通過更換主題…

Java高級工程師面試實戰,mysqlsettimeout

我聽到的一些發聲 你們賺的錢已經可以了&#xff1a; 我一個發小是做土木工程的&#xff0c;上海大學博士&#xff0c;參與很多著名建筑的工程&#xff0c;但是從薪資上看&#xff0c;還不如一些稍微像樣的公司的6年多的高級開發。為什么&#xff1f;這就是行業的紅利&#xf…

manjaro linux 關機,給本子安裝manjaro 出現無法關機的解決辦法

manjaro-kde-17.1.8-stable 和* win10* 雙系統 總是發現在關機或者重啟的時候&#xff0c;出現莫名凍屏的情況&#xff0c;只能按電腦的電源按鈕才可以強行關掉&#xff0c;(在進行解決的時候強行關機了 好多次&#xff01;&#xff01;。。心疼啊&#xff01;&#xff01;) 最…

Java高級開發面試,java字符串拼接的方法

一面&#xff1a;70分鐘 突擊電話面試 正思考著項目功能模塊&#xff0c;阿里面試官打來了電話&#xff0c;開始了阿里一面。 阿里面試官自我介紹&#xff0c;介紹了5分鐘左右&#xff0c;部門的情況&#xff0c;主要的業務 提問開始 會哪些操作系統 Linux會一點說一下操作指…

linux下安裝nginx1.10,Linux(RHEL7.0)下安裝nginx-1.10.2(示例代碼)

查看當前系統版本是否支持當前&#xff0c;nginx發布包支持以下Linux操作系統版本:RHEL/CentOS:VersionSupported Platforms5.xx86_64, i3866.xx86_64, i3867.xx86_64, ppc64leDebian:VersionCodenameSupported Platforms7.xwheezyx86_64, i3868.xjessiex86_64, i386Ubuntu:Ver…

Java高級開發面試,java泛型下界通配符

微服務是什么 微服務起源于2005年Peter Rodgers博士在云端運算博覽會提出的微Web服務(Micro-Web-Service)&#xff0c;根本思想類似于Unix的管道設計理念。2014年&#xff0c;由Martin Fowler 與 James Lewis共同提出了微服務的概念&#xff0c;定義了微服務架構風格是一種通過…

c語言extern作用域,函數內定義extern變量是怎么回事?

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓http://ca21days.blog.163.com/blog/static/4383729420096102223744/變量的聲明(declarations)會將變量的類型和名稱傳達給程序。當然&#xff0c;定義(definitions)也是一種聲明&#xff1a;當我們定義一個變量的時候&#xff0c;…