Восстановить перезаписанный файл [дубликат]

1.)

Да, хотя это еще не все. ttys000 - это также символьное устройство, находящееся в /dev, пользователь, имеющий права на запись в группу tty (большинство пользователей имеют), может передавать символы в это устройство, и они появятся на соответствующем терминале. tty* - это не настоящие телетайпы, это эмулированные tty, эмулированные вашим (соответствующим образом названным) эмулятором терминала.

У меня нет Mac, поэтому я буду использовать соглашение об именовании Linux для следующего примера:

Откройте терминал A как пользователь A и найдите эмулированный tty:

[userA@terminalA]$ tty
/dev/pts/0

Откройте терминал B как пользователь B и сделайте то же самое:

[userB@terminalB]$ tty
/dev/pts/3

Теперь перенаправьте пару символов с терминала A на терминал B:

[userA@terminalA]$ echo Hi there > /dev/pts/3

И посмотрите, как они появятся на терминале B:

[userB@terminalB]$ Hi there

На Mac устройства должны быть /dev/ttys*, я полагаю.

2.)

Более или менее. Сам ttys000 - это просто символьное устройство, фактическая сущность, которая управляет вашим java-процессом - это эмулятор терминала. Под управляющим я подразумеваю, что он является родителем вашего java-процесса. Родитель может взаимодействовать со своими дочерними процессами проще, чем другие процессы.

Более того, если не принять определенные меры предосторожности (см. man nohup для примера такой предосторожности), смерть родительского процесса приведет к смерти всех его дочерних процессов.

3)

В ответе Karlson уже объяснялось, что ? означает процесс, не связанный с терминалом.

Поскольку терминал сам по себе является лишь знаковым устройством, я полагаю, нетрудно сделать вывод, что процессу не обязательно быть связанным с терминальным устройством.

Заключительные замечания

Фактические терминалы /dev/tty почти не используются в современных *nix OS (хотя они активно используются в процессе загрузки). Но это не означает, что вы не можете использовать фактические терминалы. На машине Linux (извините, я понятия не имею, как это делается на Mac) комбинация Ctrl + Alt + F1F2, F3, ... ... до F7) дает вам реальный терминал. Один из этих реальных терминалов используется для выполнения графического отображения.

Несколько процессов (включая графические приложения) в современной *nix OS связаны с терминальным устройством, потому что сценарий, запускающий их, должен передавать дополнительные аргументы. Сценарий, запускающий оболочку, передает дополнительные аргументы и запускает процесс. Такие сценарии часто становятся причиной путаницы.

1
14.07.2014, 03:50
0 ответов

Теги

Похожие вопросы