GNU/Linux >> Belajar Linux >  >> Linux

Apa Hubungan Antara Terminal Pengontrol Saat Ini Dan `/ dev/tty`?

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 .

  1. /dev/tty bertindak seperti terminal pengontrol saya saat ini /dev/pts/2 :

    $ echo hello > /dev/tty
    hello
    
    $ cat < /dev/tty
    world
    world
    ^C
    
  2. 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) minta TIOCNOTTY didukung.

TIOCNOTTY

Lepaskan proses panggilan dari terminal pengontrolnya.

Jika prosesnya adalah pemimpin sesi, maka SIGHUP dan SIGCONT 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 menggunakan TIOCNOTTY , 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 ).

Terkait:Ubah pengaturan aksesibilitas di Mac menggunakan terminal?

/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.


Linux
  1. Apa perbedaan antara lsof dan netstat di linux?

  2. Apa perbedaan antara fsck dan e2fsck?

  3. Apa perbedaan antara adduser dan useradd?

  1. Apa perbedaan antara rdesktop dan xfreerdp?

  2. Apa perbedaan antara `su -` dan` su --login`?

  3. Apa perbedaan antara $(CC) dan $CC?

  1. Apa perbedaan antara InnoDB dan MyISAM?

  2. Apa perbedaan fungsional antara .profile .bash_profile dan .bashrc

  3. Apa perbedaan antara rute dan rute ip?