[Linux系统编程]守护进程/线程(四)

2023-11-04

       距离上一次利用高并发技术实现360度行车记录仪功能已经过去半年了。开始写一系列关于系统编程和网络编程内容进行总结。
       温故而知新,欢迎大家讨论学习。

2021-09-05 补充
1、dup2与dup区别是dup2可以用参数newfd指定新文件描述符的数值。若参数newfd已经被程序使用,则系统就会将newfd所指的文件关闭,若newfd等于oldfd,则返回newfd,而不关闭newfd所指的文件。dup2所复制的文件描述符与原来的文件描述符共享各种文件状态。共享所有的锁定,读写位置和各项权限或flags等.
返回值:
若dup2调用成功则返回新的文件描述符,出错则返回-1.
2 主控线程不能用return 退出main空间,子线程可以。exit退出进程

文章目录

1 守护进程

1.1 什么是守护进程

  1. 在linux系统中,我们会发现在系统启动的时候有很多的进程就已经开始跑了,也称为服务,这也是我们所说的守护进程。
  2. 守护进程(daemon)是生存期长的一种进程,没有控制终端。
  3. 它们常常在系统引导装入时启动,仅在系统关闭时才终止。
  4. UNIX系统有很多守护进程,守护进程程序的名称通常以字母“d”结尾:例如,syslogd 就是指管理系统日志的守护进程
  5. 通过ps进程查看器 ps -efj 的输出实例,内核守护进程的名字出现在方括号中,大致输出如下:
    #

1.2 守护进程创建步骤

  1. fork子进程,让父进程终止。
  2. 子进程调用,setsid()创建会话。
  3. 通常根据需要,改变工作目录chdir
  4. 通常根据需要,重设umask文件权限掩码
  5. 通常根据需要,关闭/重定向文件描述符
  6. 守护进程,业务逻辑。while()

1.3 守护进程代码实现(重点)

主要是理解一些概念,重点参考一下文献。

参考文献(非常重要)
1 掩码+进程组+会话的描述
2 dev/null是什么
3标准输入 标准输出 标准错误

#include <stdio.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#include <pthread.h>
void sys_err(const char *str)
{
   
	perror(str);
	exit(1);
}
int main(int argc, char *argv[])
{
   
    pid_t pid;
    int ret, fd;
    pid = fork();
    if (pid > 0)                // 父进程终止
        exit(0);
    pid = setsid();           //创建新会话
    if (pid == -1)
        sys_err("setsid error");
    ret = chdir("/home/itcast/28_Linux");       // 改变工作目录位置
    if (ret == -1)
        sys_err("chdir error");

    umask(0022);            // 改变文件访问权限掩码

    close(STDIN_FILENO);    // 关闭文件描述符 0标准输入 //因为0 1 2 都是进程启动默认启动的

    fd = open("/dev/null", O_RDWR);  //  fd --> 0
    if (fd == -1)
        sys_err("open error");

    dup2(fd, STDOUT_FILENO); // 重定向 stdout和stderr
    dup2(fd, STDERR_FILENO);

    while (1);</
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[Linux系统编程]守护进程/线程(四) 的相关文章

  • 如何为 Linux 桌面条目文件指定带有相对路径的图标?

    对于我的一个 Linux 应用程序 我有应用程序二进制文件 一个 launcher sh 脚本 针对 LD LIBRARY PATH 和一个 desktop 文件 所有这些都位于同一文件夹中 我想使用图标的相对路径而不是绝对路径 我试过了
  • 在 .gitconfig 中隐藏 GitHub 令牌

    我想将所有点文件存储在 GitHub 上 包括 gitconfig 这需要我将 GitHub 令牌隐藏在 gitconfig 中 为此 我有一个 gitconfig hidden token 文件 这是我打算编辑并放在隐藏令牌的 git 下
  • Linux 上的静态 Qt5 构建:部署时如何处理字体?

    我使用这些配置选项创建了 Qt 5 2 0 库的静态版本 Ubuntu 12 04 开源 确认许可 force pkg config 发布 静止的 前缀 home juzzlin qt5 无icu opengl桌面 无油嘴滑舌 辅助功能 n
  • 就分页分段内存而言的程序寿命

    我对 x86 Linux 机器中的分段和分页过程有一个令人困惑的概念 如果有人能澄清从开始到结束所涉及的所有步骤 我们将很高兴 x86 使用分页分段内存技术进行内存管理 任何人都可以解释一下从可执行的 elf 格式文件从硬盘加载到主内存到它
  • Linux 上的 Pervasive ODBC 错误 [01000][unixODBC][驱动程序管理器]无法打开 lib '/usr/local/psql/lib/odbcci.so':找不到文件

    我正在尝试让 Pervasive v10 客户端 ODBC 在 Centos 6 上运行 据我所知 没有 64 位 ODBC 客户端 因此我必须使用 32 位客户端 我终于成功安装了它 但尝试使用时出现以下错误 isql v mydsn 0
  • 使用非规范地址检索内存数据会导致 SIGSEGV 而不是 SIGBUS

    我无法使用以下汇编代码产生 总线错误 这里我使用的内存地址不是合法的 规范地址 那么 我怎样才能触发该错误呢 我在带有 NASM 2 14 02 的 Ubuntu 20 04 LTS 下运行这段代码 但它会导致负载出现 SIGSEGV 分段
  • 如何让R使用所有处理器?

    我有一台运行 Windows XP 的四核笔记本电脑 但查看任务管理器 R 似乎一次只使用一个处理器 如何让 R 使用全部四个处理器并加速我的 R 程序 我有一个基本系统 我使用它在 for 循环上并行化我的程序 一旦您了解需要做什么 此方
  • 使用包管理器时如何管理 Perl 模块?

    A 最近的问题 https stackoverflow com questions 397817 unable to find perl modules in intrepid ibex ubuntu这让我开始思考 在我尝试过的大多数 Li
  • .net-core:ILDASM / ILASM 的等效项

    net core 是否有相当于 ILDASM ILASM 的功能 具体来说 我正在寻找在 Linux 上运行的东西 因此为什么是 net core ildasm 和 ilasm 工具都是使用此存储库中的 CoreCLR 构建的 https
  • Intel 上的 gcc 中的 _mm_pause 用法

    我参考过这个网页 https software intel com en us articles benefitting power and performance sleep loops https software intel com
  • 错误:“rjags”的包或命名空间加载失败

    在终端的 conda 环境之一中 我能够成功安装包 rjags 但是 当我在该环境中运行 R 并运行库 rjags 时 出现以下错误 加载所需的包 coda 错误 rjags 的包或命名空间加载失败 rjags 的 loadNamespac
  • 绕过 dev/urandom|random 进行测试

    我想编写一个功能测试用例 用已知的随机数值来测试程序 我已经在单元测试期间用模拟对其进行了测试 但我也希望用于功能测试 当然不是全部 最简单的方法是什么 dev urandom仅覆盖一个进程 有没有办法做类似的事情chroot对于单个文件并
  • 如何在 *nix 中登录时运行脚本?

    我知道我曾经知道如何做到这一点 但是 如何在 unix 中登录时运行脚本 bash 可以 From 维基百科 Bash http en wikipedia org wiki Bash 28Unix shell 29 当 Bash 启动时 它
  • 使用os.execlp时,为什么`python`需要`python`作为argv[0]

    代码是这样的 os execlp python python child py other args this works os execlp python child py other args this doesn t work 我读过
  • 从 Linux 内核模块中调用用户空间函数

    我正在编写一个简单的 Linux 字符设备驱动程序 以通过 I O 端口将数据输出到硬件 我有一个执行浮点运算的函数来计算硬件的正确输出 不幸的是 这意味着我需要将此函数保留在用户空间中 因为 Linux 内核不能很好地处理浮点运算 这是设
  • 无法显示 Laravel 欢迎页面

    我的服务器位于 DigitalOcean 云上 我正在使用 Ubuntu 和 Apache Web 服务器 我的家用计算机运行的是 Windows 7 我使用 putty 作为终端 遵循所有指示https laracasts com ser
  • 嵌入式 Linux – 部署固件更新的机制? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在考虑在 Yocto 项目上开发一个嵌入式 Linux 项目 一个工业应用程序 我有几个问题想问那些有嵌入式 Linux 经验的人 Y
  • 从核心转储中获取堆栈跟踪

    如何从核心转储文件中获取堆栈跟踪 该文件大约 14 mb 是在我的应用程序退出并显示 分段错误 后生成的 我使用的是红帽 5 5 gdb usr bin myapp binary corefile 然后 使用以下之一 gdb bt gdb
  • 从另一个 python 脚本获取返回信息

    我在 Linux 上 我有一个 python 脚本 我想从另一个 python 脚本调用它 我不想将其作为模块导入 为了一层安全性 现在为了学术练习 因为我想弄清楚这一点 我实际上想让一个脚本使用 os system 或另一个类似的函数 并
  • 在 C 中运行 setuid 程序的正确方法

    我有一个权限为4750的进程 我的Linux系统中存在两个用户 root 用户和 appz 用户 该进程继承以 appz 用户身份运行的进程管理器的权限 我有两个基本惯例 void do root void int status statu

随机推荐

  • Nice! I just got a Minecraft gift code for FREE! :D https://freeminecraftgiftcode.net

    Nice I just got a Minecraft gift code for FREE D https freeminecraftgiftcode net Nice I just got a Minecraft gift code f
  • Nodejs学习笔记 - 版本号

    npm outdated 查看过期了的包 也不能说过期 反正版本号不是最新的 就那么个意思 QWQ npm update 更新那个包 语言组织能力有点差 理解就行了 QWQ 进入正题了哇 版本号 eg 13 1 4 上边的版本号共分为3块
  • wind10 idea中 go 开发环境搭建

    下载安装包 国内的 不用翻墙 https studygolang com 官网 需翻墙 https golang org 这里使用的的是第一种https studygolang com 下载后解压到本地 目录结构 配置环境变量 path中配
  • while语句中的break和continue

    1 break介绍 include
  • 怎么彻底删除电脑上的软件_彻底删除流氓软件的两个工具!

    流氓软件 弹出广告 我想 这些应该让很多同学都苦不苦不堪言 卸载不干净 无法卸载 卸载残留 这些顽固的软件就如同牛皮癣一样 一旦粘着就很难摆脱 本文就来推荐2款软件 这两款都是经过多年使用 对比保留下来的 从此就可以对流氓软件说再见了 前言
  • android studio构建的AAB是什么

    AAB 是 Android App Bundle 的缩写 是一种由 Google 推出的 Android 应用程序发布格式 AAB 格式的应用程序包含了应用程序的所有代码和资源 但是与传统的 APK 包不同 AAB 包含了多个分割的模块 每
  • JAVA、MySql实现登录注册(网页)

    初学JAVA EE 老师留下一小作业 用JAVA实现与服务器端交互 实现登录和注册功能 初学一种专业课很多老师都会留下一种让学生实现登录和注册的作业 下面是记录的实现步骤 1 首先是账号密码输入框和按钮 登录
  • Sa-Token的Token有效期和临时有效期的区别

    各位不要再卷了 周六我在家打着游戏 群消息就一直叮叮叮 进去看了看 周六还加班干活 哎真卷 ps 在卷就没了 吐槽一下 进入正题 就周六群友提问做一下总结 群友问题 为什么 不能续期 先说一下这位群友的测试方法 token有效期 10秒 在
  • 关于checkpoint机制

    关于checkpoint机制 一 简介 思考一下这个场景 如果重做日志可以无限地增大 同时缓冲池也足够大 那么是不需要将缓冲池中页的新版本刷新回磁盘 因为当发生宕机时 完全可以通过重做日志来恢复整个数据库系统中的数据到宕机发生的时刻 但是这
  • idea忽略.iml文件和.idea目录(避坑和填坑)

    当操作git下的项目时 iml文件和 idea目录下的有些文件会显示已被改动会出现在git待提交目录下 这里为了防止提交这些并不需要的东西 需要在idea中设置忽略这些东西 注 输入完 iml和 idea后点回车再点OK 不然不会保存 这些
  • hiberate4整合Spring3.1时出现 java.lang.NoClassDefFoundError: Lorg/hibernate/cache/CacheProvider

    hibernate4整合spring3 1的过程中 发现了java lang NoClassDefFoundError Lorg hibernate cache CacheProvider异常 查了一下相关资料 原来发现hibernate4
  • 关于大数据技术原理与应用的学习(5)

    学习目标 大数据技术原理与应用 学习内容 5 NoSQL数据库 例如 5 1NoSQL数据库 5 2与关系数据库的比较 5 3四大类型 5 4理论基石 5 5从NoSQL到NewSQL 5 6文档数据库MongoDB 学习时间 2022 0
  • Android 验证码输入框 连续性粘贴 使用第三方包

    第一步 android compileOptions sourceCompatibility JavaVersion VERSION 1 8 targetCompatibility JavaVersion VERSION 1 8 depen
  • GPU与CPU版本的矩阵乘法对比

    转载自 http www cnblogs com stormhan p 5467187 html 由于刚刚开始学习Cuda 还没有整理出一个完整的Cuda类 只是在Nvidia提供的kenerl架构上做修改 但用于初体验GPU给我们带来的好
  • OSG+MyGUI结合下中文输入的若干问题

    好久又没写文章了 经过这两天的研究 终于搞定了OSG MYGUI的中文输入问题 现在进行一下所遇问题的汇总 方便自己以后查阅 问题1 小键盘数字的输入问题 这个是很久以前解决的 osg并不能给你真正的小键盘输入值 还是得自己处理 代码片段1
  • 给360安全浏览器设置一个图片背景/主题

    此方法适用于360安全浏览器 其他浏览器请移步 给浏览器设置一个图片背景 主题 看看效果 1 点击 管理 gt 添加 gt 搜索stylebot gt 安装 2 安装好了会有小图标 S 或者小图标 css 点击 S css图标 gt Opt
  • 测试用例应该怎么写

    一 背景 有些测试同学 写测试用例的时候 直接就是将需求文档上的内容抄一遍 转换成测试用例的格式 没有加入任何自己的思考和理解 没有融入任何测试方法论 测试完全依赖于需求文档的质量 依赖于产品经理保姆级的服务 需求写得细 测试用例覆盖就全面
  • 详解numpy.random.shuffle函数

    文章目录 函数原型 参数解析 该函数的注意事项 例子 示例代码 示例结果 参考 numpy的random模块中的shuffle函数用于np ndarray数组中的元素打乱顺序 进打乱多维数组的第一维顺序 本博客详细节将该函数的API 并给出
  • Hive---拉链表设计与实现

    1 数据同步问题 Hive在实际工作中主要用于构建离线数据仓库 定期的从各种数据源中同步采集数据到Hive中 经过分层转换提供数据应用 比如每天需要从MySQL中同步最新的订单信息 用户信息 店铺信息等到数据仓库中 进行订单分析 用户分析
  • [Linux系统编程]守护进程/线程(四)

    距离上一次利用高并发技术实现360度行车记录仪功能已经过去半年了 开始写一系列关于系统编程和网络编程内容进行总结 温故而知新 欢迎大家讨论学习 2021 09 05 补充 1 dup2与dup区别是dup2可以用参数newfd指定新文件描述