Ketika saya melakukannya tail -f filename
, bagaimana cara keluar dari mode tanpa menggunakan Ctrl+c
untuk mematikan proses?
Apa yang saya inginkan adalah cara normal untuk berhenti, seperti q
di top
.
Saya hanya ingin tahu tentang pertanyaan itu, karena saya merasa bahwa membunuh proses itu bukanlah cara yang baik untuk berhenti.
tail
tidak interaktif; tidak menerima perintah.man signal
lebih lanjuttail
atau bahkan membunuhnya tanpa khawatir. Tetapi jika Anda menginginkan alternatif, pertimbangkanmost
, yang memiliki mode "ikuti" yang secara resmi didokumentasikan, dimulai dengan Shift + F, dan dapat keluar dengan bersih dengan Q.tail -f
bukankah itu :)Jawaban:
Seperti yang dikatakan dalam komentar, Ctrl-Ctidak mematikan
tail
proses, yang dilakukan dengan mengirimkan sinyal SIGTERM atau SIGKILL (yang terkenal-9
...); itu hanya mengirim SIGINT yang memberitahutail
untuk mengakhiri mode maju dan keluar.FYI, ini alat yang lebih baik:
Di
less
, Anda dapat menekan Ctrl-Cuntuk mengakhiri mode maju dan menggulir seluruh file, lalu tekan Funtuk kembali ke mode maju lagi.Catatan yang
less +F
dianjurkan oleh banyak orang sebagai alternatif yang lebih baiktail -f
. Untuk perbedaan dan peringatan antara kedua alat, baca jawaban ini: Apakah `tail -f` lebih efisien daripada` less + F`?sumber
tail
tidak terbunuh oleh CTRL-C dan tidak interaktif) Saya yakin jawaban saya lebih dari cukup.kill <pid>
itu. Untuk sebagian besar program, tidak ada perbedaan nyata antaraCtrl-C
(=SIGINT
),SIGTERM
dan, sampai batas tertentuSIGKILL
,. Tindakan default untuk ketiganya adalah menghentikan proses, seolah-olahexit()
telah dipanggil, dengan pengecualian bahwa untukSIGKILL
, tidak ada kode mode pengguna yang terkait denganexit()
yang dipanggil (jadi tidak adaatexit()
pembersihan, dll.).Ctrl-C
danSIGTERM
, khususnya, benar-benar identik kecuali jika program secara eksplisit menangkap keduanya dan menindaklanjutinya. Ekor GNU tidak.exit()
dipanggil.exit()
akan menjalankanatexit()
penangan, dan membersihkan file stdio yang terbuka (yang terpenting adalah buffer output pembilasan). SeorangSIGINT
pawang bisa melakukan ini, tetapi sebagian besar program tidak mengganggu; Saya tidak tahu apakahtail
benar.Itu ControlC:)
^C
( ControlC) mengirimkan SIGINT ke proses, yang didefinisikan sebagai:Itulah yang ingin Anda lakukan di sini, menyela
tail
. Tidak ada cara lain untuk mencapai apa yang Anda coba lakukan ("baik" berhenti membuntuti) dan sementara jawaban lain menyediakan cara untuk berhentitail
dengan cara lain, mereka tidak lebih baik.Menekan
^C
akan berusaha mengganggu tugas di Linux - ini normal, dan itu hanya "tidak baik" jika proses itu di tengah-tengah sesuatu dan Anda tidak membiarkannya selesai, dan kemudian satu-satunya sisi "tidak baik" Efeknya adalah sisa hal-hal dari proses itu. Sebagai contoh,^C
di tengah-tengahmake
perintah meninggalkan sebagian perangkat lunak yang dikompilasi, tetapi tidak apa-apa: menjalankan lebih lanjutmake
akan membersihkan bahwa / melanjutkan di mana ia tinggalkan.sumber
make
contohnya adalah pengingat mengapa kita selalu menulis.DELETE_ON_ERROR:
di Makefiles kita - kita ingin Make untuk menghapus file-file antara yang ditulis sebagian ketika mengetahui bahwa salah satu perintahnya menerima sinyal.SIGINT
dan melakukan pembersihan sebelum keluar seperti yang ditunjukkan dalam.DELETE_ON_ERROR:
contoh Toby .^C
:)Kamu tidak bisa melakukan itu Mungkin Anda ingin lari
tail -f somefile | less
Ini Ctrl cditafsirkan oleh subsistem tty (dan oleh shell Anda) dan mengirimkan
SIGINT
sinyal (lihat sinyal (7) dan pty (7) ...). Lihat tty demystified .sumber
Ini akan bekerja dan menjawab pertanyaan Anda, tetapi bukan solusi yang sangat memuaskan.
Ini akan menjalankan perintah selama 15 detik dan kemudian membunuhnya untuk Anda, tanpa harus menekan
^C
sumber
tail
sedang berjalan. Tetap saja, Anda tidak salah kurasa.tail
dengan SIGTERM lebih baik daripada mengakhiri dengan SIGINT?Jawaban berbeda berdasarkan konteks. Untuk keluar dari ekor dengan anggun, Anda perlu pemicu. Asumsikan Anda mencoba untuk memantau output dari tugas yang akan selesai pada suatu waktu - yang dapat menjadi pemicu Anda.
Saya telah menggunakan ide-ide serupa di masa lalu.
Nikmati.
sumber