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.mzph.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;…