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. 堆:自低地址向高地址生长,newmalloc的同喜都在这儿

iv. 静态全局区

v. 正文段(程序二进制代码存放区)

 

vi. Goto是函数内跳跃;setjumplongjump是向上面一样退栈帧

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(“系统命令”)

0 0
原创粉丝点击