当前位置: 首页 > 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.lryc.cn/news/622075.html

相关文章:

  • 新手入门Makefile:FPGA项目实战教程(二)
  • 【计算机视觉与深度学习实战】02基于形态学的权重自适应图像去噪系统
  • 大模型 + 垂直场景:搜索 / 推荐 / 营销 / 客服领域开发有哪些新玩法?
  • 短剧小程序系统开发:打造个性化娱乐新体验
  • Apache 如何支持SHTML(SSI)的配置方法
  • 告别手动优化!React Compiler 自动记忆化技术深度解析
  • Docker部署Spring Cloud微服务实战
  • vue一个超简单的菜单栏伸缩示例
  • 剧本杀小程序系统开发:重构推理娱乐生态
  • C语言第八章指针五
  • linux服务器查看某个服务启动,运行的时间
  • Chrome插件开发
  • 最长递增子序列-dp问题+二分优化
  • 智能巡检技术浅析
  • 最新chrome浏览器elasticsearch-head无法安装使用问题
  • 牛市暴跌后什么时候进入好
  • C++ 调试报错 常量中有换行符
  • NAS播放器的新星,一站式全平台媒体库管理工具『Cinemore』体验
  • 高通vendor app访问文件
  • 前端css学习笔记6:盒子模型
  • IP生意的天花板更高了吗?
  • 多路混音声音播放芯片型号推荐
  • Microsoft Visual Studio常用快捷键和Windows系统常用快捷键的整理
  • 深入解析五大通信协议:TCP、UDP、HTTP_HTTPS、WebSocket与GRPC
  • 【Leetcode hot 100】53.最大子数组和
  • 异步任务执行顺序
  • DataGear:一个免费开源的国产数据可视化分析平台
  • 经典BT的连接过程
  • 归并排序和统计排序
  • 智能工厂生产监控大屏-vue纯前端静态页面练习