Skip to content

Instantly share code, notes, and snippets.

@sargun
Created April 2, 2018 15:50
Show Gist options
  • Save sargun/fe6d5ace5732288f6c891e55a97e3946 to your computer and use it in GitHub Desktop.
Save sargun/fe6d5ace5732288f6c891e55a97e3946 to your computer and use it in GitHub Desktop.
type signal_msg = {
sig_val : int
};
let rec signal_listener_thread = (signal_events : Event.channel(signal_msg)) => {
Log.info("Waiting for signal");
let msg = Event.sync(Event.receive(signal_events));
Log.info("Received signal: %d", msg.sig_val);
signal_listener_thread(signal_events);
};
let parent(pid : int) = {
let chan = Event.new_channel();
let _ = Thread.create(signal_listener_thread, chan);
/* Setup the signal listener here */
let handler = Signal_handle((my_sig) => {
Log.info("Signal sent: %d", my_sig);
let _ = Event.send(chan, {sig_val: my_sig});
Log.info("Signal completed sending: %d", my_sig);
});
Sys.set_signal(Sys.sigint, handler);
Sys.set_signal(Sys.sigterm, handler);
let _ = Unix.sigprocmask(SIG_UNBLOCK, [Sys.sigint, Sys.sigterm]);
waitpid_loop(pid);
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment