Я использовал bc
утилита недавно и Ctrl+C не могут использоваться для выхода из программы. Ctrl+C interrupt
сигнал возвращается с сообщением use quit to exit.
Я могу использовать EOF
(Ctrl+D) или quit
выходить.
Я прочитал различие между ^Z
и ^C
. Технически, ^C
должен закончить программу (и большинство программ действительно прерывается при получении interrupt
сигнал). Но bc
возвращает сообщение, прося, чтобы мы использовали quit
вместо этого.
Я задавался вопросом, там определенное преимущество в этом?
Ctrl + C отправляет SIGINT (интервал сигнала прорываются), который делает процесс, который будет прерван (другими словами, он уничтожает процесс). Некоторые программы могут поймать этот сигнал и проигнорировать его, который имеет место с bc
.
символ Ctrl + D отправляет EOT (конец передачи) символ. Получение этого сигнала имеет подобный эффект, как будто, когда программа читала из файла, и достиг конца того файла. Эффективно, bc
ожидает Вас, чтобы сказать этому, что Вы больше не ввели для предоставления.
, Что касается почему... это до разработчиков, чтобы указать, как программа выходит, а также как это взаимодействует с пользователями
я задавался вопросом, там определенное преимущество в этом?
Да. Если Вы вызываете длительную функцию в до н.э, можно прервать ее с помощью control+c, и она не выйдет до н.э из себя, но выполнение функции в до н.э
Вот пример того, что я делал это:
$ bc twins.b
bc 1.06
Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
typing 'twins (10)' will print all twin primes less than 10.
twins(10000000)
^C
Runtime error (func=primes, adr=113): interrupted execution
Interruption completed.
print "As you can see, bc is still running\n"
As you can see, bc is still running
5+7
12
, Если Вы хотите видеть, близнецы функционировать, загружают до н.э исходный код и смотрят в каталоге Examples.
Сценарий или приложение могут поймать и предотвратить события и таким образом, внутренне предлагают методы завершения. Почему разработчики сделали так, необходимо спросить себя.
<час>Вы видите простой пример в следующем сценарии оболочки:
# Call trapint function when recive SIGINT
trap trapint SIGINT
# trapint function:
function trapint {
echo "*** SIGINT received ***" # Print a message
exit 0 # Exit gracefully
}