进程基础1

进程

进程是一个独立的可调度的任务 
进程是一个动态的概念,它是程序执行的过程,包括创建、调度和消亡
创建:程序在执行的时候,内核将程序代码载入到虚拟地址空间(4G,映射物理内存,0~3G属于用户空间,3~4G内核空间),为程序数据变量分配空间,建立记账数据结构(task struct),保存进程的属性信息(PID,进程的状态)
调度:进程管理单元,上下文切换
消亡:内存的释放
虚拟的地址空间:
内存规划:将虚拟地址空间分割成大小为4K的页单元,同时将RAM分割成相同尺寸的页帧
对于进程而言,虚拟地址空间中一部分页出自于物理内存,一部分出自于交换区(ROM)
页映射表中的条目记录虚拟地址空间中的页出自于什么地址,其要么记录虚拟地址空间中的页出自于ROM,
要么记录一部分出自于物理内存中的页对应的物理地址。	   
在进程创建的时候,内核为进程维护一张页映射表,MMU通过页表完成地址的转换、保护

进程的内存布局:

1)数据段:全局变量
2)程序文本段:程序的文本代码
3)堆:进程额外申请的空间 
4)栈:局部变量,函数的调用/返回


交互进程:该类进程是由shell控制和运行的。交互进程既可以在前台运行,也可以在后台运行。

批处理进程:该类进程不属于某个终端,它被提交到一个队列中以便顺序执行。

守护进程:该类进程在后台运行。它一般在Linux启动时开始执行,系统关闭时才结束。

静态查看进程的属性 ps axj

PPID      PID       PGID          SID    TTY      TPGID      STAT       UID   TIME COMMAND
父进程    进程号    进程组ID    会话组ID  终端             进程的状态


进程的状态:
D    uninterruptible sleep (usually IO)         不可中断睡眠态
R    running or runnable (on run queue)         运行态
S    interruptible sleep (waiting for an event to complete)   可中断睡眠态
T    stopped, either by a job control signal or because it is being traced.  停止态
X    dead (should never be seen)    死亡态
Z    defunct ("zombie") process, terminated but not reaped by its parent.  僵尸态

For BSD formats and when the stat keyword is used, additional characters may be displayed:
<    high-priority (not nice to other users)         高优先级
N    low-priority (nice to other users)              低优先级
s    is a session leader                             会话组组长
l    is multi-threaded (using CLONE_THREAD, like NPTL pthreads do)  线程
+    is in the foreground process group.             前台



ctrl + z   停止一个进程
bg      将进程放到后台运行
fg      将后台运行的进程放到前台 


top  动态查看进程信息  

shift + >  翻页
shift + <

(nice值)
sudo renice -n -10 4163   改变正在运行的进程的优先级
sudo nice -n -10 ./a.out   改变即将运行的进程的优先级

进程的创建

函数原型:pid_t fork(void);
功能:创建子进程,子进程完成对父进程的精确复制,复制父进程的虚拟地址空间
返回值:成功    父进程   子进程ID
子进程   0

失败    父进程   -1
子进程创建失败		


函数原型:	 pid_t getpid(void);
功能:返回调用的进程ID
pid_t getppid(void);
功能:返回父进程的ID号	

孤儿进程

父进程退出,子进程不退出,子进程成为孤儿进程,init进程成为其父进程

僵尸进程

父进程不退出,子进程退出;父进程不回收子进程资源

解决僵尸进程:
1)父进程退出,回收子进程的资源
2)wait waitpid

进程回收

函数原型:pid_t wait(int *status);
功能:等待子进程的状态发生改变,回收子进程的资源
返回值:成功   子进程ID
失败   -1

函数原型:pid_t waitpid(pid_t pid, int *status, int options);
功能:
参数: pid     <-1   等待子进程所属的组id等于pid的绝对值下的所有子进程
-1    等待linux下所有的子进程状态发生改变
0     等待子进程所属组ID等于调用的进程ID号下的所有子进程状态发生改变
pid   等待指定PID号的子进程

options    0   阻塞等待,功能等于wait
WNOHANG   非阻塞

返回值:成功
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值