當我運行PS時,其中一列輸出是TTY。這是什麼意思?特別是,「??」與「ttys000」比較?TTY在unix ps命令中的含義是什麼?
我問,因爲我有一個Java程序通過ProcessBuilder執行sort
,當這個程序通過我的IDE(IntelliJ)運行時,這個過程比作爲IDE外的可執行jar運行時少5倍。
在每種情況下,當排序運行時運行ps,唯一的區別是IDE創建一個進程的TTY爲?而jar創建一個TTY爲ttys000的進程。
當我運行PS時,其中一列輸出是TTY。這是什麼意思?特別是,「??」與「ttys000」比較?TTY在unix ps命令中的含義是什麼?
我問,因爲我有一個Java程序通過ProcessBuilder執行sort
,當這個程序通過我的IDE(IntelliJ)運行時,這個過程比作爲IDE外的可執行jar運行時少5倍。
在每種情況下,當排序運行時運行ps,唯一的區別是IDE創建一個進程的TTY爲?而jar創建一個TTY爲ttys000的進程。
A TTY是一個電腦終端。在ps
的情況下,它是執行特定命令的終端。
縮寫代表「TeleTYpewriter」,它是允許用戶連接到早期計算機的設備。
與您的情況相關,該jar會創建一個名爲'ttys000'的虛擬終端,但IDE不會附加到虛擬終端以執行該命令。
一個進程可以(通常是)綁定到「控制終端」。這個終端可能是串口線末端的硬件,或者現在更可能是虛擬軟件的等價物。 TTY從父進程繼承。您的IDE最有可能與TTY分離,並且在您的java程序之外啓動時,繼承了您的shell的TTY。
有趣的是,我該如何讓jar執行unattached到終端,所以我沒有得到性能打擊? – Zugwalt
通過在命令行中追加'&',您可以從終端中分離進程。但是,如果性能命中是終端連接命令的結果,我會感到驚訝。我認爲IDE更有可能正在進行某種優化。我會期待聽到你的結果。 –
即使使用&,它仍然需要更長時間,並且在ps中顯示TTY爲ttys000。但是,當我通過IDE中的簡單Java程序執行jar時,它會運行分離且更短。我想知道它可能會進行哪種優化,或者OSX終端本身是否正在放慢速度。 – Zugwalt