- 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)
- 线程的调度
- 线程的终止
评论前必须登录!
注册