6. exec函数族和守护进程

1. exec函数族


exec 函数族

背景:fork创建进程之后,子进程和父进程执行相同的代码,但是在实际开发当中,我们希望父子进程执行不同的代码。

作用:执行指定的程序

#include <unistd.h>

int execl(const char *path, const char *arg, ...);

int execlp(const char *file, const char *arg, ...);

成功时执行指定的程序;失败时返回EOF

path 执行的程序名称,包含路径

arg... 传递给执行的程序的参数列表

file 执行的程序的名称,在PATH中查找

注意:两个函数区别execlp不需要写文件名全路径,在PATH查找

最后一个参数必须用空指针(NULL)作结束

进程当前内容被指定的程序替换,但进程号不变

第0个参数必须要写,虽然它没有使用

execl/execlp这类exec系列函数中,第0个参数 指的是传递给新程序的**argv[0]**,也就是命令行参数列表的第一个元素。

具体说明

  1. 参数位置 :函数里arg的第一个值就是第0个参数,比如execl("/bin/ls", "ls", "-l", NULL)中,"ls"就是第0个参数。
  2. 实际作用 :这个参数会成为新程序main函数中argv[0]的值,通常用来表示程序自身的名称(而非实际执行的命令参数)。
  3. 为什么"没使用"却必须写
    • 从系统层面,exec函数要求参数列表必须以程序名(argv[0])开头,这是UNIX/Linux的约定,缺少会导致函数调用失败。
    • 部分程序会读取argv[0]做逻辑处理(比如根据不同的argv[0]表现出不同行为),即使多数程序不直接使用,也必须按规则传递。

简单说,第0个参数是给新程序的argv[0]传值,是exec函数调用的语法要求,缺一不可。

2. 守护进程


3. GDB调试多进程程序

set follow-fork-mode child 设置GDB调试子进程

set follow-fork-mode parent 设置GDB调试父进程

set detach-on-fork on/off 设置GDB跟踪调试单个进程或多个

on: 只调试父进程或子进程的其中一个,(根据follow-fork-mode来决定),这是默认的模式

off:父子进程都在gdb的控制之下,其中一个进程正常调试(根据follow-fork-mode来决定),另一个进程会被设置为暂停状态。

info inferiors 显示GDB调试的进程

inferiors 进程序号(1,2,3...) 切换GDB调试的进程

相关推荐
2023自学中1 小时前
imx6ull 开发板,RTMP 推流本地视频 到虚拟机
linux·音视频·嵌入式·开发板
济6173 小时前
ROS开发专栏---基于图像视觉的目标追踪实验--适配Ubuntu 22.04
嵌入式硬件·嵌入式·ros2·机器人开发·机器人方向
济6174 小时前
ROS开发专栏---视觉图像数据的获取实验--适配Ubuntu 22.04
嵌入式硬件·嵌入式·ros2·机器人开发·机器人方向
2023自学中21 小时前
imx6ull开发板 移植 ffmpeg 4.2.11 + x264 视频编码库
linux·ffmpeg·音视频·嵌入式·开发板
武子康1 天前
Build-Your-Own-X 从零构建轻量级事件驱动微框架:嵌入式与物联网场景下的极简实践
人工智能·后端·物联网·ai·c#·大模型·嵌入式
阿钱真强道2 天前
25 鸿蒙LiteOS GPIO轮询模式实战教程:电平读取与上升沿检测
嵌入式·harmonyos·liteos·开源鸿蒙·瑞芯微·rk2206
秋越2 天前
从工程角度理解嵌入式C语言关键字
c语言·开发语言·嵌入式·嵌入式软件开发·嵌入式c语言·c语言关键字
bbaydnog2 天前
STM32调试三板斧:printf重定向、HardFault定位、逻辑分析仪抓波形,从此告别瞎改代码
stm32·嵌入式·调试
凉、介3 天前
深入理解 ARMv8-A|处理器模式与寄存器
笔记·学习·嵌入式·arm
2023自学中3 天前
imx6ull 开发板,手机,MQTT 物联网通信实验。
linux·服务器·物联网·嵌入式·开发板·应用编程