今天继续进程的学习

进程由操作系统创建
进程是操作系统资源分配的最小单位

#include<sys/types.h>
#include<sys/wait.h>
pid_t wait(int *wstatus);

功能:阻塞等待回收子进程的资源空间
参数:
    wstatus:保存子进程消亡状态的变量地址
                    NULL:不保存子进程退出的状态
返回值:
    成功:返回回收到的子进程的PID号
    失败:-1

pid_t waitpid(pid_t pid, int *status, int options);

功能:回收指定进程的资源
           和wait功能相似,比wait更灵活
参数:
  pid:
  <-1 回收指定进程组内的任意子进程 (-100.等待GID=100的进程组中的任意子进程)
  -1   回收任意子进程,组内外
  0    回收和当前调用waitpid一个组的所有子进程,组内 
  > 0 回收指定ID的子进程
    
  status 子进程退出时候的状态,
    如果不关注退出状态用NULL;
  options 选项:
    0 表示回收过程会阻塞等待
    WNOHANG 表示非阻塞模式回收资源
返回值:成功 返回接收资源的子进程pid
    失败  -1
    设定为非阻塞且没有回收到子进程返回0 

子进程资源空间回收策略
1)wait阻塞回收:一般情况下,父进程专门负责资源回收
2)waitpid非阻塞方式回收:搭配轮询方式回收
3)不回收:子进程的任务需要一直执行
4)异步回收:当子进程结束时,通知父进程进行回收

exec:函数族

在一个进程里面执行另外一个文件(可执行文件):
int execl(const char *path, const char *arg,.../* (char *) NULL */);
参数:
  path:要执行的可执行文件的路径和名称
  arg:执行该可执行文件时需要传递的参数
  NULL:参数传递结束标志
返回值:
  出错:-1

int execlp(const char *file, const char* arg,.../* (char *) NULL */);
功能:从PATH指定的系统路径下寻找该可执行文件
参数:
  file:需要执行的可执行文件的名称(系统路径下已有的文件)
  arg:执行该可执行文件时需要传递的参数
int execle(const char *path, const char* arg,.../* (char *) NULL,char * const envp[] */);
int execv(const char *path, char *const argv[]);
int execvp(const char *file, char *const argv[]);
int execvpe(const char *file, char *const argv[], char *const envp[]);

注:
l:list 列表
p: path 路径:系统路径
v: vector 容器
e:env 环境变量

下面开始学习线程

线程:
1.什么是线程
轻量级的进程,可实现多任务的并发。

进程是操作系统资源分配的最小单位;
线程是操作系统任务调度的最小单位。

2.线程的创建
线程由某个进程创建
进程创建线程时,会为其分配独立的(8M)栈区空间;
线程和所在进程,以及进程中的其他线程,共用进程的堆区、数据区、文本区

3.线程的调度
宏观并行,微观串行

4.线程消亡
1)线程退出
2)回收线程资源空间

5.进程和线程的区别
进程:进程是操作系统资源分配的最小单位;
资源消耗:进程资源开销大,每次创建都需要有0-4G的虚拟内存空间
效率角度:由操作系统创建,创建时耗时比线程大;跨进程调度比跨线程调度慢
通信方面:进程间不能直接通信,需要使用进程间通信机制(IPC机制)
安全性角度:进程安全性比线程高,各进程空间独立

线程:线程是操作系统任务调度的最小单位。
资源消耗:资源开销较小,只需要所在进程为其开辟8M的栈区空间
效率角度:由所在进程创建;跨进程调度比跨线程调度慢
通信方面:通信简单,可以使用线程共享的区域进行通信(比如全局变量)
安全性角度:线程没有进程安全性好,一个线程异常可能影响同一进程中的所有线程

6.线程的相关编程
1)线程的创建:pthread_create();
          pthread_self:获取当前线程的ID号
2)线程的调度:由操作系统调度
3)线程消亡:
  ①线程退出:pthread_exit();
  ②线程回收:pthread_join();

#include<pthread.h>
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

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐