Timeout-lib, which interrupts everything, also systemcalls. It uses libc-alarm.
Go to file
Denis Knauf f963e41c52 „README.md“ ändern 2022-03-24 12:45:07 +01:00
lib small minor warnings fixed (unused vars, ...). comments. 2021-12-12 18:18:33 +01:00
test reimplement tests and minor fixes. 2021-12-12 18:19:34 +01:00
.gitignore .document removed and ignored 2021-12-12 18:14:31 +01:00
Gemfile dependencies: need should, test-unit for testing. but no rspec. 2021-12-12 18:16:14 +01:00
LICENSE.txt Version bump to 0.1.1 2013-03-06 15:09:39 +01:00
README.md „README.md“ ändern 2022-03-24 12:45:07 +01:00
Rakefile reimplement tests and minor fixes. 2021-12-12 18:19:34 +01:00
VERSION Version bump to 0.3.0 2013-03-14 16:26:28 +01:00
timeout-interrupt.gemspec dependencies: need should, test-unit for testing. but no rspec. 2021-12-12 18:16:14 +01:00



Works like ruby's timeout, but interrupts every call, also syscalls, which blocks the hole ruby-process.

It uses POSIX's alarm and traps ALRM-signals.

Known limitations bacause of alarm and ALRM are, that you can not use alarm or trap ALRM in the same time.


If you need scopes with inner and outer time outs, you should know:

The first timed out Timeout will be raised:

include TimeoutInterrupt
timeout(1) { # Will be raised
	timeout(10) { sleep 2 } # Will not be raised

If you want to know, which was raised, you need custom exceptions:

class CustomErrorWillBeRaised <Exception
class CustomErrorNotRaised <Exception
include TimeoutInterrupt
timeout( 1, CustomErrorWillBeRaised) { # Will be raised again
	timeout( 10, CustomErrorNotRaised) { sleep 2 } # Will not be raised


Memory-Leaks and missing clean up

Syscalls can allocate memory. If you interrupt a syscall, which then cannot free his allocations, it will result in a memory leak. If it opens a file, while it reads, a time out occurs, the file will not automatically be closed.

So, you should only use it, if your process will die after interrupt or if you are sure, that your call never allocate memory or opens a file. You could also publish informations about opened files, that it could be cleaned up later.

Every time, a process dies, all his memory will be freed and every file will be closed, so let your process die and you should be safe.


Timeouts can break your exception-handling! You should not handling exception while you wait for a timeout:

include TimeoutInterrupt
timeout(1) {

Same happens, if clean_up will raise an exception, so handle it in the same way.

And same problem you have with ruby's Timeout.timeout.


Copyright (c) 2021 Denis Knauf. See LICENSE.txt for further details.