FreeBSD下最上面的进程状态列

FreeBSD下最上面的进程状态列

当以交互方式运行 top 时,我可以在状态列中看到各种单词:

  • nanslp、biord、select、uwait、lockf、暂停、kqread、piperd、sbwait...

有些像 nanslp 或 kqread 是不言自明的,其他的则不是。

尝试了 Mr 手册页:

STATE 是当前状态(“START”、“RUN”(在 SMP 系统上显示为“CPUn”),“SLEEP”、“STOP”、“ZOMB”、“WAIT”、“LOCK”或进程等待的事件之一),C 是进程正在执行的处理器编号(仅在 SMP 系统上可见)

尝试过的搜索引擎:

在哪里可以获得 FreeBSD 9 下可能的进程状态的完整列表及其含义?

答案1

top在手册页中还有以下内容:

   If  a  process is in the "SLEEP" or "LOCK" state, the state column will
   report the name of the event or lock on which the process  is  waiting.
   Lock  names  are  prefixed  with an asterisk "*" while sleep events are
   not

因此基本上,所有非大写的“STATE”、非以星号为前缀的都是睡眠事件名称。

这些标签是在 FreeBSD 内核中设置的,因此您应该在这里找到它们的含义。遗憾的是,没有很好的总结,因为事件名称是由调用设置的sleep

例如,在函数/usr/src/sys/kern/sys_pipe.c中的某处pipe_read

error = msleep(rpipe, PIPE_MTX(rpipe), PRIBIO | PCATCH, "piperd", 0);

或者在函数/usr/src/sys/kern/sys_pipe.ckern_nanosleep

error = tsleep(&nanowait, PWAIT | PCATCH, "nanslp", tvtohz(&tv));

答案2

man 1 ps

......
mwchan   The event name if the process is  blocked  normally,  or  the
        lock name if the process is blocked on a lock.  See the wchan
        and lockname keywords for details.
......

所以我现在引用https://wiki.freebsd.org/WaitChannels来自谷歌搜索结果:

等待通道 描述
比奥德 等待磁盘读取操作完成
生物写作 等待磁盘写入操作完成
nfsreq 等待 NFS 请求的回复
排水量 等待文件写入磁盘
刷新缓冲区 等待将待处理的文件写入磁盘,以便可以通过 posix_fadvise(2) 将页面从 RAM 中刷新出来
等待 等待数据到达套接字,例如套接字上的阻塞读取(2)
读取 等待事件到达 kqueue
选择 通过 select(2) 或 poll(2) 等待文件描述符上触发事件,通常是套接字
派珀德 等待数据到达管道,即阻塞读取(2)
管道工 等待空间将数据写入管道,即阻塞写入(2)
菲福尔 等待 FIFO 的阻塞只读打开(O_RDONLY)以便另一个进程打开此 FIFO 上的可写描述符(O_RDWR 或 O_WRONLY)
流速 等待 FIFO 的阻塞只写打开(O_WRONLY)以便另一个进程在此 FIFO 上打开可读描述符(O_RDWR 或 O_RDONLY)
等待 等待子进程退出,例如 shell 等待命令完成
泰因 等待从终端读取数据,例如 ssh 会话的空闲 shell 或 xterm
输出 等待将数据写入终端
暂停 等待信号(tcsh 使用这个而不是“wait”)
南斯拉普 等待指定的时间过去,例如“sleep 1”
优康 等待用户空间条件变量(pthread_cond_wait())
取得黑块 等待访问另一个线程正在访问的文件数据
优福 等待读取另一个线程正在写入的 UFS 文件系统上的文件或目录,或等待写入另一个线程正在读取或写入的本地文件或目录
网络文件系统 与“ufs”相同,但适用于 NFS 文件或目录。通常,如果您看到此信息,那是因为其他线程在“nfsreq”中被阻止。
文件系统 与“ufs”相同,但用于 ZFS 文件或目录。

^T 与 sysctl kern.tty_info_kstacks=1 可能会显示比此等待通道更有用的信息。例如区分 poll() 和 select()。

相关内容