内核进程
进程id 名字 说明
0 swap 用于交换 系统进程
1 init 用于启动系统 非系统进程 程序文件sbin/init 读配置文件/etc/init.d
2 pagedaemon 页守护进程 系统进程
进程相关函数的重要说明
1) fork之后,父子进程没有规定谁先执行,依赖于系统调度
父子进程相同的文件描述符共享一个文件表项
父进程的文件锁不会被子进程继承
vfork只会部分赋值父进程的地址空间,然后父进程会等待子进程至少exec其他程序后才开始执行,
*********子进程在调用exec或exit之前在父进程的地址空间运行*****************
2)如果子进程的父进程已经结束,那么它们的父进程都会变成init进程,被init领养
**实现原理是,在父进程终止的时候去遍历进程表,然后找到它的所有子进程并修改
init在子进程结束的时候会调用wait取得子进程的状态,所以子进程结束后不会变成僵死进程.
3) 僵死进程:
子进程结束后,会保留进程id,结束状态等值,并不会马上退出,需要等待父进程使用
wait来取得值后再结束,如果父进程一直不来取,那么子进程就以僵死进程的状态一直存在.
ps命令将僵死状态的进程标识为Z
4) 子进程只要结束就向父进程发送SIGCHLD信号,如果父进程不捕获默认是忽略
5) wait 和waitpid
wait调用: 如果有子进程存在,且都在运行,那么父进程阻塞
1)当有一个子进程退出的时候,那么wait调用马上返回
2)收到SIGCHLD信号,那么wait调用马上返回
waitpid调用:
1)可以根据参数设置是否阻塞父进程
2)可以指定某个子进程进行阻塞
3)可以控制子进程
6) waitid,wait3,wait4
waitid类似于waitpid
wait3和wait4分别是指有3个参数和4个参数的wait,多的参数表示需要内核返回子进程的资源报告.