gpt4 book ai didi

ruby - 打开 3 并停止进程

转载 作者:数据小太阳 更新时间:2023-10-29 08:46:00 25 4
gpt4 key购买 nike

检查使用 Open3::popen3 打开的进程是否已停止的正确方法是什么?我正在将一个有错误的大文件传输到进程,需要尽快停止,最好是每次循环迭代消耗的资源最少。这些程序基本上是这样的

# launcher.rb
require 'open3'

Open3.popen3('ruby', 'consumer.rb') do |i, o, e, w|
5.times do |n|
i.puts(n)
puts "line #{n}"
end
puts "Errors: #{e.read}"
end

# consumer.rb
i = 0
ARGF.each_line do |line|
if i == 2
$stderr.write('error')
exit(1)
end
i+=1
end

最佳答案

popen3 返回一个数组,其中第四个元素是线程对象:

prc = Open3.popen3('sleep 10')
=> [#<IO:fd 10>, #<IO:fd 12>, #<IO:fd 14>, #<Thread:0x007f84b49c8480 sleep>]

如您所见,线程本身会显示状态,10 秒后它将是:

=> [#<IO:fd 16>, #<IO:fd 18>, #<IO:fd 20>, #<Thread:0x007f84b437d120 dead>]

所以要查看进程状态,需要查看thread.status,如果进程正在运行,则为runsleep,和 falsenil 如果进程完成 (false) 或死亡 (nil):

prc = Open3.popen3('sleep 10')
=> [#<IO:fd 10>, #<IO:fd 12>, #<IO:fd 14>, #<Thread:0x007f84b49c8480 sleep>]
prc[3].status
=> "sleep"

几秒钟后:

prc[3].status
=> false

关于ruby - 打开 3 并停止进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28324375/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com