2011-08-18 12 views
19

Quando eseguo PS, una delle colonne di output è TTY. Cosa significa questo? In particolare, come fa il valore di "??" confrontare con "ttys000"?Cosa significa TTY nel comando unix ps?

Chiedo perché ho un programma Java eseguito sort tramite ProcessBuilder, e quando questo programma viene eseguito tramite il mio IDE (IntelliJ) il processo richiede 5 volte meno rispetto a quando viene eseguito come un jar eseguibile all'esterno dell'IDE.

In ogni caso eseguo ps quando l'ordinamento è in esecuzione e l'unica differenza è che IDE crea un processo con un TTY di ?? mentre il barattolo crea un processo con TTY di ttys000.

risposta

24

A TTY è un terminale di computer. Nel contesto di ps, è il terminale che ha eseguito un comando particolare.

L'abbreviazione sta per "TeleTYpewriter", che erano dispositivi che consentivano agli utenti di connettersi ai primi computer.

In relazione alla situazione, il jar crea un terminale virtuale denominato 'ttys000' ma l'IDE non si collega a un terminale virtuale per eseguire il comando.

+0

Interessante, quindi, come posso eseguire il jar eseguirlo senza collegamento a un terminale in modo da non ottenere il successo nelle prestazioni? – Zugwalt

+0

Si scollega un processo dal terminale aggiungendo '&' alla riga di comando. Sarei sorpreso se l'impatto sulle prestazioni fosse dovuto al fatto che il comando fosse collegato al terminale, comunque. Penso che sia più probabile che l'IDE stia eseguendo una sorta di ottimizzazione. Non vedo l'ora di sentire i tuoi risultati. –

+0

Anche con & richiede ancora più tempo e appare in ps con un TTY di ttys000. Tuttavia, quando eseguo il jar tramite un semplice programma java nell'IDE, esso viene staccato e accorciato. Mi chiedo che tipo di ottimizzazione potrebbe essere, e/o se il terminale OSX stia rallentando le cose. – Zugwalt

2

Un processo può essere (e in genere è) associato a un "terminale di controllo". Questo terminale potrebbe essere l'hardware alla fine di una linea seriale, o molto più probabilmente oggi, essere un equivalente software virtuale. Il TTY è ereditato dal processo genitore. Molto probabilmente il tuo IDE si dissocia dal TTY e quando viene avviato al di fuori del tuo programma java eredita il TTY della tua shell.

Problemi correlati