学习记录——day24 多进程编程

news2024/9/23 7:30:37

创建三个进程

可以让父进程创建一个子进程,再由父进程或者子进程创建一个子进程

#include <myhead.h>
int main(int argc, char const *argv[])
{
    pid_t pid = fork();

    if (pid >0)
    {
        //父进程
        pid_t pid1 = fork();
        if (pid1 >0)
        {
            printf("father\n");
        }else if (pid1 == 0)
        {
            printf("child 2\n");

            sleep(8);
            printf("c2 run\n");
            exit(EXIT_SUCCESS);
        }
        
    }
    else if (pid ==0)
    {
        printf("child 1\n");

        sleep(5);
        printf("c1 run\n");
        exit(EXIT_SUCCESS);
    }else
    {
        perror("fork error");
        return -1;
    }

    wait(NULL);
    wait(NULL);

    printf("f\n");
    sleep(3);
    return 0;
}

 写时拷贝技术

特殊进程的验证

僵尸进程验证

        子进程已经退出,但其父进程未为其收尸(回收资源)

#include<myhead.h>

int main(int argc, const char *argv[])
{
    pid_t pid = fork();      //创建出子进程

    if(pid < 0)
    {
        perror("fork error");
        return -1;
    }else if(pid == 0)
    {
        printf("我是子进程\n");
        exit(EXIT_SUCCESS);         //退出子进程
    }

    //父进程内容
    printf("我是父进程\n");
    sleep(5);
    return 0;
}

 孤儿进程验证

        父进程结束,子进程还在

#include<myhead.h>

int main(int argc, const char *argv[])
{
    pid_t pid = fork();      //创建出子进程

    if(pid < 0)
    {
        perror("fork error");
        return -1;
    }else if(pid > 0)
    {
        printf("我是父进程\n");
        exit(EXIT_SUCCESS);         //退出子进程
    }

    //父进程内容
    printf("我是子进程\n");
    sleep(5);
    return 0;
}

创建守护进程

        守护进程相当于一个服务,不依赖于任何终端而存在,随着系统的动而启动,终止而结束

        守护进程制作流程:

                1)创建子进程,让其成为孤儿进程:fork exit

                2)将自己设置为会话组组长,不依赖终端:setsid

       #include <unistd.h>

       pid_t setsid(void);
    功能:设置当前进程的id号为会话组组长
    参数:无
    返回值:新的会话组id号,失败返回-1并置位错误码

                3)更改操作目录为根目录:chdir

       #include <unistd.h>

       int chdir(const char *path);
       功能:设置当前进程操作的目录
       参数:要操作的目录
       返回值:成功返回0,失败返回-1并置位错误码

                4)设置文件操作权限:umask

                5)将将标准输入、输出、出错文件描述符重定向到指定文件中:dup2

#include <myhead.h>
int main(int argc, char const *argv[])
{
    pid_t pid = fork();
    if (pid < 0)
    {
        perror("fork");
        return -1;
    }else if (pid > 0)
    {
        exit(EXIT_SUCCESS);
    }
    
    setsid();  //设置会话组组长

    chdir("/");

    umask(0);

    int fd = open("./log.txt",O_WRONLY|O_APPEND|O_CREAT,0664);
    if (-1 ==fd)
    {
        perror("open");
    }
    
    dup2(fd,STDIN_FILENO);
    dup2(fd,STDOUT_FILENO);
    dup2(fd,STDERR_FILENO);   //标准输入输出出错 重定向到文件   
                              
    while (1)
    {
        printf("hello\n"); //此时为全缓存
        fflush(fd);
        sleep(1);
    }

    close(fd);
    
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1966776.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

linux Ubuntu 安装mysql-8.0.39 二进制版本

我看到网上很多都写的乱七八糟, 我自己总结了一个 首先, 去Mysql官网上下载一个mysql-8.0.39二进制版本的安装包 这个你自己去下载我这里就写一个安装过程和遇到的坑 第一步 解压mysql压缩包和创建my.cnf文件 说明: 二进制安装指定版本MySQL的时候&#xff0c;需要手动写配置…

十月稻田玉米品类全国销量领先背后:“卖点”到“买点”的用户思维

近日&#xff0c;十月稻田在梯媒全新上线的新潮玉米广告&#xff0c;吸引了很多消费者的注意。 画面里&#xff0c;十月稻田的黄糯玉米棒金黄且饱满&#xff0c;旁白是广告语&#xff1a;“新玉米上市&#xff0c;香香香&#xff01;”。这支广告也挑起了许多观众的食欲&#…

【QGroundControl二次开发】七.QGC自定义MAVLink消息MavLink通信协议 C++应用

1. 接收解析源码分析 通过接收串口或UDP发来的的字节流buffer&#xff0c;长度lengthbuffer.size()&#xff0c;通过下列脚本解析&#xff0c;每解析出一个mavlink数据包就执行onMavLinkMessage函数 for(int i 0 ; i < length ; i){msgReceived mavlink_parse_char(MAVL…

【运维自动化】网络统一监控运维管理解决方案(PPT建设方案)

运维自动化是提升IT运维效率、降低人力成本、增强系统稳定性和可靠性的关键举措。随着业务规模的增长&#xff0c;传统的手动运维方式已难以满足快速响应和高效管理的需求。自动化运维通过脚本、工具和系统平台&#xff0c;实现日常任务自动化执行、故障预警与快速恢复、资源优…

数据结构笔记纸质总结

1.基本概念 2.复杂度 3.线性表 4.栈 5.队列 6.串 7.数组 8.矩阵 9.广义表 10.树

15.3 Zookeeper官方使用_实现分布式锁

1. 简介 2. 代码演示 2.1 客户端连接类 package com.ruoyi.common.zookeeper;import com.ruoyi.common.exception.UtilException; import

命途多舛的Concepts:从提出到剔除再到延期最后到纳入,Concepts为什么在C++中大起大落?

在C的漫长发展史中&#xff0c;Concepts&#xff08;概念&#xff09;的故事显得尤为引人注目。它的历程不仅是C社区技术演进的缩影&#xff0c;也是对软件工程实践的一次深刻反思。本文将详细剖析C的Concepts&#xff1a;它是什么&#xff0c;它的设计初衷与使用场景&#xff…

快手商业化 Java后端 二面|面试官很nice

面试总结&#xff1a;没有那种纯八股问题&#xff0c;都是偏向于情景题。看到面试官最后出了一道多叉树的题目&#xff0c;我以为是想直接刷人&#xff0c;但还是尽力去尝试了一下&#xff0c;最后也没做出来&#xff0c;面试官很nice&#xff0c;在答不上来的时候会引导我去思…

煤矿行业智慧矿山信息化解决方案

文章摘要 煤矿行业背景概述煤炭行业经历了从普通机械化到自动化的跨越&#xff0c;目前正向智能化发展。尽管煤矿智能化尚处于起步阶段&#xff0c;但智能化程度正不断进步。 煤矿信息化发展趋势信息化发展趋势从单机自动化监控系统&#xff0c;发展到全矿井综合自动化系统&am…

【算法】斐波那契查找(黄金分割查找)

原理 斐波那契查找的原理与二分查找、插值查找相似&#xff0c;仅仅是改变了中间节点&#xff08;mid&#xff09;的位置&#xff0c;mid 不再是中间或插值得到的&#xff0c;而是位于黄金分割点的附近&#xff0c;即 mid low F(k-1)-1 &#xff08;F代表斐波那契数列&#…

Java 应用中的内存泄漏:常见场景及最佳实践

内存泄漏是 Java 应用程序中一个常见而棘手的问题&#xff0c;它会导致应用程序的内存使用不断增长&#xff0c;最终影响性能和稳定性。尽管 Java 提供了垃圾回收机制来自动管理内存&#xff0c;但内存泄漏问题依然普遍存在。内存泄漏的根源可能包括不再使用的对象仍被持有引用…

第四范式上线搜广推一体化平台 赋能企业高效增长

产品上新 Product Release 今天&#xff0c;第四范式产品再度上新&#xff0c;正式升级并推出的“搜广推”一体化平台——天枢。 天枢拥有全面的用户画像分析、端到端的搜索推荐一体化、一站式流量运营管理等能力&#xff0c;集合智能搜索、智能推荐和智能推广三大能力于一身&a…

酷柚易汛ERP全新功能插件上线“业绩提成”很多老板期待已久,终于来啦!

业绩提成基于进销存系统销货业务设计的、用于自动化处理业务员销货业绩与提成计算过程的插件&#xff0c;汇总累计进销存系统产生的业绩额度并根据自定规则计算对应提成金额&#xff0c;以减少人力计算成本 多场景适配 集成了常用的提成方式&#xff0c;并且可设置提成额度限…

启动 /使用/关闭 Redis 服务器

1. Linux 启动 Linux 系统启动 Redis 有两种方法&#xff0c;分别是前台启动&#xff0c;后台启动&#xff0c;两者各有差异&#xff1b; &#xff08;1&#xff09;前台启动 首先&#xff0c;需要进入 bin 路径(安装路径不同输入的命令也不同); 个人的命令&#xff08;一般…

Ubantu中Docker-Compose的安装与卸载

文章目录 一、卸载二、安装安装Docker-Compose添加权限验证 一、卸载 sudo rm /usr/local/bin/docker-compose二、安装 安装Docker-Compose curl -L https://github.com/docker/compose/releases/download/1.21.1/docker-compose-uname -s-uname -m -o /usr/local/bin/docke…

【Python正则-驯化】一文学会通过Python中的正则表达式提取文本中的日期

【Python正则-驯化】一文学会通过Python中的正则表达式提取文本中的日期 本次修炼方法请往下查看 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合&#xff0c;智慧小天地&#xff01; &#x1f387; 免费获取相关内容…

吴恩达机器学习-C1W3L2-逻辑回归之S型函数

可选实验:逻辑回归 在这个不评分的实验中&#xff0c;你会 探索sigmoid函数(也称为logistic函数)探索逻辑回归;哪个用到了s型函数 import numpy as np %matplotlib widget import matplotlib.pyplot as plt from plt_one_addpt_onclick import plt_one_addpt_onclick from l…

java远程调试

java远程调试 idea2024创一个Spring Web项目springdemo1 使用maven-assembly-plugin插件打包成JAR文件 pom.xml参考如下 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi&quo…

【C#之WPF,给Border设置背景图片,代码运行后图片无法显示】

C#之WPF&#xff0c;给Border设置背景图片&#xff0c;代码运行后图片无法显示 方案 方案 选中你的图片找到属性&#xff1b; 这两个都改一下&#xff1b; 改好之后在运行就可以正常显示了。

uni-app中使用支付宝扫码插件并且在真机调试时使用(详细教程)

前言&#xff1a;uni-app自带的扫码api 识别不灵敏&#xff0c;每次都得扫很长时间且不断调整才能扫出来码&#xff0c;所以决定使用支付宝扫码插件&#xff0c;官方插件地址&#xff1a;https://ext.dcloud.net.cn/plugin?id2636#detail 使用步骤: 1、下载插件到项目中 2、…