Указатель NULL
- это тот, который указывает на никуда. Когда вы разыскиваете указатель p
, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p
является нулевым указателем, местоположение, хранящееся в p
, является nowhere
, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception
.
В общем, это потому, что что-то не было правильно инициализировано.
Необходимо реализовать моносервис обслуживания и использования. Google для него и Вы найдете несколько примеров.
Для получения уведомлений в Unix путь, который использует сигналы, Вы хотите использовать Моно. Unix. UnixSignal для каждого сигнала, что Вы планируете получение и затем называете UnixSignal. WaitAny () на массиве сигналов.
<час>Вы обычно делали бы это на отдельном потоке.
Простой метод состоял бы в том, чтобы послушать на (локальный, высоко) порт и получить команды от клиента управления, как связывают, делает.
А больше выхода Unix путь был бы к , регистрируют обработчик сигналов использование UnixSignal и завершают работу правильно при получении определенного сигнала. Посмотрите Моно FAQ, "Я могу использовать обработчики сигналов с Моно?" для протестов и примера.
волчанка нашла моносервис , который является процессом хостинга с помощью ServiceProcess
интерфейсы. Печально это требует установки MONO_DISABLE_SHM
, которая отключает некоторые опции в Моно, в особенности межпроцессные системы IPC.
Демон в соответствии с Linux обычно слушает сигналы, как сигнал уничтожения, но существуют другие, которые позволяют ему делать вещи как "мягкий" перезапуск (читает назад в конфигурации), и т.д.
Обычно это сопровождается сценарием в/etc/init.d каталоге, который управляет запуском и остановкой таких демонов. Обычно изодромный с предварением файл создается под/var/run, который сохраняет идентификатор процесса для сценария для идентификации процесса быстро.
, кодируя для Моно, Вы преуспели бы, поняв среду, для которой Вы кодируете, так как нет никакого различия между Моно процессом или собственным процессом (создано в C, например) или сценарий.
Dave
Miguel de Icaza недавно записал о новом Моно интерактивная оболочка C# , что необходимо быть в состоянии к daemonize достаточно легко. Miguel имеет последующая статья с некоторым исходным кодом, который показывает, как можно включать интерактивную оболочку в другие приложения C#. Это может служить хорошей начальной точкой для Вашего демона.
Примечание, что интерактивная оболочка требует Моно версии 2.2, которая еще не была выпущена. Код доступен в репозиторий SVN Mono , как бы то ни было.
David корректен, останавливание сервиса выполняется через сигнал UNIX, и необходимо использовать обработчик сигналов для ловли его.
В качестве альтернативы я использую сценарий оболочки. Он запускает мое приложение mono, а затем, когда мое приложение завершает работу (намеренно или ненамеренно), просматривает все сигналы возврата, которые установило мое приложение. Это можно использовать для указания скрипту скопировать обновление, перезапустить или выйти. Если мое приложение аварийно завершается, сигнал не возвращается, поэтому скрипт перезапустит мое приложение и отправит мне письмо с последними несколькими строками консольного вывода.
См. Разработка Windows-подобных сервисов в LINUX с помощью MONO?