unix ps 命令中的 TTY 是啥意思?
Posted
技术标签:
【中文标题】unix ps 命令中的 TTY 是啥意思?【英文标题】:What does TTY mean in the unix ps command?unix ps 命令中的 TTY 是什么意思? 【发布时间】:2011-10-30 03:17:15 【问题描述】:当我运行 PS 时,其中一列输出是 TTY。这是什么意思?特别是“??”的 as 值如何?与“ttys000”比较?
我问是因为我有一个 Java 程序通过 ProcessBuilder 执行 sort
,当这个程序通过我的 IDE (IntelliJ) 运行时,该过程比在 IDE 外作为可执行 jar 运行时所需的时间少 5 倍。
在每种情况下,我都会在排序运行时运行 ps,唯一的区别是 IDE 会创建一个 TTY 为 ??而 jar 创建一个 TTY 为 ttys000 的进程。
【问题讨论】:
【参考方案1】:TTY 是一个计算机终端。在ps
的上下文中,它是执行特定命令的终端。
缩写代表“TeleTYpewriter”,它是允许用户连接到早期计算机的设备。
根据您的情况,jar 创建了一个名为“ttys000”的虚拟终端,但 IDE 没有附加到虚拟终端来执行命令。
【讨论】:
很有趣,那么我怎样才能让 jar 在不附加到终端的情况下执行,以免性能受到影响? 您可以通过在命令行中附加“&”来将进程与终端分离。但是,如果性能下降是命令附加到终端的结果,我会感到惊讶。我认为IDE更有可能正在执行某种优化。我期待听到您的结果。 即使使用 & 它仍然需要更长的时间,并且在 ps 中显示 TTY 为 ttys000。但是,当我通过 IDE 中的一个简单的 java 程序执行 jar 时,它运行分离且更短。我想知道它可能是哪种优化,和/或 OSX 终端本身是否会减慢速度。 你已经回答了我的 TTY 问题(谢谢!)为性能问题创建了一个新问题:***.com/questions/7124489/… 注意:我的性能问题是由于 IntelliJ 和 shell 使用不同的默认字符集造成的。【参考方案2】:一个进程可以(并且通常是)绑定到一个“控制终端”。该终端可能是串行线路末端的硬件,或者今天更可能是虚拟软件等价物。 TTY 继承自父进程。您的 IDE 很可能会与其 TTY 解除关联,并且在您的 java 程序外部启动时会继承您的 shell 的 TTY。
【讨论】:
以上是关于unix ps 命令中的 TTY 是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章