exception for program running on ruby code

A

Ahmad Azizan

Hello,

I'm trying to get an output from /var/log/syslog for certain amount of
time by executing %x[sudo tail -f /var/log/syslog]

Is it possible to set a timer for the execution, and if the time end,
the execution will end (like we do Ctrl+C) ?

Thank you
 
A

Ahmad Azizan

Ahmad said:
Hello,

I'm trying to get an output from /var/log/syslog for certain amount of
time by executing %x[sudo tail -f /var/log/syslog]

Is it possible to set a timer for the execution, and if the time end,
the execution will end (like we do Ctrl+C) ?

Thank you

I think I've got the solution,

#!/usr/bin/ruby

require 'timeout'
begin
status = Timeout::timeout(10) do
%x[sudo tail -f /var/log/messages]
end
rescue Timeout::Error
puts 'execution expired'
end

This might do the job
 
J

Joel VanderWerf

Ahmad said:
Ahmad said:
Hello,

I'm trying to get an output from /var/log/syslog for certain amount of
time by executing %x[sudo tail -f /var/log/syslog]

Is it possible to set a timer for the execution, and if the time end,
the execution will end (like we do Ctrl+C) ?

Thank you

I think I've got the solution,

#!/usr/bin/ruby

require 'timeout'
begin
status = Timeout::timeout(10) do
%x[sudo tail -f /var/log/messages]
end
rescue Timeout::Error
puts 'execution expired'
end

This might do the job

I don't think you will get a value in status that way. Try this:

require 'timeout'

output = []
begin
Timeout.timeout 5 do
IO.popen("ping 192.168.1.1") do |pipe|
while line = pipe.gets
output << line
end
end
end
rescue TimeoutError
end

puts output
 
J

Joel VanderWerf

Ahmad said:
Ahmad said:
Hello,

I'm trying to get an output from /var/log/syslog for certain amount of
time by executing %x[sudo tail -f /var/log/syslog]

Is it possible to set a timer for the execution, and if the time end,
the execution will end (like we do Ctrl+C) ?

Thank you

I think I've got the solution,

#!/usr/bin/ruby

require 'timeout'
begin
status = Timeout::timeout(10) do
%x[sudo tail -f /var/log/messages]
end
rescue Timeout::Error
puts 'execution expired'
end

This might do the job

I don't think you will get a value in status that way. Try this:

require 'timeout'

output = []
begin
Timeout.timeout 5 do
IO.popen("ping 192.168.1.1") do |pipe|
while line = pipe.gets
output << line
end
end
end
rescue TimeoutError
end

puts output
 
A

Ahmad Azizan

Joel said:
I don't think you will get a value in status that way. Try this:

require 'timeout'

output = []
begin
Timeout.timeout 5 do
IO.popen("ping 192.168.1.1") do |pipe|
while line = pipe.gets
output << line
end
end
end
rescue TimeoutError
end

puts output

Thanks for the correction. Actually I'm running javascript interpreter
program called spidermonkey and it does not require storing values.
After finished it will generate a file. However sometimes if the
javascript code is not properly coded, or with infinite loops, the
javascript interpreter will just hang in there waiting. So I dont want
that to happen. Need to get it stop if it tooks more than 10 seconds.

I've tried using the timeout, and it worked. However, I've found out
that the program's process still running in background, which in this
case it did not terminate after the timeout. How can I stop the process
after reaching the timeout?
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,768
Messages
2,569,574
Members
45,048
Latest member
verona

Latest Threads

Top