当前位置: 首页 > news >正文

exec函数族、线程

  • exec函数族
    • 在一个进程里面执行另外一个文件(可执行文件)
    • 核心特点
      • 执行成功不返回​:如果执行成功,调用进程的代码段、数据段等将被新程序完全替换,不会返回到原程序
      • 进程ID不变:新程序继承原进程的PID、PPID、优先级等属性
      • 文件描述符:默认继承已打开的文件描述符(除非设置FD_CLOEXEC标志)
      • 信号处理:被捕获的信号重置为默认行为,其他信号设置保持不变
    • execl :int execl(const char *path, const char*arg,/*(char *)NULL */);
      • 参数:path:要执行的可执行文件的路径和名称;arg:执行该可执行文件时需要传递的参数;NULL:参数传递结束标志
      • 返回值:出错:-1
    • int execv(const char *path, char *const argv[]);
    • execlp :int execlp(const char *file const char *arg,/*(char *) NULL */);
      • 功能:从PATH指定的系统路径下寻找该可执行文件
      • 参数:file:需要执行的可执行文件的名称(系统路径下已有的文件)arg:执行该可执行文件时需要传递的参数;NULL:参数传递结束标志
    • int execvp(const char *file, char *const argv[]);eg.

    • 常见使用模式:
      • 配合fork使用

  • 线程
    • 线程是操作系统能够进行操作调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。
    • 线程的创建
      • 线程由某个进程创建,一个进程可以创建多个线程,这些线程共享进程的资源(堆区、数据区、文本区区),但每个线程有自己的栈区空间(8M)和寄存器状态
    • 线程的调度
      • 宏观并行,微观串行
    • 线程的终止
      • 线程退出
      • 回收线程资源空间
  • 进程和线程的区别
    • 进程
      • 进程是操作系统资源分配的最小单位
      • 资源消耗大,每次开创需要有0-4G的虚拟内存空间
      • 由操作系统创建,创建时耗比线程大,跨进程调度比跨线程调度慢
      • 进程间不能直接通信,需要使用进程间通信机制(IPC)
      • 进程安全性高,各进程空间独立
    • 线程
      • 线程时操作系统任务调度的最小单位
      • 资源消耗小,只需所在进程为其开辟8M的栈区空间
      • 由所在进程创建,跨进程调度比跨线程调度慢
      • 通信简单,可以使用线程共享的区域进行通信(比如全局变量)
      • 线程想比进程安全性差,一个线程异常可能影响同一进程中的所有线程
    • 线程的相关编程
      • 线程的创建
        • #include <pthread.h>
        • pthread_create :int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void *), void *arg);
          • 功能:创建一个新的线程
          • 参数:thread:保存线程ID的变量地址;attr:线程属性的对象地址;NULL:按照默认属性创建;start_routine:函数的指针:指向线程启动后要执行的任务(线程任务函数);arg:为线程任务函数传递的参数
          • 返回值:成功:0;失败:非0

eg.需要注意的是,线程相关函数在编译时需要链接pthread库(-pthread)

  • 线程的调度
  • 线程的终止
http://www.dtcms.com/a/333534.html

相关文章:

  • termios 线程 poll epoll进化 二叉AVL红黑树
  • Redis入门和简介
  • python学习打卡day35
  • 分库分表和sql的进阶用法总结
  • AI客户维护高效解决方案
  • element-plus 如何通过js验证页面的表单
  • 开发避坑指南(27):Vue3中高效安全修改列表元素属性的方法
  • IP地址代理服务避坑指南:如何选择优质的IP地址代理服务公司?
  • 前端设置不同环境高德地图 key 和秘钥(秘钥通过运维统一配置)
  • 六大主流负载均衡算法
  • w484扶贫助农系统设计与实现
  • 【postgresql】一文详解postgresql中的统计模块
  • [Pyro概率编程] 概率分布 | 共轭计算 | 参数存储库
  • Qt开发:实现跨组件的条件触发
  • android 悬浮窗权限申请
  • 正点原子STM32H743配置 LTDC + DMA2D
  • 零基础学会制作 基于STM32单片机智能加湿系统/加湿监测/蓝牙系统/监测水量
  • Docker部署MySQL命令解读
  • redis-保姆级配置详解
  • 嵌入式软件开发--回调函数
  • 大肠杆菌重组蛋白表达致命痛点:包涵体 / 低表达 / 可溶性差?高效解决方案全解析!
  • JVM核心原理与实战优化指南
  • c++程序示例:多线程下的实例计数器
  • Nginx反向代理与缓存实现
  • 企业级Java项目和大模型结合场景(智能客服系统:电商、金融、政务、企业)
  • 正确维护邵氏硬度计的使用寿命至关重要
  • 【办公类110-01】20250813 园园通新生分班(python+uibot)
  • 量化线性层(42)
  • JavaScript 逻辑运算符与实战案例:从原理到落地
  • JavaScript 中 call、apply 和 bind 方法的区别与使用