专栏名称: 奥斯特洛司机
朝闻道,夕死矣。为中产而奋斗的小编
目录
相关文章推荐
会计雅苑  ·  立信辞任了一家又新接了一家😀 ·  昨天  
北京厚朴中医  ·  厚朴人物 | ... ·  4 天前  
51好读  ›  专栏  ›  奥斯特洛司机

4.4、信号,子进程实战,文件I/O详谈

奥斯特洛司机  · 简书  ·  · 2019-04-05 17:40

正文

1、信号功能实战
重载配置文件,热更新,子进程崩溃父进程重新拉起来。
sigaction()
#课后:搭建信号处理框架。。
kill -9 -1212 杀掉一组进程。
2、nginx中创建worker子进程
2.1、sigsuspend()函数讲解
阻塞在master进程的循环中等待信号。
3、日志输出重要信息谈
3.1、换行回车进一步示意
3.2、printf()函数不加\n无法及时输出的解释
输出缓冲区的概念。
fflush()刷新缓存。
setvbuf(stdout, NULL, _IONBF, 0) ,将printf缓冲区禁止,直接输出。
4、write()函数思考
父进程中打开文件,子进程继承文件描述符的情况下,共享文件表项,O_APPEND能够保证多个进程同时操作同一个文件的时候不会发生覆盖。加上内核写入系统调用write是原子操作。
write()调用返回时,内核已经将应用程序缓冲区所提供的数据放到了内核缓冲区。,但是无法保证数据已经写出到其预定的目的地【磁盘】。因为write调用速度极快。
为什么要有用户态和内核态?
因为诸如read、write的操作,写的时候应用程序内存往内核内存写的速度比较快,内购实现快速返回,不需要管后续操作。读的时候从内核内存读,当内核内存刚好有要读的数据,就不需要再从磁盘读取到内核,内存之间的读写比从磁盘读写的速度快很多倍。所以需要缓冲区加快速度。







请到「今天看啥」查看全文