| 在Linux上,对于多进程 子进程继承父进程的有? |
由子进程自父进程继承到:
- 进程的资格( 用户号(UIDs)和用户组号(GIDs))
- 环境(environment)
- 堆栈
- 内存
- 打开文件的描述符
- 执行时关闭(close-on-exec) 标志
- 信号(signal)控制设定
- nice值 (译者注:nice值由nice函数设定,该值表示进程的优先级, 数值越小,优先级越高)
- 进程调度类别(scheduler class)
- 进程组号
- 对话期ID(Session ID)
- 当前工作目录
- 文件方式创建屏蔽字(file mode creation mask (umask))
- 资源限制
- 控制终端
子进程所独有:
- 进程号PID
- 不同的父进程号
- 自己的文件描述符和目录流的拷贝
- 子进程不继承父进程的进程,正文(text), 数据和其它锁定内存(memory locks)
- 在tms结构中的系统时间
- 资源使用(resource utilizations)设定为0
- 阻塞信号集初始化为空集
- 不继承由timer_create函数创建的计时器
- 不继承异步输入和输出
父进程和子进程拥有独立的地址空间和PID参数
| Linux 下进程间的通信方式有以下几种 |
(1)管道/无名管道
(2)信号
(3)共享内存
(4)消息队列
(5)信号量
(6)socket
(7)通过文件锁的方式也可以实现进程间的通信
| 进程和线程 |
进程(process)是一块包含了某些资源的内存区域。操作系统利用进程把它的工作划分为一些功能单元。
进程中所包含的一个或多个执行单元称为线程(thread)。进程还拥有一个私有的虚拟地址空间,该空间仅能被它所包含的线程访问。
线程只能归属于一个进程并且它只能访问该进程所拥有的资源。同一个进程中的不同线程可以共享资源,但是不同进程的资源是不共享的。
区别
进程和线程的主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。 <多线程>
1) 简而言之,一个程序至少有一个进程,一个进程至少有一个线程.
2) 线程的划分尺度小于进程,使得多线程程序的并发性高。
3) 另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。
4) 线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
5) 从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。
优缺点
线程和进程在使用上各有优缺点:线程执行开销小,但不利于资源的管理和保护;而进程正相反。同时,线程适合于在SMP机器上运行,而进程则可以跨机器迁移。
参考:http://blog.csdn.net/yaosiming2011/article/details/44280797
| 多进程和多线程 |
提高效率
| 死锁 |
根据操作系统中的定义:死锁是指在一组进程中的各个进程均占有不会释放的资源,但因互相申请被其他进程所站用不会释放的资源而处于的一种永久等待状态。
产生死锁有四个必要条件:
(一)互斥条件:一个资源一次只能被一个进程访问。即某个资源在一段时间内只能由一个进程占有,不能同时被两个或两个以上的进程占 有。这种独占资源如CD-ROM驱动器,打印机等等,必须在占有该资源的进程主动释放它之后,其它进程才能占有该资源。这是由资源本身的属性所决定的。
(二)请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。进程至少已经占有一个资源,但又申请新的资源;由于该资源已被另外进程占有,此时该进程阻塞;但是,它在等待新资源之时,仍继续占用已占有的资源。
(三)不剥夺条件:进程已经获得的资源,在未使用完之前不能强行剥夺,而只能由该资源的占有者进程自行释放。
(四)循环等待条件:若干资源形成一种头尾相接的循环等待资源关系。
死锁处理策略的比较
http://c.biancheng.net/cpp/html/2605.html
以下关于死锁,描述正确的有
(1)有序分配锁资源可以预防死锁(√)
(2)银行家算法是用于检测死锁的(x)
银行家算法避免死锁的
(3)剥夺死锁进程的所有资源可以解除死锁(√)