微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在“磁盘睡眠”过程中线程是否仍在运行?

一个进程进入特殊types的睡眠,在Linux中被称为“D”或“磁盘睡眠”,其子线程是否仍然正常运行? 所以线程可以告诉我进程处于“磁盘睡眠”状态。

关于“D”状态

顺便说一句:对不起,我可怜的英语,谢谢大家。

理解fork(),sleep()和进程stream量

奇怪的计时结果'clock_gettime'和'gettimeofday'

睡眠()function不工作?

C ++ Windows睡眠()而不停止其他任务

持续唤醒和睡眠在Linux上最小的电力使用情况?

我怎么能暂停,然后恢复呼叫`睡眠`

系统函数调用asynchronous?

睡眠function在C中的窗口。 是否存在精度更高的函数

睡后杀死

Windows服务OnPowerEvent

在Linux中,线程被定义为“任务”。

每个任务是一个过程中的一个单独的执行单元。 他们都有自己的任务id tid – 与进程id( pid )有关。

每个进程在启动时都带有一个主要任务,“主要”任务标识进程,实际上进程标识pid是主要任务的任务标识tid 。

执行过程状态类似于主要任务,包括状态R , D , S …

所以如果你的进程被标记为D (磁盘睡眠),这只是意味着主要任务是在磁盘睡眠。 所有其他任务(线程)可以做其他任何事情。

检查/proc/[pid]/task/[tid]/stat个别任务状态。

另外ps -eLf显示任务的ps条目。

试试这个代码

#include <pthread.h> #include <stdlib.h> #include <stdio.h> void * thread_sleep() { long long int i = -1; while (i--); exit(0); return NULL; } int main() { pthread_t thread; pthread_create(&thread,NULL,thread_sleep,NULL); getchar(); return 0; }

运行它,做

cat /proc/$PID/stat cat /proc/$PID/task/*/stat

您会注意到进程具有状态S (等待终端输入),如同第一个任务(与进程pid相同的tid ),而另一个线程是R 如果你把i放到更小的地方,它实际上会在某个时候完成。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐