Почему не делает 'до н.э' служебного выхода с '^C'

Я использовал bc утилита недавно и Ctrl+C не могут использоваться для выхода из программы. Ctrl+C interrupt сигнал возвращается с сообщением use quit to exit. Я могу использовать EOF (Ctrl+D) или quit выходить.

Я прочитал различие между ^Z и ^C. Технически, ^C должен закончить программу (и большинство программ действительно прерывается при получении interrupt сигнал). Но bc возвращает сообщение, прося, чтобы мы использовали quit вместо этого.

Я задавался вопросом, там определенное преимущество в этом?

5
задан 26 September 2015 в 08:20

3 ответа

Ctrl + C отправляет SIGINT (интервал сигнала прорываются), который делает процесс, который будет прерван (другими словами, он уничтожает процесс). Некоторые программы могут поймать этот сигнал и проигнорировать его, который имеет место с bc.

символ Ctrl + D отправляет EOT (конец передачи) символ. Получение этого сигнала имеет подобный эффект, как будто, когда программа читала из файла, и достиг конца того файла. Эффективно, bc ожидает Вас, чтобы сказать этому, что Вы больше не ввели для предоставления.

, Что касается почему... это до разработчиков, чтобы указать, как программа выходит, а также как это взаимодействует с пользователями

5
ответ дан 23 November 2019 в 08:48

я задавался вопросом, там определенное преимущество в этом?

Да. Если Вы вызываете длительную функцию в до н.э, можно прервать ее с помощью 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.

5
ответ дан 23 November 2019 в 08:48

Сценарий или приложение могут поймать и предотвратить события и таким образом, внутренне предлагают методы завершения. Почему разработчики сделали так, необходимо спросить себя.

<час>

Вы видите простой пример в следующем сценарии оболочки:

# Call trapint function when recive SIGINT
trap trapint SIGINT

# trapint function:
function trapint {
 echo "*** SIGINT received ***"  # Print a message
 exit 0                          # Exit gracefully
}

1
ответ дан 23 November 2019 в 08:48

Другие вопросы по тегам:

Похожие вопросы: