2014-01-29 1 views
1

Я работаю над фрагментом кода, который контролирует каталог и выполняет определенные задачи при создании нового файла в этом каталоге. Я использую мой и ФСФР (упрощенно) код выглядит следующим образом:Остановка процессов FSSM при выходе из ruby ​​

require 'fssm' 

class FileWatcher 

def initialize 

    FSSM.monitor('./temp/', '**/*', :directories => true) do 
     create do |base, relative| 
      puts "Create called with #{relative}" 
     end 
    end 
end 
end 

FileWatcher.new 

Файл аспект мониторинга работает хорошо, но моя проблема в том, когда я остановить этот сценарий. Случается, что процесс «file_monitor» остается включенным. Например. это после запуска и остановки сценария 3 раза:

$ ps aux | grep file_watcher 
root  3272 1.0 5.3 9760 6596 pts/0 Tl 00:11 0:02 ruby file_watcher.rb 
root  3302 1.5 5.2 9760 6564 pts/0 Tl 00:14 0:02 ruby file_watcher.rb 
root  3314 2.2 5.2 9764 6564 pts/0 Sl+ 00:14 0:02 ruby file_watcher.rb 

I.e. есть еще 3 процесса. Итак, как очистить выход из сценария?

ответ

1

Установите обработчик сигнала в процессе отцов, который запускается, когда он собирается быть убитым сигналом (SIGINT, SIGTERM, SIGQUIT, SIGHUP) и который затем, в свою очередь, посылает соответствующий сигнал дочернему процессу (монитор FSSM) ,

+0

Звучит многообещающе. Есть вероятность, что некоторые образцы кода? То есть Как я могу прослушивать сигнал kill, тогда как я могу убить дочерний процесс? – barry

+0

См. [Здесь] (http://www.ruby-doc.org/core-2.1.0/Signal.html) для обработки сигналов. Отправляя процесс, сигнал выполняется через «Process.kill». – Alfe

+0

Спасибо. Мне не удалось получить эту работу, но нашел более простой маршрут для моих нужд - поскольку мой скрипт будет работать все время, когда машина работает, я просто запустил его при перезагрузке, и он будет убит при отключении питания. Я отмечу это как принятое. – barry

Смежные вопросы