tmux lambat untuk mengganggu proses dengan Ctrl-C

25

Jika saya menjalankan perintah dengan banyak output di tmux, tetapi memutuskan untuk membatalkannya dengan Ctrl-C, ada jeda 10-15 detik sebelum berhenti. Namun, jika saya melakukan hal yang sama di luar tmux, segera berhenti. Mengapa ini, dan apakah bisa diperbaiki?

Dalam praktiknya, masalah ini muncul ketika saya melakukan grep -Rpada direktori besar dan pencarian saya tidak cukup dibatasi. Solusinya adalah menyalurkan hasilnya wcterlebih dahulu untuk memastikan hasilnya tidak terlalu lama, tapi itu hanya langkah lain yang ingin saya hindari.


Catatan:

  • Ini memiliki perilaku yang sama di Terminal Gnome, uxterm, st, dan terminal virtual biasa (misalnya, ctrl-alt-f2), tetapi penundaannya kurang di terminal virtual biasa.
  • Saya bukan satu-satunya: http://www.mail-archive.com/[email protected]/msg01569.html
  • Penundaan lebih lama jika jendela terminal saya lebih besar. Untuk terminal layar penuh, dibutuhkan sekitar 15 detik untuk berhenti grep -R(tidak ada argumen lain) dalam direktori home yang berantakan. Untuk terminal 80x25 karakter, terminal akan segera berhenti.
Semakin bertambah
sumber
Saya tidak melihat adanya perbedaan yang terlihat. Saya sudah mencoba grep -R "a" ~/(tidak menulis ke file) ... dan yes | nl | cut -f1 | head -9999999 > ~/filekemudian cat ~/file.
Peter.O
@ Peter.O Cukup masukkan "ya" lalu tekan Enter, tmux Anda sudah hancur.
solotim

Jawaban:

10

tmux sekarang memiliki opsi berikut:

c0-change-interval interval
c0-change-trigger trigger

Anda dapat mengatur nilai untuk ini, yang akan membuat ^ C dan teman-teman lebih mudah untuk mengetik. Lihat man tmux:

Dua opsi ini mengonfigurasi bentuk sederhana pembatasan tingkat untuk panel. Jika tmux melihat lebih dari urutan C0 pemicu yang mengubah layar (misalnya, carriage return, linefeed, atau backspaces) dalam satu milidetik, ia akan berhenti memperbarui panel dengan segera dan alih-alih menggambarnya kembali setiap interval milidetik. Ini membantu mencegah keluaran cepat (seperti ya (1)) membuat terminal kewalahan. Standarnya adalah pemicu 250 dan interval 100. Pemicu nol menonaktifkan batas tarif.

ThomasAdam
sumber
Ini harus menjadi solusi yang diterima, karena itu berfungsi.
polym
2
Misalnya setw -g c0-change-trigger 10 setw -g c0-change-interval 250>> ~ / .tmux.conf
DmitrySandalov
2
Saya mencoba ini di tmux 2.3 dan mereka tidak dikenali. Itu menjadi benar-benar tidak dapat digunakan ketika perintah memuntahkan banyak output.
ijt
1
Sejak Tmux 2.1, opsi ini tidak ada lagi menurut raw.githubusercontent.com/tmux/tmux/2.6/CHANGES Opsi c0- * untuk pembatasan tingkat telah dihapus. Sebaliknya, pendekatan backoff digunakan.
megar
7

Anda selalu dapat mengeluarkan kill-paneperintah dari dalam sesi. Jika teks terminal terlihat seperti sampah yang mengganti nama jendela dan / atau mengeluarkannya resetharus memperbaikinya.

lukaszkorecki
sumber
4

Karena tmuxmemasukkan sendiri antara catproses dan terminal Anda, ia perlu membaca output dari cat, menulisnya ke terminal, dan pada saat yang sama membaca input Anda dari terminal (the ^ C) dan mengirimkannya ke shell untuk menghentikan perintah. Saya tidak yakin persis apa yang menyebabkan penundaan, tetapi itu adalah sesuatu tentang bagaimana tmuxbuffer I / O antara Anda dan shell yang berjalan tmux.

chepner
sumber
3

Dengan asumsi Anda menggunakan ssh melalui koneksi latensi rendah, sudahkah Anda mencoba menggunakan mosh ? Di antara hal-hal lain yang sangat bagus seperti prediksi input dan juga sambungan yang terputus dan bahkan perubahan IP di sisi klien, itu juga secara khusus meningkatkan waktu reaksi ketika menggunakan Ctrl-C (dengan hanya memperbarui konten terminal secara berkala alih-alih mengirim seluruh aliran) .

Anda dapat menggunakan di tmuxdalam moshtanpa masalah.

Julien Oster
sumber
Anehnya, ini terjadi ketika saya bekerja secara lokal. mosh terlihat cukup rapi.
Bola Salju
1

Saya mengalami masalah dengan tmux 2.3. Saya mencoba mengatur opsi c0-change-interval dan c0-change-trigger seperti yang dijelaskan di atas tetapi mereka tidak lagi tersedia. Berikut adalah perubahan git dengan solusi percobaan baru: https://github.com/tmux/tmux/commit/3f4ee98162cd5bb7000f93fec0e631e123b1281d

Kembali ke tmux 1.8 memperbaiki masalah bagi saya tanpa harus mengatur opsi apa pun.

ijt
sumber
Mereka tampaknya mencoba untuk memperbaikinya daripada menggunakan solusinya, jadi versi yang lebih baru akan mendapatkan hasil yang lebih baik. github.com/tmux/tmux/issues/849
dragon788