当我运行PS命令时,其中一列输出是TTY。这意味着什么?特别地,"??"的值与"ttys000"相比如何?
我问这个问题是因为我有一个Java程序通过ProcessBuilder执行sort
命令,当这个程序在我的IDE(IntelliJ)中运行时,该进程所需时间比在IDE外部作为可执行的jar包运行时所需时间少5倍。
在每种情况下,当sort正在运行时,我都会运行ps命令,唯一的区别是IDE创建了一个TTY为"??"的进程,而JAR创建了一个TTY为"ttys000"的进程。
TTY是计算机终端。在ps
的上下文中,它是执行特定命令的终端。
这个缩写代表"TeleTYpewriter",这是一种允许用户连接早期计算机的设备。
与您的情况相关,该jar文件创建了一个名为'ttys000'的虚拟终端,但IDE不会附加到虚拟终端来执行命令。
一个进程通常会绑定到一个“控制终端”。这个终端可以是串行线末端的硬件,或者更有可能是虚拟的软件等效物。TTY从父进程继承而来。很可能您的IDE与其TTY分离,在您的Java程序外部启动时继承了您的shell的TTY。