fork函数和exec族函数的结合使用 的案例

news/2024/11/17 5:43:39/

  首先回顾之前所讲,在说明“为什么要创建进程”的时候,提到过以下两个原因:

其中第一个原因很好理解,而第二个原因就包含了上节所讲的exec族函数的知识点,并且不管是之前的博文还是上节的exec,都提到了一点“exec族函数通常会和fork一起使用,从而实现在原程序运行时,创建一个新进程来执行不同的程序的效果

所以本节来演示如何将fork函数和exec族函数结合起来使用

实现需求:

当父进程检测到输入为1时,创建子进程把配置文件的字段值修改掉

实现思路:

修改配置文件的代码之前就写过:模拟 修改配置文件_mjmmm的博客-CSDN博客

代码位于FILE文件夹下的demo6.c

所以,我的思路是:先将demo6.c再编译生成一个可执行文件;

然后使用execl函数来将“修改参数的可执行文件”替换原来fork后的子进程

demo4.c:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>int main(void)
{pid_t pid;pid_t fork_return;int cmd = 0;printf("please input a cmd number\n");scanf("%d",&cmd);if(cmd == 1){fork_return = fork();if(fork_return > 0){wait(NULL); //不要忘记!}else{printf("This is the son JC,PID = %d\n",getpid());if(execl("/home/mjm/FILE/modify","modify","/home/mjm/FILE/test.config",NULL) == -1){printf("execl failed!\n");perror("why");}}}return 0;
}

再次强调,fork之后的父进程一定要记得等待子进程退出!

并且,我们已经知道在execl成功调用后,程序会被完全替代成新的,而新的程序,也就是modify对应的C程序中,最后包含了return0,当执行到return0的时候,就视为子进程正常退出了。

效果演示:

先将修改参数的文件编译成可执行文件:

然后再运行代码,并输入“1 ”:

 此时再打开config文件:

配置文件修改成功! 

同时,如果此时查看相关进程:“ps -aux|grep out1

会发现PID为4112的子进程已经成功退出,没有变成僵尸进程! 

 


http://www.ppmy.cn/news/1027999.html

相关文章

NanoPi NEO移植LVGL8.3.5到1.69寸ST7789V屏幕

移植前准备 移植好fbtft屏幕驱动 参考链接&#xff1a;友善之臂NanoPi NEO利用fbtft驱动点亮1.69寸ST7789V2屏幕 获取源码 名称地址描述lvglhttps://github.com/lvgl/lvgl.gitlvgl-8.3.5lv_drivershttps://github.com/lvgl/lv_drivers.gitlv_drivers-6.1.1 创建工程目录 创…

婚恋交友h5多端小程序开源版开发

婚恋交友h5多端小程序开源版开发 以下是婚恋交友H5多端小程序的功能列表&#xff1a; 用户注册和登录&#xff1a;用户可以通过手机号码或第三方账号注册和登录。个人信息填写&#xff1a;用户可以填写个人基本信息&#xff0c;包括姓名、性别、年龄、身高、体重、学历、职业等…

STM32 F103C8T6学习笔记6:IIC通信__驱动MPU6050 6轴运动处理组件—一阶互补滤波

今日主要学习一款倾角传感器——MPU6050,往后对单片机原理基础讲的会比较少&#xff0c;更倾向于简单粗暴地贴代码&#xff0c;因为经过前些日子对MSP432的学习&#xff0c;对原理方面也有些熟络了&#xff0c;除了在新接触它时会对其引脚、时钟、总线等进行仔细一些的研究之外…

P5738 【深基7.例4】歌唱比赛

题目描述 n ( n ≤ 100 ) n(n\le 100) n(n≤100) 名同学参加歌唱比赛&#xff0c;并接受 m ( m ≤ 20 ) m(m\le 20) m(m≤20) 名评委的评分&#xff0c;评分范围是 0 0 0 到 10 10 10 分。这名同学的得分就是这些评委给分中去掉一个最高分&#xff0c;去掉一个最低分&#x…

检测新突破 | AlignDet:支持各类检测器自监督新框架(ICCV2023)

引言 论文链接&#xff1a;https://arxiv.org/abs/2307.11077 项目地址&#xff1a;https://github.com/liming-ai/AlignDet 这篇论文主要研究目标检测领域的自监督预训练方法。作者首先指出&#xff0c;当前主流的预训练-微调框架在预训练和微调阶段存在数据、模型和任务上的…

Android Studio实现Spinner下拉列表

效果图 点击下拉列表 点击某一个下拉列表 MainActivity package com.example.spinneradapterpro;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.Spinn…

计算图像哈希SHA-512

1、MATLAB实现 计算图像哈希值SHA-512,在文献[1]提到的算法如下: % Example Code: Create an MD5 crypto-hash of an arbitrary string, "str" % Main class of interest: System.Security.Cryptography.HashAlgorithm% Example String to hash with MD5 %…

编码加强:整理出版的书籍代码、持续研发软件(提升编码能力、打造独立平台)

整理出版的书籍代码 使用版本控制工具&#xff1a;使用Git等版本控制工具&#xff0c;可以方便地管理代码版本&#xff0c;记录每个版本的修改和变化&#xff0c;确保代码的稳定性和可维护性。 编写清晰的注释&#xff1a;编写清晰的注释可以方便读者理解代码的逻辑和功能&…