1

我正在研究一段代码,它监视目录并在该目录中创建新文件时执行某些任务。我正在使用 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 个进程仍在运行。那么,如何在脚本退出时进行清理呢?

4

1 回答 1

1

在父进程中安装一个信号处理程序,当它即将被信号(SIGINT、SIGTERM、SIGQUIT、SIGHUP)杀死时触发,然后依次向子进程(FSSM 监视器)发送适当的信号。

于 2014-01-29T00:36:44.953 回答