Project

subexec

0.17
Repository is archived
No commit activity in last 3 years
No release in over 3 years
There's a lot of open issues
Subexec spawns a subprocess with an optional timeout
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

>= 0
~> 2.7.0
 Project Readme

**This library is deprecated, please see Open3 or https://github.com/rtomayko/posix-spawn **

Subexec

by Peter Kieltyka http://github/nulayer/subexec

Description

Subexec is a simple library that spawns an external command with an optional timeout parameter. It relies on Ruby 1.9's Process.spawn method. Also, it works with synchronous and asynchronous code.

Useful for libraries that are Ruby wrappers for CLI's. For example, resizing images with ImageMagick's mogrify command sometimes stalls and never returns control back to the original process. Enter Subexec.

Tested with MRI 1.9.3, 1.9.2, 1.8.7

Note: Process.spawn seems to be broken with JRuby 1.7.0.dev (as of April 20th, 2012), and so it uses Process.exec instead.

Usage

sub = Subexec.run "echo 'hello' && sleep 3", :timeout => 5
puts sub.output     # returns: hello
puts sub.exitstatus # returns: 0

sub = Subexec.run "echo 'hello' && sleep 3", :timeout => 1
puts sub.output     # returns: 
puts sub.exitstatus # returns:`

Limitations

Only Ruby 1.9 can spawn non-blocking subprocesses, via Process.spawn. So Ruby 1.8 support is sheerly for backwards compatibility.

Windows Support

Limited Windows support is available. We are more than happy to accept patches. However, our tests are run on Unix-like operating systems. Primarily, the intended effect should be that Subexec works on Windows, though it may not give many advantages.