Pengaruh Ctrl-S / XOFF pada proses

Sep 23 2020

Saat saya berlari, apt upgradesaya secara tidak sengaja mengirim Ctrl- Ske jendela terminal itu.

Sekarang saya tahu XOFF, XON, Ctrl- Q, dan sesuatu yang baru tentang teletype.

Ketika saya mengirim Ctrl- Qke terminal "dijeda", aptdilanjutkan dengan pekerjaannya.

Dari membaca tentang XOFF, tidak jelas bagi saya apa yang terjadi di apt, atau apa yang terjadi secara umum dalam setiap perintah yang menerima file XOFF. htopberhenti memperbarui tampilan, yang merupakan sesuatu yang baik untuk diketahui, tetapi htopmasih berjalan?

Apakah aptmasih berjalan? Atau apakah aptdan htopsecara efektif dijeda, dibekukan?

Ternyata proses masih bisa menerima masukan, sementara XOFFd, jadi masih dieksekusi.

Apa yang terjadi? Misalnya, penghitung program, ternyata itu tidak hanya berhenti menaikkan penghitung program, membekukan program.

Apakah itu tergantung pada bagaimana perintah diprogram untuk menangani XOFF? Apakah ada perilaku umum yang diharapkan dari perintah dasar Linux?

Jawaban

1 user414777 Sep 23 2020 at 21:01

htopberhenti memperbarui tampilan, yang bagus untuk diketahui, tetapi htopmasih berjalan [setelah Ctrl-S dimasukkan]?

Ya, tentu saja. htopatau perintah lain TIDAK dihentikan atau dibekukan oleh Ctrl-S.

The IXONPengaturan termios tidak bekerja seperti ISIG. Mengetik karakter VSTOP(Ctrl-S) atau VSTART(Ctrl-Q) TIDAK mengirimkan sinyal apa pun ke proses yang berjalan di terminal.

Sangat mudah untuk memeriksanya; buka dua terminal: masuk pertama

tail -f /tmp/file

dan di detik

cat > /tmp/file

Sekarang, di terminal kedua ketik Ctrl-S, lalu tetap mengetik baris yang diikuti dengan Enter. Mereka akan muncul di layar di terminal pertama. Jika bukan catitu shell dan itu adalah perintah seperti rm ..., mereka akan dijalankan tanpa harus di-echo kembali di layar.

apa yang terjadi secara umum dalam setiap perintah yang menerima XOFF.

Perintah tidak "menerima XOFF". Semuanya ditangani di dalam driver terminal. Dari sudut pandang aplikasi, tidak ada yang terjadi. Jika program terus mengirimkan output yang berlebihan (atau ECHOpengaturan termios aktif - default-- dan terus menerima input yang berlebihan) setiap penulisan (atau pembacaan masing-masing) ke terminal pada suatu saat akan memblokir hingga Ctrl-Q diterima.

1 AdminBee Sep 23 2020 at 19:17

Seperti yang mungkin sudah Anda ketahui, XONdan XOFF, terikat pada Ctrl+ Sdan Ctrl+ Qsecara default, adalah karakter kontrol aliran perangkat lunak dan pada prinsipnya merupakan peninggalan dari masa lalu terminal teletipe pencetakan kertas . Mereka digunakan pada saat peralatan penerima (seringkali printer kertas) kadang-kadang tidak bisa mengikuti masukan yang dikirim oleh pengirim jarak jauh.

Saat ini, teletipe kertas tidak lagi digunakan, tetapi ide di baliknya masih dipertahankan dalam kerangka perangkat lunak "terminal" (lihat misalnya di sini dan artikel yang sangat bagus tentang sejarah TTY ini ), yang mewarisi dan masih menerapkan beberapa konsep yang digunakan dalam terminal berbasis kertas asli - salah satunya adalah kemampuan untuk menafsirkan karakter kontrol aliran.

Biasanya, program yang berjalan "di konsol", yaitu terhubung ke pseudo-terminal, tidak bisa melihat karakter XONdan XOFFkarena secara default ditangkap oleh terminal, di mana perilaku standarnya XOFFadalah menghentikan pencetakan outputnya. menerima dari program. Program itu sendiri tidak terpengaruh dan terus berjalan di latar belakang, hanya keluarannya tidak "dikirim" ke pengguna sampai XONditerima lagi.

Jika Anda menulis program dan ingin secara eksplisit menerima karakter input ini, Anda dapat menggunakan tcsetattr()panggilan sistem dalam program Anda untuk menonaktifkan kontrol aliran perangkat lunak melalui IXOFFtanda (lihat di sini, misalnya ) - nanolakukan itu , misalnya.