如何在ruby Kernel.exec之后运行代码

我有以下rubyshell

#!/usr/bin/env ruby $stdin.each_line do |line| pid = fork{ exec line puts "after exec -> #{Process.pid}" } Process.wait pid end 

exec之后的puts方法从不执行。 基于ri Kernel.exec ,似乎exec运行给定的外部replace当前进程。 所以,它应该用外部进程replace新的分叉进程。 在exec命令之后,我该如何运行任何东西?

你不能。

根据coreel#exec的文档,“通过运行给定的外部命令来替换当前进程”。 这意味着你不再运行你的代码,而是通过命令指定的代码。

如果你想“包装”一个系统调用,那么你应该使用coreel#system (或者反引号操作符 )在子shell中执行这个命令。