Strange consumption CPU for a quite small program

Hello,

Below my little program for Linux (because I use ps command)

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
require 'socket'

Thread.abort_on_exception=true

pid=Process.fork do
  ##Processus 1
  thread=Thread.new do
    tcp_server = TCPServer.new('0.0.0.0',10000)
    socket = tcp_server.accept
  end
  thread.join
end

#Porcessus 2
while true
  output=''
  IO.popen("ps -p #{pid} -o pcpu,size") do |pipe|
    output=pipe.read
  end
  puts output
  sleep(1)
end
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

When I execute this program (with ruby 1.8.7 or 1.9.2) and after 10
steps, I can see process 1 consumes CPU, why ?

Best regards

···

--
Posted via http://www.ruby-forum.com/.

I see

15:08:16 Temp$ ruby19 so.rb
so.rb:8: [BUG] native_mutex_unlock return non-zero: 1
ruby 1.9.1p429 (2010-07-02 revision 28523) [i386-cygwin]

-- control frame ----------
c:0005 p:---- s:0015 b:0015 l:000014 d:000014 CFUNC :initialize
c:0004 p:---- s:0013 b:0013 l:000012 d:000012 CFUNC :new
c:0003 p:0019 s:0008 b:0008 l:000764 d:000007 BLOCK so.rb:8
c:0002 p:---- s:0004 b:0004 l:000003 d:000003 FINISH
c:0001 p:---- s:0002 b:0002 l:000001 d:000001 TOP

···

On Fri, Oct 22, 2010 at 2:58 PM, Guillaume Ebuprofen <guillaume.dorchies@gmail.com> wrote:

Hello,

Below my little program for Linux (because I use ps command)

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
require 'socket'

Thread.abort_on_exception=true

pid=Process.fork do
##Processus 1
thread=Thread.new do
tcp_server = TCPServer.new('0.0.0.0',10000)
socket = tcp_server.accept
end
thread.join
end

#Porcessus 2
while true
output=''
IO.popen("ps -p #{pid} -o pcpu,size") do |pipe|
output=pipe.read
end
puts output
sleep(1)
end
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

When I execute this program (with ruby 1.8.7 or 1.9.2) and after 10
steps, I can see process 1 consumes CPU, why ?

---------------------------
-- Ruby level backtrace information-----------------------------------------
so.rb:8:in `initialize'
so.rb:8:in `new'
so.rb:8:in `block (2 levels) in <main>'

[NOTE]
You may encounter a bug of Ruby interpreter. Bug reports are welcome.
For details: http://www.ruby-lang.org/bugreport.html

Btw, why don't you just do

require 'socket'

Thread.abort_on_exception=true

pid=fork do
tcp_server = TCPServer.new('0.0.0.0',10000)
socket = tcp_server.accept
end

#Porcessus 2
loop do
system "ps", "-p", pid.to_s, "-o", "pcpu,size"
sleep(1)
end

Kind regards

robert

--
remember.guy do |as, often| as.you_can - without end
http://blog.rubybestpractices.com/