【问题标题】:How to pass shell script variable to erlang:exit()?如何将shell脚本变量传递给erlang:exit()?
【发布时间】:2021-05-21 16:30:07
【问题描述】:

我正在尝试使用命令 rabbitmqctl eval 'erlang:exit(c:pid("'$pid'"),kill).' 删除 RMQ 中的卡住进程,但出现以下错误。

Error:
{:undef, [{:c, :pid, ['0,159,0'], []}, {:erl_eval, :do_apply, 6, [file: 'erl_eval.erl', line: 680]}, {:erl_eval, :expr_list, 6, [file: 'erl_eval.erl', line: 888]}, {:erl_eval, :expr, 5, [file: 'erl_eval.erl', line: 411]}, {:erl_eval, :exprs, 2, []}]}

有解决此错误的方法吗?我在这里做错了什么?

【问题讨论】:

  • "'$pid'"的类型和值是什么。查看错误消息,它看起来像一个字符串,在这种情况下 erlang:exit(c:pid(list_to_pid("'$pid'")),kill) 应该可以工作

标签: rabbitmq erlang


【解决方案1】:

c:pid/3 需要 3 个整数,不是字符串,如果要使用字符串,请使用 list_to_pid/1

这里的问题是您正在尝试调用

c:pid("0,159,0"),

应该是

c:pid(0,159,0)

list_to_pid("<0.159.0>")

【讨论】:

  • 我想到了 c:pid("0,159,0"),并怀疑 tat 可能是原因。但我仍然有一个问题,我如何传递 Pid 以便它可以是 c:pid(0,159,0)list_to_pid("&lt;0.159.0&gt;") .. 我正在尝试这种方式 rabbitmqctl eval 'erlang:exit(list_to_pid("'$pid'"),kill).'。但还是不行。
  • @dharpatel 如果您的 $pid 变量是 0.159.0(注意点)并且您使用 list_to_pid,那么您缺少封闭的 &lt;&gt;$ erl -eval 'exit(list_to_pid("&lt;'$PROCESS_ID'&gt;"),kill).'
  • @dharpatel 如果你使用逗号 (0,159,0),你可以使用 c:pid: erl -eval 'exit(c:pid('$PROCESS_ID'),kill).'
  • 谢谢何塞。问题已通过 erlang:exit(c:pid('$pid'),kill) 解决。但是您建议的备用命令也可以使用。感谢您的帮助。
【解决方案2】:
erlang:exit(c:pid("'$pid'"),kill)

exit/2 接受两个参数:pid 和任何 erlang 术语(例如原子 kill)。 pid 不是字符串也不是整数,而是它自己的类型,由某些函数返回,例如 self/0。 erlang 像这样向 shell 输出一个 pid:

<0.64.0>

shell的所有输出都是一个字符串,但这并不意味着pid在内部是一个字符串,所以你不能通过写"&lt;0.64.0&gt;"来创建pid,就像你不能通过写@987654329来创建整数一样@。

如果你已经有一个 pid,比如$pid,你不需要将它转换为另一种类型,因为exit/2 的第一个参数被定义为一个 pid 类型,所以你可以调用 exit() 之类的这个:

erlang:exit('$pid',kill)

【讨论】:

  • rabbitmqctl eval 'erlang:exit('$pid',kill).'。也不工作。它给了我一个错误。 Error: {:undef, [{:erlang, :exit, [0, 159, 0, :kill], []}, {:erl_eval, :do_apply, 6, [file: 'erl_eval.erl', line: 680]}, {:erl_eval, :exprs, 2, []}]}
  • 我得到了解决方案。基本上erlang:exit('$pid',kill) 给出了undef 错误。所以我需要通过erlang:exit(c:pid('$pid'),kill). 定义乐趣,它可以解决问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-24
  • 2013-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-03
相关资源
最近更新 更多