进程,创建,vfork


linux是一个多任务,多用户的操作系统,操作系统借助于进程来管理计算机的软, 硬件资源,支持多任务的并行执行.

为了同一时间执行更多任务,进程内又分出很多线程,线程不拥有系统资源,他与同属于一个进程的线程共享这个进程拥有的全部资源,进程页拥有独立的内存,其内部的线程共享这些内存,一个线程可以创建和撤销另一个线程,同一个进程中多个线程可以并行执行.

每个进程都是通过唯一的进程ID标识的,ID时一个非负数.还可以通过相应的函数获得ID外的一些其他标识符.

linux 进程又三部分组成:
~代码段  存放程序的可执行代码
~数据段  存放程序的全局变量, 常量 , 静态变量
~堆栈段  堆用于存放动态分配的内存变量,   栈用于函数调用, 它存放着函数的参数, 函数内部定义的局部变量.

linux 系统进程有以下几种状态:
~运行状态     R
~可中断等待状态  S
~不可中断等待状态 D
~僵死状态  Z  进程已终止,但进程描述符依然存在,直到父进程调用wait()函数后释放
~停止状态   T 因为收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行或者该进程正在被跟踪.

ps 命令可以查看进程当前状态.

linux 为了控制进程提供了一系列系统调用
~fork     创建一个新进程
~exit     终止进程
~exec     执行一个应用程序
~wait     将父进程挂起,等待子进程终止
~getpid     获取当前进程的ID
~nice     改变进程优先级

fork()函数是创建一个新进程的唯一方法, 有两个返回值
1  父进程调用fork()函数后的返回值,是刚刚创建的子进程的ID
2  子进程调用fork()函数后的返回值, 是0.
若创建失败,只返回-1

fork 与vfork
相同点: 调用一次,返回两次
不同点:~fork:子进程完全复制父进程的资源,独立于父进程,良好的并发性,但浪费空间,哪个进程先运行取决于系统的调度算法
             ~vfork:子进程共享父进程的地址空间,子进程对该地址中任何数据的修改父进程可见,保证子进程先运行,调用exec或exit之后父进程才可被调用,如果调用之前子进程要依赖父进程的某个行为,就会造成死锁.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值