Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby在终止时显示回溯_Ruby_Kill - Fatal编程技术网

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