2014-01-29 82 views
1

我正在處理一段代碼,該代碼監視目錄並在該目錄中創建新文件時執行某些任務。我使用FSSM和我(簡化)的代碼如下所示:當ruby退出時停止FSSM進程

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 

即,有3個進程仍在運行。那麼,在腳本退出後如何清理?

回答

1

在父進程中安裝一個信號處理程序,當信號即將被信號(SIGINT,SIGTERM,SIGQUIT,SIGHUP)殺死,然後又向子進程(FSSM監控程序)發送適當的信號時, 。

+0

聽起來很有希望。任何一些代碼示例的機會?即我如何聽取殺人信號,然後如何殺死孩子的過程? – barry

+0

請參閱[這裏](http://www.ruby-doc.org/core-2.1.0/Signal.html)瞭解信號處理。通過'Process.kill'完成一個信號發送過程。 – Alfe

+0

謝謝你。我無法做到這一點,但爲我的需求找到了一條更容易的路線 - 因爲我的腳本會在整個機器運行期間運行,我將在重新啓動時啓動它,並在斷電時死亡。我會將此標記爲已接受。 – barry

相關問題