Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.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无法识别一个子进程(使用popen打开)已终止?_Ruby_Process - Fatal编程技术网

为什么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脚本复制它并将其添加到你的问题中吗?不幸的是,还没有。如我在问题中所述,它似乎与此特定子进程(脚本)相关,如果我对脚本进行清理以供公众查看,则不会显示出来-(