《linux内核设计与实现》第三章
进程概念及状态
进程:一个正在运行的程序,资源分配的基本单位
进程状态:就绪 运行 阻塞
进程描述符:进程控制块(PCB),存放进程的属性信息
僵死进程:子进程先结束,父进程没有调用wait获取子进程的退出码,则子进程变成僵死进程
为什么会产生僵死进程
系统在设计时,子进程在结束后,会将退出码放入PCB中,父进程要查看子进程的退出码才能使得子进程PCB释放。
如何结束:父进程-wait
fork复制进程
复制流程:
写时拷贝:
父进程打开的文件fork()后,子进程可以共享访问 。
哪些是复制的那些是共享的
问题 以下几个分别产生几个进程
fork() || fork();
fork() && fork();
for(int i = 0;i < 2; ++i)
{
fork();
printf("A\n");
}
6个A
for(int i = 0;i < 2; ++i)
{
fork();
printf("A");
}
8个A
printf() 不是一个线程安全,它有一个buffer,现在里面放东西,满了或者强制刷新才会在屏幕中打印
fork() || fork()
文件描述符
open read write close
系统调用:
系统调用时如何从用户态切换到内核态?
系统调用和库函数的区别?
系统调用的实现在内核中,编写内核时就实现
库函数的实现,在库文件中
exec系列 execl execlp execv exevp execve替换进程
进程的产生 fork()+exec()
信号
signal() 改变信号的响应方式,1.默认 SIG_DFL 2. 忽略 SIG_IGN 3.自定义 fun
kill() 发送信号 pid sig
SIG_INT
SIGCHLD 子进程结束后发给父进程
信号怎么实现的?
长整型变量