Skip to content

Instantly share code, notes, and snippets.

@tlewin
Last active June 26, 2017 10:31
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save tlewin/5432026 to your computer and use it in GitHub Desktop.
Save tlewin/5432026 to your computer and use it in GitHub Desktop.
Force ruby extension process signals like Ctrl + C
#include <stdio.h>
#include <unistd.h>
#include <ruby.h>
/* Force ruby extension process signals like Ctrl + C */
void process_signal(int signal) {
VALUE pid;
/* force call any block on trap function */
pid = rb_funcall(rb_mProcess, rb_intern("pid"), 0);
rb_funcall(rb_mProcess, rb_intern("kill"), 2, INT2FIX(signal), INT2FIX(pid));
}
void register_signals() {
int i;
for(i = 0; i < 33; i++) {
(void) signal(i, process_signal);
}
}
static VALUE start_main_loop(VALUE self) {
register_signals();
while(1) {
usleep(100);
}
return Qnil;
}
void Init_mysignal() {
VALUE klass_mysignal = rb_define_class("MySignal", rb_cObject);
rb_define_singleton_method(klass_mysignal, "start!", start_main_loop, 0);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment