为什么ruby无法识别一个子进程(使用popen打开)已终止?
子进程使用以下代码启动:为什么ruby无法识别一个子进程(使用popen打开)已终止?,ruby,process,Ruby,Process,子进程使用以下代码启动: IO.popen("/path/to/process/in/question") do |command| command.each do |line| puts line end end puts "Child Process Complete" 子进程输出的各行在进程退出之前正确显示在控制台上,包括一行。但是,直到我按下ctrl-c键,才会显示消息“子进程完成” 使用相同机制触发的类似进程被正确识别为已终止,因此问题可能是子进程正在
IO.popen("/path/to/process/in/question") do |command|
command.each do |line|
puts line
end
end
puts "Child Process Complete"
子进程输出的各行在进程退出之前正确显示在控制台上,包括一行。但是,直到我按下ctrl-c键,才会显示消息“子进程完成”
使用相同机制触发的类似进程被正确识别为已终止,因此问题可能是子进程正在执行的操作的结果。不幸的是,我不知道那可能是什么
[编辑]我可能还应该提到,子进程也可以直接从命令提示符触发,并且这样做时没有发现任何问题。当他建议有什么东西正在等待用户输入时,请告诉我正确的方向。在尝试清理子进程脚本(以及它依次调用的东西)时,我无意中发现下面的脚本中出现了一个错误(它已经在那里好几年没有被注意到)
上面发布的Ruby代码调用了一个初始shell脚本。这又调用了第二个shell脚本,其中包含以下令人憎恶的内容:
(some_application) &
>/dev/null 2>&1
我不确定这是不是真的发生了,但我读到这篇文章的方式是某个应用程序启动并作为后台进程运行。标准输出被重定向到/dev/null,标准错误被重定向到标准输出。。。但这种重定向与哪个过程有关
将呼叫更改为
some_application >/dev/null 2>&1 &
(即运行某个应用程序,扔掉标准并将标准错误捕获到控制台)使我的所有问题消失。您确定子进程已终止且未等待用户输入吗?非常确定。这是一个shell脚本,脚本中应该终止的最后一行是“Complete”。我看到了预期的“完整”消息。你能用最少的shell脚本复制它并将其添加到你的问题中吗?不幸的是,还没有。如我在问题中所述,它似乎与此特定子进程(脚本)相关,如果我对脚本进行清理以供公众查看,则不会显示出来-(