К сожалению, sendmail
и mailx
не позволяют указать другой SMTP-сервер. Но вы можете совместить ответ Анджея с ssh. Хотя я буду использовать опцию -t
для чтения получателей из читаемого файла/данных.
cat <messagefile> | ssh user@mailhost /usr/sbin/sendmail -i -t
<messagefile>
— это файл, содержащий сообщение MIME, а mailhost — это SMTP-сервер. user
— это идентификатор входа на SMTP-сервер.
Как вы обнаружили, наиболее вероятной причиной того, что программа игнорирует SIGINT, является ошибка. Программы с хорошим -поведением должны уважать сигналы, и обычно SIGINT означает «пожалуйста, выйдите», но это не обязательное поведение. Программа имеет полное право использовать SIGINT в своих целях. В том же ключе SIGHUP используется многими демонами программ (, обычно )для обозначения «перезагрузки файлов конфигурации» вместо «ваш управляющий терминал завис».
Конечно, вопрос о том, должна ли программа обрабатывать SIGINT по-разному, по этим или другим причинам, является спорным. Вероятно, это удивит или смутит таких пользователей, как вы, которые ожидают, что программа завершит работу достаточно быстро. Таким образом, хорошо работающая -программа, рассматривающая возможность обработки SIGINT необычным способом, должна гарантировать, что такое поведение будет иметь смысл в контексте (большинства )пользователей.
В этой статье (, связанной с Википедией ), подробно рассказывается о SIGINT и правильной обработке, а также обсуждается ряд крайних -случаев, которые стоит учитывать при реализации обработки SIGINT.