为什么ps看不到睡眠进程?

为什么ps看不到睡眠进程?

我创建了第一个终端,然后使用“sleep 1000 &”,然后通过“ps”找到了它。问题是当我创建第二个终端并输入“ps”时,没有睡眠过程。我想知道为什么?

在此输入图像描述(我的作业说“提示:TTY专栏”)

答案1

默认情况下,ps仅显示附加到当前终端 (tty) 的进程:在您的情况下,您的 shell 和ps它本身(都在pts/2)。您需要解除此限制才能看到sleep;例如

ps -e

请参阅man ps参考资料 以了解可用于过滤进程的许多选项。

答案2

问题是当我创建第二个终端并输入“ps”时,没有sleep进程。

对于一些(不是全部)交互式 shell,sleep 可能是一个内置调用的 shell,例如睡觉(3)(正如cd shell 内置调用一样目录(2))。

当这种情况发生时,你将看不到任何sleep 过程因为没有。那么过程就是睡觉(3)-ing 是你的Unix外壳;你甚至可以编写自己的 shell 解释器(查看窗扇一个简单但有点错误的例子)。

许多 Linux shell 都是开源软件(或自由软件),所以请研究他们的源代码,看看他们是否确实调用睡觉(3)或者睡觉(3)-或者甚至适当地民意调查(2)等...-另请参阅时间(7)选择图(2)。阅读更多关于系统调用(2)并想想你的 shell 所做的事情(或者用跟踪(1)或者跟踪(1)或调试器)。

许多 Linux 发行版都有GNU bash就像通常的交互式 shell 一样。但你可以安装桀骜或者或者英语作为您的登录 shell(使用chsh(1))。

我个人的偏好是zsh自动完成Debian 上的设施非常出色)。

考虑读一些教科书关于操作系统和/或编写您自己的代码Unix外壳作为练习,或扩展一些现有的(例如,通过添加sleep内置的,如果没有内置的)。

相关内容