Ruby在终止时显示回溯
如何让程序在终止时显示回溯/调用方?Ruby在终止时显示回溯,ruby,kill,Ruby,Kill,如何让程序在终止时显示回溯/调用方? 我有一个问题,在一个非我的gem中有一个无限循环,我需要知道问题在哪里报告 def hello puts 'hello' end def test while true sleep 2 hello end end test 在这个例子中,当kill信号被发送到程序时,我想知道程序在做什么(显示调用者) 目前,我在输出上显示的都是“Killed”我想你需要捕捉一个信号, 你试过了吗 我想你需要捕捉一个信号, 你试过了吗 无法捕
我有一个问题,在一个非我的gem中有一个无限循环,我需要知道问题在哪里报告
def hello
puts 'hello'
end
def test
while true
sleep 2
hello
end
end
test
在这个例子中,当kill信号被发送到程序时,我想知道程序在做什么(显示调用者)目前,我在输出上显示的都是“Killed”我想你需要捕捉一个信号, 你试过了吗
我想你需要捕捉一个信号, 你试过了吗
无法捕获sigkill信号,因为它们被发送到内核而不是进程: 但是,您可以使用一个“父”进程来监视“子”并做出相应的反应 这意味着我不能显示回溯,我可能必须使用日志文件或类似的东西
我认为反病毒有不同的工作方式来避免被杀死的问题不可能捕获sigkill信号,因为它们被发送到内核而不是进程: 但是,您可以使用一个“父”进程来监视“子”并做出相应的反应 这意味着我不能显示回溯,我可能必须使用日志文件或类似的东西 我想反病毒有一种不同的工作方式来避免被杀掉的问题 最后,您可以使用
gdb
连接到正在运行的ruby进程
gdb
取自
最后,您可以使用gdb
连接到正在运行的ruby进程
gdb
我会尝试
在{puts caller.inspect}
也许它有帮助不,它不起作用,我仍然只在术语上显示一个“Killed”字符串,也就是说,您是否使用了sigterm或sigkill(9)?使用了htop和sigkill选项。但如果可能的话,我希望它能够与Windows兼容(不知道它使用什么),也就是说linux。只有具有进程或根用户的真实或有效用户ID的用户才能向进程发送信号。所以你的杀毒软件一切正常。我会尝试在_exit{puts caller.inspect}
也许它有帮助不,它不起作用,我仍然只会在术语上显示一个“Killed”字符串,这就是你是否使用了sigterm或sigkill(9)?使用了htop和sigkill选项。但如果可能的话,我希望它能够与Windows兼容(不知道它使用什么),也就是说linux。只有具有进程或根用户的真实或有效用户ID的用户才能向进程发送信号。因此,您的防病毒软件一切正常。这正是我要建议的:)这是Ruby的方式。不适用于sigkill:/(尝试在信号捕获后运行循环,并使用htop发送sigkill信号)这正是我要建议的:)这是Ruby的方法。不适用于sigkill:/(尝试在信号捕获后运行循环,并使用htop发送sigkill信号)为linux说话。只有具有进程或根用户的真实或有效用户ID的用户才能向进程发送信号。所以对于你的杀毒软件来说,一切都很好。只有具有进程或根用户的真实或有效用户ID的用户才能向进程发送信号。所以你的防病毒软件一切正常。
# inside ~/.gdbinit
define redirect_stdout
call rb_eval_string("$_old_stdout, $stdout = $stdout,
File.open('/tmp/ruby-debug.' + Process.pid.to_s, 'a'); $stdout.sync = true")
end
define ruby_eval
call(rb_p(rb_eval_string_protect($arg0,(int*)0)))
end