转载自CodeUniverse的博客
进程:可执行程序是存储在磁盘设备上的由代码和数据按某种格式组织的静态实体,而进程是可被调度的代码的动态运行。
在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 //线程清理