linux多进程和多线程

时间:2023-01-20 16:41:21

转载自CodeUniverse的博客

进程可执行程序是存储在磁盘设备上的由代码和数据按某种格式组织的静态实体,而进程是可被调度的代码的动态运行

在Linux系统中,每个进程都有各自的生命周期。在一个进程的生命周期中,都有各自的运行环境以及所需的资源,这些信息都记录在各自的进程控制块中,以便系统对这些进程进行有效的管理,进程控制块的结构如下图所示:

linux多进程和多线程

每个进程都有各自独立的虚拟地址空间,空间的大小与所基于的硬件体系结构有关。

虚拟空间中各区代表的意义,如:

代码段:存储指令序列和只读数据,多个进程实例可共享代码段。

数据段:用来存放全局变量和静态变量。

堆区域:用于程序的动态内存管理,new或者malloc申请的内存就位于堆中。

栈:用来存放进程运行过程中的局部变量,函数返回地址,参数和进程上下文环境。

线程:引入进程是为了解决程序并发执行的问题,而引入线程是为了减少程序并发所带来的时间和空间的开销;线程是比进程更小的单位,一个进程至少有一个线程,线程是操作系统进行调度的基本单位,线程基本上不占用系统资源,线程与其他同属一个进程的线程共享该进程所占有的资源。

应用编程接口

进程环境 

getuid   获得当前进程实际用户ID

geteuid   获得当前进程有效用户ID

getgid        获得当前进程实际用户组ID 

getegid      获得当前进程有效用户组ID

getpid  获得当前进程ID

getppid   获得父进程ID

getpgrp     获得进程组ID

setpgid      设置进程组

getsid   获得进程会话ID

setsid        设置进程会话ID

getenv       获取环境表量

putenv  设置环境表量

进程地址空间

malloc   申请内存

free        释放内存

brk      设置堆区域大小

进程的创建与终止

fork  创建子进程 

exit        终止进程

atexit     注册终止处理程序

加载可执行二进制映像

exec

进程的同步控制

wait    暂停执行直到一个子进程结束

waitpid   等待指定子进程结束

线程

1. pthread_equal      //判断线程是否相同
2. pthread_self         //返回调用线程的ID
3. pthread_create       //创建线程
4. pthread_exit      //退出线程
5. pthread_join        //启动线程
6. pthread_cancel      //取消线程
7. pthread_cleanup_push  //线程清理