Что означает TTY в команде unix ps?

Когда я запускаю PS, одним из выходных столбцов является TTY. Что это значит? В частности, как значение "??" сравнить с "ttys000"?

Я спрашиваю, потому что у меня есть программа Java, выполняемая sort через ProcessBuilder, и когда эта программа запускается через мою IDE (IntelliJ), процесс занимает в 5 раз меньше времени, чем при запуске в виде исполняемого jar-файла вне IDE.

В каждом случае я запускаю ps во время сортировки, и единственная разница в том, что IDE создает процесс с TTY ?? тогда как jar создает процесс с TTY ttys000.


person Zugwalt    schedule 18.08.2011    source источник


Ответы (2)


TTY — это компьютерный терминал. В контексте ps это терминал, который выполнил конкретную команду.

Аббревиатура означает «TeleTYpewriter» — устройства, которые позволяли пользователям подключаться к ранним компьютерам.

Что касается вашей ситуации, jar создает виртуальный терминал с именем «ttys000», но IDE не подключается к виртуальному терминалу для выполнения команды.

person George Cummins    schedule 18.08.2011
comment
Интересно, а как я могу запустить банку без привязки к терминалу, чтобы не снизить производительность? - person Zugwalt; 19.08.2011
comment
Вы отсоединяете процесс от терминала, добавляя «&» к командной строке. Однако я был бы удивлен, если бы снижение производительности было результатом прикрепления команды к терминалу. Я думаю, что более вероятно, что IDE выполняет какую-то оптимизацию. Буду ждать ваших результатов. - person George Cummins; 19.08.2011
comment
Даже с & это все еще занимает больше времени и отображается в ps с TTY ttys000. Однако, когда я запускаю банку с помощью простой Java-программы в среде IDE, она работает отдельно и короче. Интересно, какая это может быть оптимизация, и/или сам терминал OSX замедляет работу. - person Zugwalt; 19.08.2011
comment
Вы ответили на мой вопрос TTY (спасибо!) и создали новый для проблемы с производительностью: stackoverflow.com/questions/7124489/ - person Zugwalt; 19.08.2011
comment
Примечание. Моя проблема с производительностью была связана с тем, что IntelliJ и оболочка использовали разные кодировки по умолчанию. - person Zugwalt; 13.06.2014
comment
@GeorgeCummins в большинстве оболочек переводит процесс в фоновый режим, но не отключает управляющий терминал. Для этого вам нужно использовать nohup (man 1) или disown (см. справочную страницу вашей оболочки). пользователи zsh могут использовать &! вместо &. - person Jürgen Strobel; 23.08.2018

Процесс может быть (и обычно) привязан к «управляющему терминалу». Этот терминал может быть аппаратным обеспечением в конце последовательной линии или, что более вероятно сегодня, быть эквивалентом виртуального программного обеспечения. TTY наследуется от родительского процесса. Скорее всего, ваша среда IDE отключается от своего TTY, и при запуске вне вашей Java-программы наследует TTY вашей оболочки.

person Jürgen Strobel    schedule 18.08.2011