云计算百科
云计算领域专业知识百科平台

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)

  • 线程的调度
  • 线程的终止
赞(0)
未经允许不得转载:网硕互联帮助中心 » exec函数族、线程
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!