【Linux C王者归来】【第十一章】【进程控制】

来源:互联网 发布:帝国cms 7.2 编辑:程序博客网 时间:2024/04/28 03:04

1.程序可以有多个进程,一个进程与进程id11 对应

2./PROC中的数字对应id号,getpid和getppid可以获得进程id父进程id

3.getuid geteuid 获得进程用户id和有效用户id

4.getgid和getegid获得进程的组id合有效组id


5.进程id和父进程id不会改变,启动用户和组适当条件改变


6.子进程用fork来创建,会与父进程共享数据段,同时会赋值数据段和堆栈。父进程fork返回子进程id,子进程返回0,二者地位平等启动先后不定。

7.一般是“写时复制”,子进程用到数据才会复制,

8.vfork会创建一个进程,不过该进程与父进程共享数据段,堆栈,代码,会影响父进程,而且一定比父进程先运行,不要再任何函数内部使用vfork

9.因为父进程和子进程从同一地点返回,子进程返回后,会影响父进程。

10.退出进程用exit(X),其会清理IO缓冲,写入磁盘,之后才释放地址空间。


11.设置进程所有者,什么用呢

setuid 改变实际用户id和有效用户id,根用户可以,再就是,用户id为进程实际用户id

seteuid之概念有效用户id


12.gdb 设置跟踪流,set follow-fork-mode child/parent

set detach-on-fork [ON/OFF]

gdb attach id

13.exec 不创建进程,只不过是把程序复制到 对应进程的数据段和代码段

execl 有参数裂变,NULL结尾

execv 命令行参数以二维数组形式提供

exece  以二维数组刷新环境变量

execp,程序名不完整,去path去找

exec会关闭打开的目录流,会改有效用户组,有效用户


13.在程序中执行shell,system,相当于fork,exec,waitpid

fork,waitpid 失败,返回-1

exec失败 exit127

成功,相当于$?

入参null,返回1

14.system 执行效率低,会调用两次fork,和exec,第一次加载hslel,第二次加载程序


15.wait的相关信息:

pid_t wait(int * statloc) ,wait阻塞进程,知道其子进程结束,取得结束信息放入入参,返回结束的id


16.对进程结束信息的判断取值宏,

正常结束:WIFEXITED P319


17.等待制定进程

waitpid(pid_t pid,int * statloc,intoptions)

入参1:-1任意进程,》0,指定进程,0等待组id合pid想定的子进程,<-1等待组id定于pid绝度值的组内的任意进程,

0,-1有啥区别

18.参数3,WCOTINUED 不懂,暂停后又继续执行,未报告,上报,WNOHANG,不阻塞,不结束直接返回,WUNTRACED,暂停了,为报告过,返回状态

19.僵尸进程会一直存在,直到父进程得到其结束信息,即wait,父进程必须调用wait防止僵尸进程,怎么办呢,影响实时性,——————所以怎么处理。。。?

20.父进程先结束,孤儿进程,init进程专门调用wait,可以让进程成为init的子进程,利用孙子进程解决上面的问题

21.进程信息再说了。

0 0