【问题标题】:Is thread still running when the process in "Disk Sleep"?当进程处于“磁盘睡眠”状态时,线程是否仍在运行?
【发布时间】:2013-08-05 21:16:36
【问题描述】:

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

about the "D" state

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

【问题讨论】:

    标签: c linux sleep disk


    【解决方案1】:

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

    每个任务都是进程中的一个单独的执行单元。他们都有各自的任务 ID tid - 与进程 ID (pids) 相关。

    每个进程在启动时都带有一个主任务,并且该“主”任务标识了该进程,实际上进程 ID pid 是主任务的任务 ID tid

    在执行方面的进程状态类似于主任务的状态,包括状态RDS...

    因此,如果您的进程被标记为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(等待终端输入),第一个任务(与进程tid 相同)也是pid,而另一个线程是R。如果您将i 设置为更小的值,它实际上会在某个时候完成。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-12
      • 1970-01-01
      • 2015-03-02
      • 2015-02-12
      • 2012-06-21
      • 2011-09-05
      相关资源
      最近更新 更多