Pengaruh Ctrl-S / XOFF pada proses
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
htopberhenti memperbarui tampilan, yang bagus untuk diketahui, tetapihtopmasih 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.
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.