1.)
Sim, embora haja mais do que isso. ttys000
também é um dispositivo de caractere localizado em /dev
, um usuário que tem permissões para gravar no grupo tty
(a maioria dos usuários possui) pode enviar caracteres para esse dispositivo e eles aparecerão no terminal correspondente. ttys*
não são teletipos reais, eles são emulados tty
s, emulados pelo seu emulador de terminal (apropriadamente nomeado).
Eu não tenho um Mac, então usarei a convenção de nomenclatura do Linux para o seguinte exemplo:
Abra o terminal A como usuário A e encontre o emulado tty:
[userA@terminalA]$ tty
/dev/pts/0
Abra o terminal B como usuário B e faça o mesmo:
[userB@terminalB]$ tty
/dev/pts/3
Agora, redirecione alguns caracteres do terminal A para o terminal B:
[userA@terminalA]$ echo Hi there > /dev/pts/3
E veja-os aparecer no terminal B:
[userB@terminalB]$ Hi there
Em um Mac, os dispositivos devem ser /dev/ttys*
, acredito.
2.
Mais ou menos. O ttys000
em si é apenas o dispositivo de caractere, a entidade real que está controlando seu processo de java é o emulador de terminal. Por controlar , quero dizer que é o pai fora do seu processo de java. O pai pode interagir com seus filhos de uma maneira mais fácil do que outros processos podem.
Além disso, se certas precauções não forem tomadas (veja man nohup
para um exemplo de tal precaução), a morte do processo pai causará a morte de todos os seus processos filhos.
3)
A resposta de Karlson já explica que o ?
significa um processo não associado a um terminal.
Como o próprio terminal é apenas o dispositivo de caractere, acredito que não seja difícil concluir que não é necessário que um processo seja associado a um dispositivo terminal.
Notas de encerramento
Os terminais reais /dev/tty
dificilmente são usados nos modernos sistemas operacionais * nix (embora sejam usados de forma prática durante o processo de inicialização). Mas isso não significa que você não possa usar os terminais reais. Em uma máquina Linux (desculpe, eu não tenho ideia de como um Mac executa isso) a combinação Ctrl + Alt + F1 (e F2 , F3 , ... até F7 ) fornece um terminal real . Um desses terminais reais é usado para executar a exibição gráfica.
Vários processos (incluindo aplicações gráficas) em um moderno sistema operacional * nix estão associados a um dispositivo terminal porque o script que os inicia precisa passar argumentos extras. O script dispara um shell passa os argumentos extras e inicia o processo. Esses scripts são frequentemente causas de confusão.