При работе с сигналами POSIX, у вас есть два средства в вашем распоряжении. Во-первых, легкий (но устаревший) способ, signal(). Во-вторых, более элегантный, современный, но сложный способ, sigaction(). Используйте sigaction(), если вы не обнаружите, что он недоступен на какой-либо платформе, над которой вам нужно работать.
This chapter руководство пользователя glibc объясняет различия между ними и дает хороший пример кода о том, как использовать оба варианта. Он также перечисляет сигналы, которые могут быть обработаны, рекомендует, как они должны обрабатываться и углубляться в том, как рассказать, каким образом любой данный сигнал (или нет) в настоящее время составляет , являющийся. Это больше кода, чем хотелось бы вставить в ответ здесь, следовательно, ссылки.
Это действительно стоит часа или двух, чтобы вы могли прочитать ссылки и работать с примерами. Обработка сигналов (особенно в программах, которые демонизируют) чрезвычайно важна. Хорошая программа должна обрабатывать все фатальные сигналы, которые могут обрабатываться (то есть SIGHUP), и явно игнорировать сигналы, которые он может не использовать (то есть SIGUSR1/SIGUSR2).
Это также не помешает изучить разницу между нормальными и реальными сигналами времени, по крайней мере, до понимания того, как ядро объединяет предыдущее, а не последнее.
После того, как вы пройдете через него, вы, вероятно, почувствуете склонность писать простой и удобный набор функций для обработки ваших сигналов и повторного использования этого кода снова и снова.
Извините за не давая быстрый и грязный фрагмент кода, чтобы показать вам, как решить насущную потребность, но это не быстрая и грязная тема :)
Я не рекомендовал бы это. Есть очень мало примеров, когда я могу подумать, где хорошая идея для программы переопределить функцию kill-Ctrl's - инструмент удаленного подключения, такой как SSH, являющийся одним из них. –
Это просто для понимания того, как обращаться с сигналами. – Dave
Любая программа-интерпретатор должна улавливать ctrl-C, чтобы прервать размещенную программу, если она запущена. – Potatoswatter