unix环境高级编程--进程环境与进程控制
来源:互联网 发布:linux用户和组管理 编辑:程序博客网 时间:2024/05/16 01:41
1.进程环境
a) 终止
i. 进程终止
1. 正常终止:return+exit、_exit系
a) 【exit与_exit的区别】:exit退出时按atexit注册的相反顺序调用注册过的函数,对打开的流调用fclose将缓冲区的数据写到文件上(刷新缓冲区)。_exit没有
b) 【exit与自然返回return的区别】:return返回上层的函数调用,exit直接结束进程
2. 异常终止:信号+abort+线程响应取消
ii. 线程终止
1. 正常终止:pthread_exit
2. 异常终止:信号+abort+线程响应取消
iii. 内核使程序执行的方法只有exec函数,进程资源终止的方法唯有exit系,非自愿终止由信号
b) 存储空间分布
i. 命令行参数与环境参数
ii. 函数栈:自高地址向低地址生长,各个函数的函数栈帧按调用顺序放置其中。【函数栈帧】中包括函数的自动变量与每次调用所需保存的信息
iii. 堆:自低地址向高地址生长,new、malloc的同喜都在这儿
iv. 静态全局区
v. 正文段(程序二进制代码存放区)
vi. Goto是函数内跳跃;setjump与longjump是向上面一样退栈帧
2.进程控制
a) Fork
i. 完全拷贝父进程,拷贝的时候拷贝的是文件描述符,所以父子进程共享文件【竞态条件】,访问的时候需要同步
b) 孤儿进程与僵死进程【ps查看进程信息,Z,僵死进程】
i. 【孤儿进程】:父进程先于子进程退出,子进程就成了孤儿进程,孤儿进程会被init进程收养,init进程负责子进程的资源的回收。
ii. 【僵死进程】:子进程先于父进程退出。退出时会发出sigchld信号,父进程没有忽略或捕捉该信号,在信号处理函数中没有对子进程进行wait(即没有发生收尸行为),子进程就会成为僵死进程,即不工作,也不释放占用的资源(给进程设置僵尸状态的目的是维护子进程的信息,以便父进程在以后某个时间获取。父进程结束之后,僵死进程作为没有父进程的子进程成为孤儿进程,然后被init收养,最后释放)。
1. 忽略sigchld信号(piox不行)
2. 捕捉sigchld信号,在信号处理函数中,用wait(无法处理并发子进程僵死的问题)/waitpid
c) 实际用户、有效用户和保存设置用户
i. 进程id:进程的标识符
ii. 进程组id:本进程所在进程组的标识符
iii. 实际用户id:当前进程的执行者的标识符
iv. 有效用户id:进程对资源的权限,进程可以访问有效用户可以操作的资源权限
v. 保存设置用户id:有效用户id的副本
d) exec
i. 调用exec执行新程序,但并不创建新进程,所以进程ID不变,只是替换了当前进程的正文段、数据段、堆段和栈段
e) system
i. System(“系统命令”)
- unix环境高级编程--进程环境与进程控制
- Unix环境高级编程--进程控制
- Unix环境高级编程之进程控制
- 《UNIX环境高级编程》--8进程控制
- 《Unix环境高级编程》之 进程控制
- unix环境高级编程-进程控制
- 《unix高级环境编程》进程控制——进程ID
- 《unix高级环境编程》进程控制——创建进程
- 《unix高级环境编程》进程控制——进程等待
- 《unix高级环境编程》进程控制——进程时间
- 《unix高级环境编程》进程控制——进程ID
- 《unix高级环境编程》进程控制——创建进程
- 《unix高级环境编程》进程控制——进程等待
- 《unix高级环境编程》进程控制——进程时间
- 《UNIX环境高级编程》第三部分进程之进程控制
- UNIX环境高级编程---- 进程
- Unix 环境编程: 进程控制
- unix环境高级编程--进程关系与守护进程
- gcc/g++编译
- C语言再学习 -- 负数
- 各种函数
- 微信小程序开放公测
- Android固定宽度文字自适应大小
- unix环境高级编程--进程环境与进程控制
- MySql学习存储过程遇到的问题
- 关于刷机的一些感悟
- leetCode练习(124)
- 第十周项目1-二叉树算法库
- 黑马程序员前端与移动开发学院2.0课程震撼来袭!
- js 匿名函数和闭包函数
- MySQL主机127.0.0.1与localhost区别总结
- 【日常问题】log4j无法通过jvm参数指定配置文件的问题