it-swarm-id.com

Cara memberi sinyal akhir input stdin

  1. Di Bash, saya belajar bahwa sinyal akhir dapat diubah dengan dokumen di sini. Tetapi secara default bagaimana saya bisa memberi sinyal akhir input stdin?
  2. Kebetulan saya menemukan bahwa dengan cat dan chardet, input stdin mereka dapat ditandai sebagai selesai oleh Ctrl + d. Tapi sepertinya saya ingat bahwa Ctrl + d dan Ctrl + c mirip dengan mengakhiri eksekusi dari perintah yang sedang berjalan. Jadi saya salah?
84
Tim

Ctrl+D, saat mengetik di awal baris pada terminal, menandakan akhir input. Ini bukan sinyal dalam arti unix: ketika aplikasi membaca dari terminal dan pengguna menekan Ctrl+D, aplikasi diberitahu bahwa akhir file telah tercapai (sama seperti jika sedang membaca dari file dan telah melewati byte terakhir).

Ctrl+C tidak mengirim sinyal, SIGINT . Secara default SIGINT (sinyal interupsi) membunuh aplikasi latar depan, tetapi aplikasi dapat menangkap sinyal dan bereaksi dengan cara yang berbeda (misalnya, Shell sendiri menangkap sinyal dan membatalkan garis yang sudah Anda ketik, tetapi tidak t keluar, ini menunjukkan Prompt baru dan menunggu baris perintah baru).

Anda dapat mengubah karakter yang terkait dengan akhir file dan SIGINT dengan perintah stty , mis. stty eof a akan menjadikan a karakter akhir file, dan stty intr ^- akan menonaktifkan karakter SIGINT. Ini jarang bermanfaat.

Poin kedua Anda menggabungkan dua hal yang sama sekali berbeda.

  • Ctrl + C mengirimkan sinyal kill ke proses yang sedang berjalan.
  • Ctrl + D mengirimkan End of Transmission karakter.

Anda mencari yang terakhir.

23
Caleb