AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 19442
Accepted
8128
8128
Asked: 2010-12-31 08:46:54 +0800 CST2010-12-31 08:46:54 +0800 CST 2010-12-31 08:46:54 +0800 CST

什么是进程的“等待通道”?

  • 772

在 GNOME System Monitor 的 Processes 选项卡中有一个“Waiting Channel”列。到目前为止,我在这里看到的最常见的值是poll_schedule_timeout,但我也看到了其他值:0、do_exit、do_wait、futex_wait_queue_me、pipe_wait、__skb_recv_datagram和unix_stream_data_wait。

那么这个“等待频道”栏是什么意思呢?也许其中的一些价值观是什么意思?

截屏

system-monitor process
  • 2 2 个回答
  • 40157 Views

2 个回答

  • Voted
  1. Best Answer
    Stefano Palazzo
    2011-01-10T14:29:05+08:002011-01-10T14:29:05+08:00

    等待通道是内核中任务当前等待的地方。任务必须等待资源,可以是数据或处理时间。这两个包括网络套接字、硬件、文件等;因为它们中的大多数只是文件,在类 Unix 系统中。

    • 0: 进程没有等待

    • poll_schedule_timeout

      poll()是用于处理 I/O的系统调用1 。它类似于select()。2

      使用非阻塞 I/O 的应用程序使用这些调用来查看它们是否可以读取或写入文件,而不必阻塞它。它们通常用于输入/输出流,可能不会被阻塞(否则,您的鼠标可能会停止移动)。

      等待通道poll_schedule_timeout表示任务正在等待 I/O,无论是键盘和鼠标等硬件、声音设备还是网络套接字。

      1. 内核中的一个函数
      2. 它们定义在<linux/poll.h>. poll是在 System V 中首次出现的实现,select是 BSD UNIX 等价物。
    • futex_wait_queue_me:

      为了解释这一点,我们必须看看锁。锁是系统中的一种保存状态,表示任务与资源一起工作。例如,可能只有一个任务读取文件。此任务将锁定文件,任何其他尝试读取文件的任务1都会知道它已被锁定,并等待锁定消失,然后才能访问它。处理器时间也会发生同样的事情。

      现代版本的 Linux(在大多数架构上)在内核中使用 Futex(快速用户空间互斥锁)锁。互斥,互斥,指的是一个公共资源在任何时候都只能被一个任务访问。为此,设置了系统中的标志。

      如果一个进程正在等待一个锁定的资源,这称为忙等待 或“旋转”,指的是它试图一遍又一遍地访问它,直到它可以。任务在旋转时被称为阻塞。

      如果您可以阅读此内容,则您有义务纠正此答案中的至少一个错误:P

      Futex 锁可以被认为是用户空间中的一个数字,它可以被一个任务递增或递减(在资源可以被多个任务访问的情况下,这个数字可以大于一)。这是图4中显示的数字。

      这些任务将自己排入等待队列,这是一个需要做一些工作的简单任务队列,一旦处理时间可用,这些任务就会完成它们的工作并从队列中删除。

      futex_wait_queue_me将任务排入队列。然后它等待信号、超时或唤醒。在此等待通道中的任务不在等待队列中等待,它们正在等待入队。


      1. 任务可以是进程3或线程2
      2. 线程是进程的子部分。许多线程可以并行运行
      3. 一个进程是一个成熟的程序,它由一个或多个线程组成,尽管一个程序也可以由多个进程组成。
      4. 请记住,这仍然是一个非常高级的视图,它没有考虑实现细节
    • __skb_recv_datagram

      在锁定的网络套接字上等待一些数据。

    • sk_wait_data

      等待网络套接字上的一些数据。

    • do_exit

      这是退出进程的最后一部分。do_exit()调用schedule()下一个,以安排另一个进程。当do_exit()被调用时,进程是一个ZOMBIE.

    • do_wait

      一个进程被添加到调度程序等待队列中。

    • pipe_wait,unix_stream_data_wait

      进程正在等待来自子进程的数据。例如,当您运行此类代码时,就会发生这种情况:

      echo | sleep 10 && echo hallo              # pipe
      

      或者

      cat < hello.c                              # unix data stream
      
    • hrtimer_nanosleep

      进程正在休眠,使用hrtimer_nanosleep()方法。此方法可用于程序休眠特定时间间隔,精度为纳秒级。

    这些还不是全部,但我没有观察到其他任何人。如果我错过了什么,请发表评论。

    • 45
  2. Maxime R.
    2010-12-31T10:01:07+08:002010-12-31T10:01:07+08:00

    等待通道值是进程当前被阻塞在其中的内核函数的名称。

    该名称通常与系统调用相关,该系统调用将具有手册页。

    • futex_wait_queue_me与futex相关。它指的是一种互斥锁(快速用户空间互斥),用于调度多个进程在一个处理器上工作。该状态表明您的进程已排队接收锁。2
    • do_wait与wait相关。
    • 等等

    如果您真的想要更详细的信息,您可以查看内核源代码。

    如果你输入cat /proc/some_pid/stack一个终端,你会得到一些类似的输出:

    [<c0227f4e>] poll_schedule_timeout+0x3e/0x60
    [<c022879f>] do_select+0x55f/0x670
    [<c0228f40>] core_sys_select+0x140/0x240
    [<c0229241>] sys_select+0x31/0xc0
    [<c05c9cc4>] syscall_call+0x7/0xb
    [<ffffffff>] 0xffffffff
    

    在第一行,您可以看到系统监视器上显示的内容。据我所知,poll_schedule_timeout表明您的进程正在等待某些东西。

    它处理异步 I/O和轮询。

    来源:1.进程等待通道(WCHAN)和警报?- 2. AskUbuntu 答案

    • 12

相关问题

  • 从局域网中的 Windows 机器远程杀死 Ubuntu 机器中正在运行的进程

  • 为什么 ksoftirqd/0 进程使用了​​我所有的 CPU?

  • 查找进程ID的终端命令是什么

  • 为什么有 60 多个控制台套件守护进程?

  • 您如何监控重启后的互联网总数据使用量?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何安装 .run 文件?

    • 7 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    如何获得 CPU 温度?

    • 21 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Marko Smith

    如何使用命令行将用户添加为新的 sudoer?

    • 7 个回答
  • Marko Smith

    更改文件夹权限和所有权

    • 9 个回答
  • Marko Smith

    你如何重新启动Apache?

    • 13 个回答
  • Marko Smith

    如何卸载软件?

    • 11 个回答
  • Marko Smith

    如何删除 PPA?

    • 26 个回答
  • Martin Hope
    NES 如何启用或禁用服务? 2010-12-30 13:03:32 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    Olivier Lalonde 如何在结束 ssh 会话后保持进程运行? 2010-10-22 04:09:13 +0800 CST
  • Martin Hope
    David B 如何使用命令行将用户添加为新的 sudoer? 2010-10-16 04:02:45 +0800 CST
  • Martin Hope
    Hans 如何删除旧内核版本以清理启动菜单? 2010-08-21 19:37:01 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve