在Unix的ps命令中,TTY是什么意思?

36

当我运行PS命令时,其中一列输出是TTY。这意味着什么?特别地,"??"的值与"ttys000"相比如何?

我问这个问题是因为我有一个Java程序通过ProcessBuilder执行sort命令,当这个程序在我的IDE(IntelliJ)中运行时,该进程所需时间比在IDE外部作为可执行的jar包运行时所需时间少5倍。

在每种情况下,当sort正在运行时,我都会运行ps命令,唯一的区别是IDE创建了一个TTY为"??"的进程,而JAR创建了一个TTY为"ttys000"的进程。

2个回答

41

TTY是计算机终端。在ps的上下文中,它是执行特定命令的终端。

这个缩写代表"TeleTYpewriter",这是一种允许用户连接早期计算机的设备。

与您的情况相关,该jar文件创建了一个名为'ttys000'的虚拟终端,但IDE不会附加到虚拟终端来执行命令。


有趣,那么我该如何让jar文件在没有终端的情况下执行,以避免性能损失呢? - Aaron Silverman
通过在命令行中添加“&”来将进程与终端分离。然而,我会感到惊讶如果性能下降是由于命令被连接到终端的结果。我认为更可能的是IDE正在执行某种优化。期待听取您的结果。 - George Cummins
即使加上&,它仍然需要更长的时间,并显示为tty ttys000。但是,当我通过IDE中的简单java程序执行jar文件时,它运行得更快且与终端无关。我想知道这可能是什么样的优化方式,或者OSX终端本身是否在减慢速度。 - Aaron Silverman
你已经回答了我的TTY问题(谢谢!),并为性能问题创建了一个新的问题:https://dev59.com/_FrUa4cB1Zd3GeqPj3Bt - Aaron Silverman
3
注意:我的性能问题是由于IntelliJ和shell使用不同的默认字符集所导致的。 - Aaron Silverman
@GeorgeCummins 在大多数 shell 中,使用 & 将进程放入后台,但不会解除控制终端的关联。您需要使用 "nohup"(man 1)或 "disown"(请参阅您的 shell man 页面)来完成此操作。zsh 用户可以使用 "&!" 代替 "&"。 - Jürgen Strobel

5

一个进程通常会绑定到一个“控制终端”。这个终端可以是串行线末端的硬件,或者更有可能是虚拟的软件等效物。TTY从父进程继承而来。很可能您的IDE与其TTY分离,在您的Java程序外部启动时继承了您的shell的TTY。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接