Di Lubuntu 18.04, saya menjalankan shell di lxterminal. Terminal pengontrolnya adalah budak pseudoterminal saat ini:
$ tty
/dev/pts/2
Saya ingin tahu apa hubungan antara terminal pengontrol saya saat ini /dev/pts/2
dan /dev/tty
.
-
/dev/tty
bertindak seperti terminal pengontrol saya saat ini/dev/pts/2
:$ echo hello > /dev/tty hello $ cat < /dev/tty world world ^C
-
Tapi sepertinya itu adalah file yang tidak terkait, alih-alih yang satu menjadi symlink
atau hardlink ke yang lain:$ ls -lai /dev/tty /dev/pts/2 5 crw--w---- 1 t tty 136, 2 May 31 16:38 /dev/pts/2 13 crw-rw-rw- 1 root tty 5, 0 May 31 16:36 /dev/tty
Untuk sesi yang berbeda dengan terminal pengontrol yang berbeda, jika/dev/tty
dijamin menjadi terminal pengendali mereka. Bagaimana bisa
terminal pengontrol yang berbeda, tanpa menjadi symlink atau
hardlink?
Jadi apa hubungan dan perbedaan mereka? Bantuan apa pun sangat dihargai!
Postingan ini berasal dari postingan sebelumnya Apakah output dari perintah `tty` dan file `/dev/tty` keduanya merujuk ke terminal pengontrol dari proses bash saat ini?
Jawaban yang Diterima:
tty
halaman manual di bagian 4 mengklaim sebagai berikut:
Berkas /dev/tty adalah file karakter dengan nomor mayor 5 dan minor
nomor 0, biasanya dengan mode 0666 dan pemilik.grup root.tty. Ini adalah
sinonim untuk terminal pengontrol dari suatu proses, jika ada.Selain
ioctl(2)
permintaan yang didukung oleh perangkat yang dirujuk oleh tty
,ioctl(2)
mintaTIOCNOTTY
didukung.
TIOCNOTTY
Lepaskan proses panggilan dari terminal pengontrolnya.
Jika prosesnya adalah pemimpin sesi, maka
SIGHUP
danSIGCONT
sinyal
dikirim ke grup proses latar depan dan semua proses di
sesi saat ini kehilangan tty pengontrolnya.
ioctl(2)
. ini panggilan hanya berfungsi pada deskriptor file yang terhubung ke /dev/tty . Ini digunakan oleh proses daemon saat dipanggil oleh pengguna
di terminal. Proses mencoba membuka /dev/tty . Jika
pembukaan berhasil, ia melepaskan dirinya dari terminal dengan menggunakanTIOCNOTTY
, sedangkan jika pembukaan gagal, jelas tidak terpasang ke
terminal dan tidak perlu melepaskan diri.
Ini akan menjelaskan sebagian mengapa /dev/tty
bukan symlink ke terminal pengontrol:itu akan mendukung ioctl
tambahan , dan mungkin tidak ada terminal pengontrol (tetapi suatu proses selalu dapat mencoba mengakses /dev/tty
). Namun dokumentasinya salah:ioctl
tambahan tidak hanya dapat diakses melalui /dev/tty
(lihat jawaban mosvy, yang juga memberikan penjelasan yang lebih masuk akal untuk sifat /dev/tty
).
/dev/tty
dapat mewakili terminal pengontrol yang berbeda, tanpa menjadi tautan, karena driver yang mengimplementasikannya menentukan terminal pengontrol proses pemanggilan, jika ada.
Anda dapat menganggap ini sebagai /dev/tty
menjadi terminal pengontrol, dan dengan demikian menawarkan fungsionalitas yang hanya masuk akal untuk terminal pengontrol, sedangkan /dev/pts/2
dll. adalah terminal biasa, salah satunya mungkin merupakan terminal pengontrol untuk proses tertentu.