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 是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

手册页中 Unix 命令名称后括号中的数字是啥意思?

求教ps -efgrep java指令

Linux里面ps -aux和ps -a区别是啥?

linux命令中ps -ef是啥意思

Linux里面ps aux命令作用是啥?

Linux下面ps -o是啥意思