守护进程

Linux:守护进程解析、如何实现守护进程 1、守护进程: 守护进程也称精灵进程(Daemon),是运行在后台的⼀一种特殊进程。它独立于控制终端且周期性地执行某种任务或等待处理某些发生的事件。守护进程是⼀一种很有用的进程。Linux的大多数服务器就是用守护进程实现的。比如,Internet服务器inetd,Web服务器httpd等。同时,守护进程完成许多系统任   务。比如,作业规划进程crond等。Linux系统启动时会启动很多系统 阅读详情

编写简单守护进程

(1)任何一个进程都可以将自己变成守护进程。
(2)create_daemon函数要素

  • 子进程等待父进程退出
  • 子进程使用setsid创建新的会话期,脱离控制台
  • 调用chdir将当前工作目录设置为/
  • umask设置为0以取消任何文件权限屏蔽
  • 关闭所有文件描述符
  • 将0、1、2定位到/dev/null

最初的daemon_2016-10-14.c

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

void create_daemon(void);

int main(void)
{
    create_daemon();
    while(1){
        printf("I am running.\n");
        sleep(1);
    }
    return 0;
}

//函数作用就是把调用该函数的进程变成一个守护进程
void create_daemon(void)
{

}

执行a.out后,屏幕输出”I am running.”。
这里写图片描述
在执行a.out的同时,ps -ajx后,可以发现进程2536。但在停止执行a.out后,进程2536也没有了。
这里写图片描述

现在开始写create_daemon()函数。

//函数作用就是把调用该函数的进程变成一个守护进程
void create_daemon(void)
{
    pid_t pid;
    if((pid = fork()) < 0)
    {
        perror("fork");
        exit(-1);
    }
    else if(pid > 0)
    {
        /* 父进程退出 */
        exit(0);
    }
    /* 子进程 */
    /* setsid将当前进程设置为一个新的会话期session */
    /* 目的就是让当前进程脱离控制台 */
    pid = setsid();
    if(pid < 0)
    {
        perror("setsid");
        exit(-1);
    }

    /* 将当前进程的工作目录设置为根目录 */
    chdir("/");

    /* umask设置为0,确保将来进程有最大打文件权限 */
    umask(0);

    /* 关闭所有文件描述符号 */
    /* 先要获取当前系统中所允许打开的最大文件数目 */
    int i;
    int cnt = sysconf(_SC_OPEN_MAX);
    for(i = 0; i < cnt; i++)
    {
        close(i);
    }

    /* 把标准输入、标准输出、标准错误输出定位到/dev/null */
    open("/dev/null", O_RDWR);
    open("/dev/null", O_RDWR);
    open("/dev/null", O_RDWR);
}

执行a.out,但发现并未输出。
这里写图片描述
但是ps -ajx还是可以看到a.out确实在执行。进程5291。
这里写图片描述
现在a.out就已经是守护进程了,此时就算我把执行a.out的终端关掉,但是ps -ajx还是能看见a.out进程,要关闭进程只能kill -9 进程号。

使用syslog来记录调试信息

因为已经将标准输入、标准输出、标准错误输出定向到/dev/null,所以守护进程不能向控制台输出信息,而且守护进程已经脱离了控制台。那么守护进程如何向用户输出信息?我们可以使用syslog来记录调试信息。

syslog相关函数

#include <syslog.h>

void openlog(const char *ident, int option, int facility);
/* syslog记录一条信息 */
void syslog(int priority, const char *format, ...);
void closelog(void);

参数

ident是识别字符串,一般设置为当前应用程序的名字。

option:

  • LOG_CONS 如果出错输出到控制台,如果没有输出到日志信息。
  • LOG_PID 记录到日志信息的每条信息包含当前进程pid,以此区分进程(fork的进程ident都相同,用pid可以区分父子进程)。

facility可以理解为日志的来源或设备或选择条件,目前常用的facility有以下几种:

  • LOG_AUTH (auth): 身份验证相关的(登录时)
  • LOG_CRON(cron): 进程或应用调度相关的
  • LOG_DAEMON(daemon): 守护进程相关的(内部服务器)
  • LOG_KERN(kernel): 内核相关的
  • LOG_MAIL(mail): 内部邮件服务器相关的
  • LOG_SYSLOG(syslog): syslog 守护进程本身相关的
  • LOG_LPR(lpr): 打印服务相关的
  • LOG_USER (user):用户相关的
  • LOG_LOCAL0 through LOG_LOCAL7(local0 - local7): 用户自定义使用的

priority(log level)日志优先级的级别,一般分为以下几种级别(从低到高:

  • LOG_DEBUG:(debug ) 程序或系统的调试信息
  • LOG_INFO:(info) 一般信息
  • LOG_NOTICE :(notice) 不影响正常的功能,需要提醒用户的重要事件
  • LOG_WARNING:(warning/warn) 可能影响系统功能,需要提醒用户的重要事件
  • LOG_ERR:( err/error) 错误信息
  • LOG_CRIT:(crit) 比较严重的
  • LOG_ALERT :(alert) 必须马上处理的
  • LOG_EMERG:(emerg/canic) 会导致系统不可用的

实战

#include <stdio.h>
#include <stdlib.h>
#include <syslog.h>
int main(void)
{
    openlog("syslogTest.out", LOG_PID| LOG_CONS, LOG_USER);
    syslog(LOG_INFO, "this is my log info");
    syslog(LOG_INFO, "this is another log info");
    closelog();
    return 0;
}

这里写图片描述
cat /var/log/syslog
这里写图片描述

syslog的工作原理

(1)操作系统中有一个守护进程syslogd(开机运行,关机时才结束),这个守护进程syslogd负责进行日志文件的写入和维护。
(2)syslogd是独立于我们任意一个进程运行的。我们当前进程和syslogd进程本来是没有任何关系的,但是我们当前进程可以同通过调用openlog打开一个和syslogd相连接的通道,然后通过syslog向syslogd发消息,然后由syslogd来将其写入到日志文件系统中。
(3)syslogd其实就是一个日志文件系统的服务器进程,提供日志服务。任何需要写入日志的进程都可以通过openlog/syslog/closelog这三个函数来利用syslogd提供的日志服务。这就是操作系统的服务式的设计。

浅析Linux守护进程、守护进程的创建步骤 何为守护进程 、进程组 / 组长进程 / 会话 / 会话首进程 、守护进程的创建步骤 、创建守护进程程序示例 阅读详情

相关推荐

OCTF2016--piapiapia

知识点: php反序列化长度变化尾部字符串逃逸 目录扫描发现www.zip,下载得到源码 源码有index.php,输入账号密码后会进入profile.php,还有register.php、updata.php、class.php和config.php flag值在config.php中,想办法访问到其内容 通过seay代码审计找到一点线索 看到profile.php中存在任意文件读取漏洞,前面还有反序列化 现在我们有个大体思路了,update.php中有一个$prof..

Oavinci的博客 473

守护进程(初学者必备)

linux操作系统本来就有很多的守护进程默默运行,维持系统的正常活动大概有30到50个, ps -efj ppid为0的进程为内核进程,跟随系统启动声明周期是随内核的,cmd列带[]的这种叫内核守护进程,老主init也是守护进程负责启动各运行层次特定的系统服务,所以很多进程的ppid是init.并且这个init进程也负责收养孤儿进程,cmd列不带[]我们称为普通守护进程,也叫做用户守护进程。如何判断一个进程是不是这个进程组的组长了,通常进程组ID等于进程ID那么这个进程就是对应进程组的组长。...

qq_56999918的博客 8402

排队论在食堂窗口规划中的应用:M/M/S模型优化案例

本文通过食堂窗口规划的真实案例,详细阐述了如何运用排队论中的M/M/S模型量化服务效率。文章从问题拆解、数据采集、模型计算到成本效益分析,提供了完整的数学建模实战指南,帮助读者掌握利用最优化方法解决资源配置问题的核心流程与工具。

docker7nomad的博客 1083

守护进程及守护进程输出

1 创建一个输出程序 2 创建一个守护进程 1 创建一个输出程序 守护进程不与终端联系,所以,需要另外创建一个程序用于输出。 也可以直接使用/bin/echo ----- example_daemon_help.cc #include <stdio.h> int main(int argc, char** argv) { ...

weixin_34209406的博客 446

三菱FX3U PLC红绿灯ST编程实战:从基础逻辑到急停功能完整实现

本文以十字路口红绿灯控制为例,详细讲解了三菱FX3U PLC使用ST编程的完整实战过程。内容涵盖从基础时序逻辑、状态机设计,到急停功能、黄灯闪烁、昼夜模式切换等高级功能的实现,并提供了代码优化与调试技巧,帮助工程师掌握结构化文本在工业控制中的清晰、结构化应用。

weixin_29070861的博客 533

OpenFOAM-v2006重叠网格挖洞问题实战:如何手动修复overset代码中的边缘识别缺陷

本文深入探讨了OpenFOAM-v2006中重叠网格挖洞问题的实战解决方案,重点修复overset代码中的边缘识别缺陷。通过逆向工程解析挖洞决策机制,设计最小侵入式的函数override方案,并建立多级验证体系,有效解决了网格挖洞区域覆盖不全的问题,提升了计算流体动力学模拟的准确性和可靠性。

weixin_29216049的博客 430

什么是守护进程?

函数使自己成为新 session 的领头进程(会长),并且这个 session 领头进程还会被放入到一个新的进程组中。这个组中必须有一个组长, 组长就是进程组中的第一个进程,组长以外的都是普通的成员,每个进程组都有一个唯一的组ID,进程组的ID和组长的PID是一样的。注意,实际上守护进程的核心工作部分是一个简单的无限循环,我们可以根据实际需求来添加守护进程的具体逻辑。一个普通的进程可以调用。获取指定的进程所在的进程组的组ID,参数 pid 就是指定的进程。将某个进程移动到其他进程组中或者创建新的进程组。

f593256的博客 1173

手把手教你学Simulink--控制执行场景实例:基于Simulink的智能车辆自动紧急制动(AEB)仿真

本文完成了基于 Simulink 的智能车辆自动紧急制动(AEB),实现了:✅ 构建前车急刹与静止障碍物典型场景✅ 设计基于 TTC 的三级 AEB 决策逻辑✅ 验证在高风险场景下有效避免碰撞✅ 掌握从风险评估到制动执行的完整安全链✅ 为ADAS 主动安全功能开发奠定基础。

MHD0815的博客 236

【Linux系统】守护进程

守护进程

weixin_74113106的博客 305

Vue3 - 详细实现移动端H5网页调用摄像头拍照功能,微信公众号网页h5页面打开本地摄像头并点击按钮照相,vue3获取摄像头画面执行拍照保存,调整摄像头前置后置抓拍图片给用户展示或保存手机上传服务器

vue3,H5网页,手机移动端,vue3摄像头拍照,前端h5调用手机摄像头,移动端网页调用摄像头,H5实现手机拍照和选择上传,调用本地摄像头实现拍照,vue3调用摄像头拍照,手机浏览器开启摄像头并进行拍照,H5移动端网页中调用手机摄像头,H5实现web调用摄像头在线照相,vue3h5调用摄像头,微信公众号网页如何调用摄像头拍照,公众号H5页面实现打开摄像头照相,怎么生成临时图片,vue3项目调用摄像头实现拍照功能,摄像头打不开没反应,浏览器不兼容怎么办,摄像头权限不弹出,只能在本地运行,拒绝权限后怎么办,

🏆 前端领域优质创作者 1万+

基于应用谱减法进行语音去噪的算法

在上述代码中首先通过读取语音信号和噪声信号,将两个信号都转换为频域信号,然后计算出语音信号在各频率下的功率谱和噪声信号在各频率下的功率谱,并基于此计算信噪比,接着根据信噪比计算出阈值,并将低于阈值的能量对应的频段进行清零操作,最终实现去噪处理,最后将处理后的信号转换回时域信号。该算法采用谱减法进行降噪处理,能有效地去除语音信号中的噪声,但是在实际应用中,该方法也存在一些问题,如会对语音信号的高频部分产生影响,所以需要在应用过程中进行适当的调整。

weixin_50547796的博客 192

< Linux > 守护进程

目录 1、守护进程 守护进程的概念 进程组和会话 2、守护进程化的方式 TCP网络程序(守护进程化) TCP网络程序(守护进程化)gitee地址 daemon创建守护进程 nohup命令

bit_zyx的博客 3929

GibbsCAM软件二次开发:GibbsCAM软件API接口详解

API(Application Programming Interface,应用程序编程接口)是一种允许不同软件之间进行通信的接口。在GibbsCAM软件中,API提供了与外部程序交互的能力,使得开发者可以利用GibbsCAM的强大功能进行二次开发,定制化满足特定的制造需求。GibbsCAM的API主要基于.NET框架,使用C#或VB.NET等语言进行编程。在GibbsCAM软件中,通过API接口创建自定义几何形状是实现复杂零件设计和加工策略定制的关键步骤。

kkchenjj的博客 1496

Linux下的守护进程

一、什么是守护进程1、守护进程的引入 在现实生活中, 许多大型的软件或服务器必须保证7*24小时(一周7天,一天24小时)无障碍的运行,例如淘宝网、百度搜索引擎、支付宝等等,那么像这样一种要一直运行的程序怎么实现呢?究其本质其实就是我们的守护进程。2、守护进程的定义 守护进程也称精灵进程(Daemon),是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事

snow_5288的博客 9435

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

守护进程详解

一、普通进程运行观察 代码示例: #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <signal.h> int main(int argc, char *const *argv) { printf("进程开始执行!\n"); while (1) { sleep(1); //休眠1秒 //printf("休息1秒,

芒种、的博客 5321

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Linux守护进程

Linux 守护进程是一种在后台运行的特殊进程,它们独立于控制终端,周期性地执行任务或提供服务。创建守护进程需要遵循特定的流程,包括创建子进程、创建新会话、改变当前目录、重设文件权限掩码和关闭文件描述符。守护进程可以通过systemctlservice或systemd命令来管理。

如无必要,勿增实体。 2366

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

守护进程编程

Linux Daemon(守护进程)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。它不需要用户输入就能运行而且提供某种服务,不是对整个系统就是对某个用户程序提供服务。具有以下特点:守护进程一般在系统启动时开始运行,除非强行终止,否则直到系统关机才随之一起停止运行;守护进程一般都以root用户权限运行,因为要使用某些特殊的端口(1-1024)或者资源;

qq_73050400的博客 1135

【Linux】守护进程以及实现一个守护进程

1、什么是守护进程守护进程也称为精灵进程,是运行在后台进程的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。 (1)脱离于控制终端并且在后台运行 (2)不受用户登录注销的影响,它们一直在运行着 Linux大多数服务器就是用守护进程实现的,例如:Internet服务器inetd,Web服务器httpd查看系统中的守护进程:使用命令 ps axj 凡是TPGID一

菜鸟成长记 3696

什么是守护进程?守护进程的特性

 守护进程守护进程是生存期长的一种进程。它们独立于控制终端并且周期性的执行某种任务或等待处理某些发生 的事件。他们常常在系统引导装入时启动,在系统关闭时终止。unix系统有很多守护进程,大多数服务器都是用守护进程实现的。比如,网络服务inetd、 Web服务http等。同时,守护进程完成许多系统任务。比如,作业规划进程crond、打印进程lqd等。这里主要说明守护进程的进程结构,以及如何编写守护进

余长富的专栏 2151

linux守护进程

守护进程是运行在后台的一种特殊进程,它独立于控制终端并且周期性地执行某种任务或循环等待处理某些事件的发生;守护进程一般在系统启动时开始运行,除非强行终止,否则直到系统关机才随之一起停止运行;守护进程一般都以root用户权限运行,因为要使用某些特殊的端口或者资源;守护进程的父进程一般都是init进程,因为它真正的父进程在fork出守护进程后就直接退出了,所以守护进程都是孤儿进程,由init接管;

weixin_45484468的博客 1136

【Linux守护进程】二、守护进程详解

Linux守护进程专题二、守护进程详解。系统学习Linux开发、VIM/GCC/GDB/Make工具、Linux文件IO、进程管理、进程通信、多线程等,请关注专栏免费学习。

仅以此博客记录日常学习工作中所思所得,水平有限,难登大雅,万望海涵。 1380
上一篇: exec族函数
下一篇: linux中的list.h(1)
_IanXiao
博客等级 码龄12年 84粉丝 241原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值