2011-08-18 110 views
19

当我运行PS时,其中一列输出是TTY。这是什么意思?特别是,“??”与“ttys000”比较?TTY在unix ps命令中的含义是什么?

我问,因为我有一个Java程序通过ProcessBuilder执行sort,当这个程序通过我的IDE(IntelliJ)运行时,这个过程比作为IDE外的可执行jar运行时少5倍。

在每种情况下,当排序运行时运行ps,唯一的区别是IDE创建一个进程的TTY为?而jar创建一个TTY为ttys000的进程。

回答

24

A TTY是一个电脑终端。在ps的情况下,它是执行特定命令的终端。

缩写代表“TeleTYpewriter”,它是允许用户连接到早期计算机的设备。

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

+0

有趣的是,我该如何让jar执行unattached到终端,所以我没有得到性能打击? – Zugwalt

+0

通过在命令行中追加'&',您可以从终端中分离进程。但是,如果性能命中是终端连接命令的结果,我会感到惊讶。我认为IDE更有可能正在进行某种优化。我会期待听到你的结果。 –

+0

即使使用&,它仍然需要更长时间,并且在ps中显示TTY为ttys000。但是,当我通过IDE中的简单Java程序执行jar时,它会运行分离且更短。我想知道它可能会进行哪种优化,或者OSX终端本身是否正在放慢速度。 – Zugwalt

2

一个进程可以(通常是)绑定到“控制终端”。这个终端可能是串口线末端的硬件,或者现在更可能是虚拟软件的等价物。 TTY从父进程继承。您的IDE最有可能与TTY分离,并且在您的java程序之外启动时,继承了您的shell的TTY。