Sering kali saya tidak sengaja menjalankan cat
perintah pada file yang memiliki konten hingga beberapa ribu baris.
Saya mencoba untuk membunuh cat
perintah dengan Ctrl+ Catau Ctrl+ Z, tetapi keduanya hanya berlaku setelah total output cat
ditampilkan di terminal, jadi saya harus menunggu sampai cat
sepenuhnya dieksekusi.
Apakah ada solusi yang lebih baik yang menghindari menunggu? Karena kadang-kadang file hingga ukuran 100MB, dan itu menjengkelkan untuk menunggu.
Saya menggunakan tcsh
.
curiosity
perintah ...alias curiosity='sudo killall cat'
Jawaban:
Jika file yang dimaksud benar-benar berisi banyak data yang mengirim sinyal, sebenarnya bisa sampai
cat
sebelum selesai. Apa yang benar-benar Anda amati adalah kecepatan terminal Anda yang terbatas -cat
mengirimkan data ke terminal dan butuh beberapa waktu bagi terminal untuk menampilkan semua itu.Ingat, biasanya ia harus menggambar ulang seluruh jendela output untuk setiap baris output (yaitu memindahkan isi jendela satu baris ke atas dan mencetak baris berikutnya di bagian bawah). Meskipun ada teknik dan algoritma untuk membuat ini lebih cepat daripada jika dilakukan dengan cara yang mudah, masih membutuhkan waktu.
Jadi, jika Anda ingin menyingkirkan output secepat mungkin, sembunyikan jendela terminal , karena biasanya tidak ada redrawing yang sebenarnya terjadi. Dalam lingkungan grafis ini dapat berarti meminimalkan jendela atau beralih ke desktop virtual yang berbeda, pada konsol virtual Linux cukup beralih ke yang lain (( Ctrl+) Alt+ ).Fx
Juga perhatikan bahwa jika Anda menjalankan ini melalui tautan jaringan lambat (SSH melalui koneksi GSM misalnya), Anda pasti akan melihat lebih sedikit keluaran sebelum
cat
terbunuh oleh sinyal, karena kecepatan terminal tidak akan menjadi hambatan lagi .sumber
~?
untuk melihat opsi yang tersedia (~.
ditutup).tty-stop-output
. Anda kemudian dapat mengirim Ctrl + C. Untuk melanjutkan output, tekan Ctrl + Q ...Pengaturan Terminal
Saya rasa ini lebih berkaitan dengan cara terminal diatur, daripada dengan masalah buffering. Periksa output dari
stty -a | grep intr
, Anda harus memilikiintr = ^C;
pada baris output jika Ctrl- Cdiaktifkan ditty
/pty
. Jika tidak, Anda dapat menggunakannyastty intr ^C
untuk mengaktifkannya. Tambahkan baris ke Anda.tcshrc
atau.login
untuk membuatnya permanen (atau hapus baris yang mengubahnya di tempat pertama!).Gagal Ctrl- C, Anda juga dapat mencoba mengirim
SIGQUIT
dengan Ctrl- \. Jika ini tidak berhasil, periksa lagistty -a | grep quit
untuk melihat apakah sudah diatur dengan benar.Pengaturan Terminal Emulator
Juga periksa pengaturan untuk emulator terminal Anda (jika Anda menggunakannya), mungkin ada pintasan yang diatur pada tingkat ini (mungkin untuk menyalin atau sesuatu) dan Ctrl- Ctidak mencapai
pty
tingkat. Pintasan juga dapat diatur di tempat lain di lingkungan desktop atau sistem Window Anda.Tes yang bagus di Linux jika Anda menggunakan emulator terminal adalah beralih ke konsol Linux ( Ctrl- Alt- F1), masuk di sana dan lihat apakah perilaku yang sama terjadi. Jika tidak maka ini menunjukkan masalahnya terletak pada sistem Window atau emulator terminal Anda.
Ini bisa menjadi masalah dengan keterlambatan antara data yang sedang dibaca dari
pty
perangkat seperti yang disarankan oleh peterph . Tetapi jika hal ini terjadi dan Anda benar-benar harus menunggu menit untuk data yang akan ditampilkan, maka pasti emulator terminal buffering cara terlalu banyak data (atau PC Anda sangat lambat). Jawabannya adalah menemukan cara untuk mengurangi ukuran buffer itu di pengaturan emulator terminal Anda atau menggunakan yang lain.Tip ekstra
Sesuatu yang lain perlu ditambahkan; Saya biasanya berakhir dalam
cat
situasi pelarian ketika jika saya tidak sengajacat
file biner. Efek lain dari hal ini adalah mengacaukan pengaturan terminal Anda (jika data biner cocok dengan berbagai kode pelarian terminal yang sering dilakukannya). Jikatput
diinstal (biasanya secara default), Anda dapat menghindari keharusan me-restart dengan perintah berikut:sumber
Inilah
tmux
opsic0-change-interval
danc0-change-trigger
dirancang untuk apa. Anda harus menggunakan manajer layar untuk sesi yang dapat dilanjutkan.sumber
The Ctrl- OPilihan telah di Unix sejak 110 hari baud. Perintah runaway cat selalu menjadi masalah ketika file ASCII panjang dibuang di perangkat output lambat dan seluruh file ditempatkan di buffer output driver perangkat. Ctrl- Oakan memulai flush buffer dan tindak lanjut Ctrl- Oakan mematikan flush sehingga kucing dapat dibaca dengan kecepatan normal. Ctrl- Odimasukkan dan seluruh file akan memerah dan dengan cepat mengembalikan command prompt.
Apakah atau tidak coders driver perangkat Linux merasa perlu untuk terus menambahkan fitur ini tidak diketahui. Fitur ini ditambahkan pada level driver perangkat di mana Ctrl- Sdan Ctrl- Qhanya dapat diimplementasikan. Saya menggunakan ini untuk membuang proses debugging besar dengan banyak cetak cek dan kemudian gulir ke bawah ke tempat yang perlu saya lihat.
sumber
Saat menggunakan bash, Anda dapat menangguhkan pekerjaan menggunakan Ctrl+ Zlalu membunuhnya, baik menggunakan PID atau dengan mengikuti jawaban dari https://stackoverflow.com/questions/1624691/linux-kill-background-task (mis. Kill -9 %%)
sumber
tcsh
dan Ctrl + Z tidak berfungsi ... sudah menyatakan itu dalam pertanyaan.buka konsol baru, misalnya dengan mengklik ikon konsol atau dengan menekan Ctrl+ Alt+ F2. Di sana, masuk
dan kucing akan dibunuh kecuali jika Anda memiliki kunci NFS yang basi atau situasi "tidur yang tidak terputus" (baca di sektor yang buruk tanpa batas waktu yang ditetapkan).
sumber
cat
, ini tentang apa yangcat
telah ditulis ke terminal sebelum sekarat dan belum dibaca apalagi diproses atau ditampilkan oleh terminal emulator (dan sedang duduk di buffer (sekitar 64kiB besar di Linux) di dalam driver pty) .drop_caches
mengontrol halaman yang digunakan sebagai cache oleh kernel (biasanya untuk sistem file), bukan buffer internal terminal, driver jaringan dan semacamnya - jika itu terjadi, itu akan memiliki konsekuensi yang cukup buruk seperti yang ditunjukkan Stéphane (pada dasarnya Anda akan kehilangan data) .killall -9 cat
juga akan membunuh contoh kucing lain yang mungkin masih melakukan hal-hal baik di utas proses lainnya?Anda dapat mencoba ini
Setel ulang penggunaan layar -ctrlj
Jika kucing masih berjalan maka buka terminal baru dan jalankan ini
pkill -9 -f cat
"Ini akan membunuh semua proses kucing."sumber
pkill -f cat
pada desktop saya akan membunuh area system tray dari taskbar Xfce4.