unistd.h中定义的setsid()与fork()

2023-12-16

setsid():是一个UNIX系统调用,用于创建一个新的会话(session)并将当前进程设置为该会话的领头进程(session leader)。通常情况下,setsid() 函数用于创建守护进程(daemon),以确保它与任何终端分离,从而可以在后台独立运行,而不受终端的影响。

1、它创建一个新的会话。

2、将调用进程设置为新会话的领头进程(session leader)。

3、如果调用进程之前是进程组的组长(group leader),那么它会放弃组长地位,以避免接收来自控制终端的信号。

实际就是脱离父进程,自由自在的活着

fork():是一个UNIX和类UNIX系统中的系统调用,用于创建一个新的进程,新进程是调用进程的子进程。fork() 函数的作用是创建一个几乎完全相同的子进程,包括进程的代码、数据和上下文,但子进程拥有自己独立的进程ID(PID)

1、创建新进程: fork() 用于创建一个新的进程,新进程是原进程的副本。这两个进程在调用fork() 之前是完全相同的,但后续它们可以独立运行,执行不同的代码。

2、并发执行: 通常,父进程和子进程会并发运行,即它们可以同时执行不同的代码。这允许在多进程编程中执行并行任务。

3、分支执行: fork() 的典型用例是将一个进程分成两个分支,其中一个分支(子进程)可以执行不同的操作,而另一个分支(父进程)可以执行其他操作。

4、多任务处理: fork() 可用于创建多个进程来处理不同的任务,例如服务器程序可以使用多个进程来同时处理客户端请求。

5、后台任务: 通过fork() 可以创建后台进程,它们在后台独立运行,不受终端会话的影响。

需要注意的是,父进程和子进程之间并不共享内存,它们有各自的内存空间,因此在进程间通信时需要使用专门的IPC(进程间通信)机制,如管道、消息队列、共享内存等。

实例:

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

int main() {
pid_t pid;

// Create a child process
pid = fork();

// Check for errors
if (pid < 0) {
    perror("Fork error");
    exit(1);
}

// If we are in the parent process, exit
if (pid > 0) {
    printf("Parent process exiting.\n");
    exit(0);
}

// We are now in the child process
printf("Child process (daemon) started.\n");

// Create a new session and become the session leader
if (setsid() < 0) {
    perror("Setsid error");
    exit(1);
}

// Change the current working directory to root
if (chdir("/") < 0) {
    perror("Chdir error");
    exit(1);
}

// Close standard file descriptors (stdin, stdout, stderr)
close(STDIN_FILENO);
close(STDOUT_FILENO);
close(STDERR_FILENO);

// Run as a background daemon
while (1) {
    // Your daemon code goes here
    sleep(1); // For demonstration, sleep for 1 second
}

return 0;

}

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

unistd.h中定义的setsid()与fork() 的相关文章

随机推荐

  • SVM原理理解

    目录 概念推导 共识 距离两个点集距离最大的分类直线的泛化能力更好 更能适应复杂数据 怎么能让margin最大 最大化margin公式 求解最大margin值 拉格朗日乘子法 为什么公式中出现求和符号 SVM模型 求解拉格朗日乘子 如何求解
  • 技术面试,如何谈薪资?

    众所周知 程序员是一个很容易出现薪资倒挂的职业 工作 3年比工作 5年薪资高的例子比比皆是 在 你手上有 offer吗 文章中 我们分析了如何巧妙地谈 offer 今天我们一起来分析如何谈薪资 顺利实现薪资倒挂 守住底线 不管是主动换工作还
  • 留给兼容安卓时间不多了!华为原生鸿蒙系统越来越近:跟iOS、安卓一样独立

    前言 据国内媒体报道称 余承东已经明确表态 华为明年将会推出鸿蒙原生应用与原生体验 HarmonyOS NEXT的产品 现在的情况就是 鸿蒙留给兼容安卓生态的时间越来越少了 而在之前已经有不少App厂商转入到他们的生态 并已经在开发相关的A
  • Docker仓库加密认证

    一 强制使用非加密访问仓库 insecure registry 实验环境 准备第二台虚拟机并配置docker服务及开启等 并把文件拷贝到第二台 记得配置好两台虚拟机仓库名的解析 配置步骤 1 配置文件使用非加密端口 vim etc dock
  • 鸿蒙开发入门:快速修复

    快速修复概述 快速修复是HarmonyOS系统提供给开发者的一种技术手段 支持开发者以远快于应用升级的方式对应用程序包进行缺陷修复 和全量应用升级软件版本相比 快速修复的主要优势在小 快和用户体验好 在较短的时间内不中断正在运行的应用的情况
  • Android神兵利器之协程和Lifecycle

    导语 一个安卓开发究竟要经历怎样的颠沛流离才终于能遇见Jetpack 遇见协程和Lifecycle 在Jetpack出现以前安卓应用架构这一块可以说非常混乱 早期没有官方架构组件 小公司可能都是mvc一把梭或者引入了简易版的mvp模式 而大
  • go-zero开发入门之网关往rpc服务传递数据1

    go zero 的网关往 rpc 服务传递数据时 可以使用 headers 但需要注意前缀规则 否则会发现数据传递不过去 或者对方取不到数据 go zero 的网关对服务的调用使用了第三方库 grpcurl 入口函数为 InvokeRPC
  • 30天精通Nodejs--第十三天:MySQL2

    目录 引言 MySQL2简介 使用说明 安装 连接到数据库 连接池 新增 查询 修改 删除
  • 鸿蒙开发入门:应用配置文件概述(一)

    应用配置文件概述 Stage模型 每个应用项目必须在项目的代码目录下加入配置文件 这些配置文件会向编译工具 操作系统和应用市场提供应用的基本信息 在基于Stage模型开发的应用项目代码下 都存在一个app json5及一个或多个module
  • 设置bat工作目录

    在执行bat脚本的时候 如果直接双击bat脚本 此时的工作路径一般为 C Users Administrator gt 很多时候需要将工作路径设置为bat脚本所在的目录 可以在bat脚本内设置当前工作路径为bat文件所在目录 cd d dp
  • 检查网络连通性的几种方法

    检查网络连通性的几种方法 检查网络连通性是确保计算机或设备能够与其他设备或互联网通信的重要步骤 以下是一些用于检查网络连通性的方法 Ping命令 在命令提示符 Windows 或终端 Linux macOS 中 使用ping命令 例如 在W
  • Java面试八股文及答案整理( 2023年 12月最新版,持续更新)

    一 Java 基础 1 JDK 和 JRE 有什么区别 JDK Java Development Kit 的简称 java 开发工具包 提供了 java 的开发环境和运行环境 JRE Java Runtime Environment 的简称
  • 深入理解 Android Activity 启动模式

    在 Android 应用开发中 Activity 是用户界面的核心组件 而 Activity 的启动模式则是决定应用界面如何在任务栈中交互 管理以及呈现的关键因素 正确的启动模式选择能够优化用户体验 提高应用性能 并确保应用在各种情景下都能
  • 各大厂为什么要适配鸿蒙?鸿蒙到底值不值得学

    各大厂为什么要适配鸿蒙 今天在脉脉上看到这个问题 有好多人在下面回复说什么不适配就不爱国之类的话 但是我们仔细想想 这些大厂资本家真的会被这些 不爱国 的舆论影响吗 这些大厂的公关花钱分分钟就能把舆论导向指向其他地方 不然为什么网上那么多黑
  • Centeos安装mysql

    安装mysql 检查MariaDB 因为这个会和MySQL有冲突 所以先检查一下是否有安装 查看mariadb rpm qa grep mariadb 卸载mariadb mariadb libs 5 5 44 2 el7 centos x
  • 规则引擎与商业CRM的完美邂逅:将智能决策融入商业扩展

    一 背景介绍 商业CRM系统的商机模块业务复杂 场景繁多 规则调整频繁 商机流转效率一定程度决定了销售开单的效率 如何高效配合产品侧完成业务规则调整 商机流转经历了硬编码到半配置化的优化升级 过程中遇到了一些问题 也总结了一些经验 今天来和
  • 程序员未来是不是会大量失业?近期分析分享

    程序员未来是不是会大量失业 是的 随着Al的发展恐怕就在这几年 市场环境堪忧 最近两年 也就是从2022年开始 经济下行和行业不景气的情况大家都有目共睹 互联网行业的就业情况越来越不容乐观 头部互联网公司 效益出现了不同程度的下滑 最明显的
  • go-zero开发入门-API服务开发示例

    接口定义 定义 API 接口文件 接口文件 add api 的内容如下 syntax v1 info title API 接口文件示例 desc 演示如何编写 API 接口文件 author 一见 date 2023年12月07日 vers
  • RPA提升电商运营效率!用rpa实现电商主图采集分析

    作为一名经验丰富的文案编辑 经常会面临着许多重复的工作 比如电商主图的采集与分析 通常需要我们手动打开每个商品链接 下载商品主图 然后将其整理成表格 进行分析 这个过程非常繁琐 不仅耗费大量的时间和精力 还容易出错 然而 自从我们开始使用八
  • unistd.h中定义的setsid()与fork()

    setsid 是一个UNIX系统调用 用于创建一个新的会话 session 并将当前进程设置为该会话的领头进程 session leader 通常情况下 setsid 函数用于创建守护进程 daemon 以确保它与任何终端分离 从而可以在后