在ruby中杀死进程

在ruby中杀死进程,ruby,shell,Ruby,Shell,我使用以下代码使用PID文件终止进程: Process.kill 15, File.read('/tmp/pidfile').to_i 但当我尝试时,以下两个例子根本不起作用: system "kill `cat /tmp/file.pid`" 或 输出为: sh: 1: kill: Usage: kill [-s sigspec | -signum | -sigspec] [pid | job]... or kill -l [exitstatus] 背杆有问题吗?因为在bash中,这非常

我使用以下代码使用PID文件终止进程:

Process.kill 15, File.read('/tmp/pidfile').to_i
但当我尝试时,以下两个例子根本不起作用:

system "kill `cat /tmp/file.pid`"

输出为:

sh: 1: kill: Usage: kill [-s sigspec | -signum | -sigspec] [pid | job]... or
kill -l [exitstatus]
背杆有问题吗?因为在bash中,这非常有效:

kill `cat /tmp/file.pid`

未对字符串进行插值。这不会运行
cat
命令:

system "kill `cat /tmp/file.pid`"
相反,您可以这样写:

system "kill #{`cat /tmp/file.pid`}"

但是,我不清楚为什么您会选择使用原始(工作)方法进行此操作。

如果您的第一个示例已经开始工作,为什么您要使用基于
系统的方法?只是为了了解和理解正在发生的事情。哪一个是正确的路径
/tmp/pidfile
/tmp/file.pid
?我猜是第一个,因为原则上,您尝试使用
系统时语法没有问题。我正在学习ruby,我喜欢尝试新事物(pid、trhead、使用文件…)上面的命令product
sh:1:kill:No-the-process
当然该进程以前启动过。@flowdaguerre这是因为您确实没有运行这样的进程“上面的命令product-sh:1:kill:No-the-process”-大概这是因为没有使用此ID运行的进程!这不是ruby代码中的bug;这一定是其他问题,例如文件未使用当前ID更新。是否可能是当您的某个命令成功时,该进程不再处于活动状态,因此kill会引发该错误?换句话说,您是否在每次运行测试之前启动新流程?此外,尽管这可能与本文无关,但您可能希望查看
Shellwords.shellescape
,了解这类内容(请参阅)。显然,为了方便起见,字符串中添加了一个
shellescape
实例方法。
system "kill #{`cat /tmp/file.pid`}"