1.深度睡眠特点及存在原因

深度睡眠TASK_UNINTERRUPTIBLE:不可被信号唤醒;

浅度睡眠TASK_INTERRUPTIBLE:唤醒方式,等到需要的资源,响应信号;

深度睡眠场景:

有些场景是不能响应信号的,比如读磁盘过程是不能打断的,NFS也是;

执行程序过程中,可能需要从磁盘读入可执行代码,假如在读磁盘过程中,又有代码需要从磁盘读取,就会造成嵌套睡眠。逻辑做的太复杂,所以读磁盘过程不允许打断,即只等待IO资源可用,不响应任何信号;

应用程序无法屏蔽也无法重载SIGKILL信号,深度睡眠可以不响应SIGKILL kill-9信号;

深度睡眠案例

此时该进程读IO过程,是无法用kill -9杀死的;

一般绝大部分场景,都设置为浅睡眠

ps aux: D+

深度睡眠进程显示D+状态

2.深度睡眠对load average的影响

top load average:
cat /dev/global_fifo
Kill -2 pid
Kill -9 pid

无法杀死,load average变大,CPU依然空闲;

多加一个进程

cat /dev/global_fifo

load average继续变大,CPU依然空闲;

load
average:包括CPU消耗和IO的总预期,此时虽然不消耗CPU,但是等待IO消耗了时间,load
average显示的是随时间变化的平均负载预期;

D状态会增加load average;

对于同一个程序,不同执行环境:

执行性能=APP(消耗CPU)+DISK(I/O消耗);

3.TASK_KILLABLE

只响应致命信号 D状态;

不跳转APP响应信号,不会产生递归睡眠;

__set_current_state(TASK_KILLABLE);

可以响应信号9

kill -2 pid ? //发现被杀死,什么原因呢

dmesg

git grep "complete_signal"

满足sig_fatal,判断独占signal_pending,符合条件,内核添加一个SIGKILL信号,导致-2变成-9

条件:

#define sig_fatal(t, signr) \\(!siginmask(signr, SIG_KERNEL_IGNORE_MASK|SIG_KERNEL_STOP_MASK) && \\
(t)->sighand->action[(signr)-1].sa.sa_handler == SIG_DFL)

满足信号:不忽略,也不是stop,行为缺省。(缺省信号定义基本就是死,Core/Term等)

那么添加SIGKILL信号;

与fatal_signal()必须9信号,不一样;

Ps:如果应用层捕获了2信号,那么就不满足sig_fatal,kill - 2杀不死了;

**综上,**满足sig_fatal,kill -2可以杀TASK_KILLABLE进程;

Linux内核之进程6: 深度睡眠相关推荐

  1. 【Linux 内核】进程管理 ( Linux 内核中的进程状态 | TASK_RUNNING | TASK_INTERRUPTIBLE | __TASK_STOPPED | EXIT_ZOMBIE )

    文章目录 一.Linux 内核中的进程状态 二.TASK_RUNNING 状态 三.TASK_RUNNING 状态 四.TASK_UNINTERRUPTIBLE 状态 五.__TASK_STOPPED ...

  2. 【Linux 内核】进程管理 ( 进程状态 | 进程创建 | 进程终止 | 调用 exit 系统调用函数主动退出 | main 函数返回自动退出 | kill 杀死进程 | 执行异常退出 )

    文章目录 一.进程状态 二.进程创建 三.进程终止 ( 调用 exit 系统调用函数主动退出 | main 函数返回自动退出 | kill 杀死进程 | 执行异常退出 ) 一.进程状态 Linux 进 ...

  3. 【Linux 内核】进程管理 ( 内核线程概念 | 内核线程、普通进程、用户线程 | 内核线程与普通进程区别 | 内核线程主要用途 | 内核线程创建函数 kernel_thread 源码 )

    文章目录 一.内核线程概念 二.内核线程.普通进程.用户线程 三.内核线程.普通进程区别 四.内核线程主要用途 五.内核线程创建函数 kernel_thread 源码 一.内核线程概念 直接 由 Li ...

  4. 【Linux 内核】进程管理 task_struct 结构体 ⑤ ( files 字段 | nsproxy 字段 | 信号处理相关字段 | 信号量和共享内存相关字段 )

    文章目录 一.task_struct 结构体字段分析 1.files 字段 2.nsproxy 字段 3.信号处理相关字段 4.信号量和共享内存相关字段 在 Linux 内核 中 , " 进 ...

  5. 【Linux 内核】进程管理 task_struct 结构体 ④ ( comm 字段 | 进程优先级字段 | cpus_ptr 字段 | mm、active_mm 字段 | fs 字段 )

    文章目录 一.task_struct 结构体字段分析 1.comm 字段 2.进程优先级字段 3.cpus_ptr 字段 4.mm.active_mm 字段 5. fs 字段 在 Linux 内核 中 ...

  6. 【Linux 内核】进程管理 task_struct 结构体 ③ ( real_parent 字段 | parent 字段 | group_leader 字段 | real_cred、cred字段 )

    文章目录 一.task_struct 结构体字段分析 1.real_parent 字段 2.parent 字段 3.group_leader 字段 4.real_cred 字段 5.cred 字段 在 ...

  7. 【Linux 内核】进程管理 task_struct 结构体 ② ( state 字段 | stack 字段 | pid 字段 | tgid 字段 | pid_links 字段 )

    文章目录 一.task_struct 结构体字段分析 1.state 字段 2.stack 字段 3.pid字段 4.tgid 字段 5.pid_links 字段 在 Linux 内核 中 , &qu ...

  8. 【Linux 内核】进程管理 task_struct 结构体 ① ( task_struct 结构体引入 | task_struct 代码示例 )

    文章目录 一.task_struct 结构体 二.task_struct 结构体代码示例 一.task_struct 结构体 在 Linux 操作系统 中 , 进程 作为 调度的实体 , 需要将其抽象 ...

  9. 【Linux 内核】进程管理 ( 进程特殊形式 | 内核线程 | 用户线程 | C 标准库与 Linux 内核中进程相关概念 | Linux 查看进程命令及输出字段解析 )

    文章目录 一.进程特殊形式 ( 内核线程 | 用户线程 ) 二.C 标准库与 Linux 内核中进程相关概念 三.Linux 查看进程命令及输出字段解析 一.进程特殊形式 ( 内核线程 | 用户线程 ...

最新文章

  1. Python使用sklearn构建广义线性模型:Tweedie回归(Tweedie regression)实战
  2. 函数模块:CTVB_COMPARE_TABLES
  3. Python列表的用法和基本操作
  4. “神算子”上线!EasyDL时序预测模型零门槛轻松上手
  5. 计算机扩招的学校,这些985/211学校今年继续扩招!又有一大波学校专业课有变!...
  6. IOS7实现扫描二维码
  7. 怎么把python解释器配置在pycharm中_在PyCharm中配置项目(三):配置Python解释器...
  8. Kali Linux 和 渗透测试
  9. eclipse打开文件所在目录
  10. 指针和引用的相同与不同
  11. 网络爬虫-2018个人总结
  12. 重心法选址迭代matlab,配送中心重心法选址的研究
  13. 神奇的大脑 神经网络
  14. setw和width
  15. android6自定义锁屏,Android
  16. 【软件工具篇02】使用Anki克服遗忘曲线
  17. Web前端面试指导 四十 CSS3有哪些新特性
  18. sap 修改主机名过程
  19. Mac OS X 10.8.3搭建Android工程源码的编译环境(解决找不到GCC、GIT、PYTHON的问题)...
  20. 前端知识补充说明(一)之HTTP/浏览器等基础原理部分

热门文章

  1. 用户运营4大策略体系搭建:增长框架+用户建模+场景化分层+数据运营
  2. anroid获取ping值
  3. 支付宝小程序沙箱支付提示(系统繁忙,请稍后再试)
  4. 密码协议(二)仲裁协议
  5. Jlink 使用 RTT 输出调试信息总结
  6. 键盘哪个键是锁定计算机,笔记本键盘锁定键在哪_笔记本电脑的“键盘锁”是哪一个键-win7之家...
  7. 37岁,感觉上班太累,可做这5个生意,年轻人看不上,但却挺赚钱
  8. Tc27x的MTCR与MFCR指令
  9. Unresolveable build extension: Plugin...or one of its dependencies could not be resolved: Failed to
  10. ArcGIS API for JavaScript实现坐标定位