Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

SGE template: Signal SIGINT by default to allow R to catch it gracefully

Open
#104 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
50/100
Issue type
Feature
Clarity
Mostly clear
Activity status
Quiet
Tech stack
bash, r

Research direction

Start with the default SGE template and trace how rscript_call, uri, and batchtools::doJobCollection launch the job. Review the proposed Bash SIGUSR2 trap and process-wait flow, then verify that an approaching time limit reaches R as SIGINT and permits graceful cleanup before termination.

Written by the indexing model from the issue text.

Description

feature/resources scheduler/sge

When a job is approaching it's maximum run-time limit, and --notify has been specified, SGE sends a SIGUSR2 60 seconds before sending a SIGKILL (abrupt; not capturable).

R code cannot handle SIGUSR2 signals, only SIGINT. If SGE would signal SIGINT instead, we could capture it internally as an interrupt condition, and using tryCatch(..., interrupt = ...), on.exit(), and likes to gracefully exit, e.g. close connections, checkpoint intermediate results, etc.

Idea

Update the default SGE template to signal SIGINT. Unlike Slurm, there is no user-facing option to change the type of signal in SGE. But we could use Bash traps to capture the SIGUSR2 and re-signal it as SIGINT. Something like:

#! /bin/bash
...
## Request SGE to send warning signals (SIGUSR2) before run-time limit termination
#$ -notify
...

# Function to catch SGE run-time signals and re-signal as SIGINT
forward_sigint() {
  echo "Caught SGE run-time signal. Re-signal as SIGINT to R..."
  kill -2 "${R_PID}" 2>/dev/null || true
  wait "${R_PID}"
  res=$?
  echo " - exit code (from signal handler): ${res}"
  exit "${res}"
}

# Trap SGE run-time limit signals
trap forward_sigint SIGUSR2

<%= rscript_call %> -e 'batchtools::doJobCollection("<%= uri %>")' &
R_PID=$!
wait "${R_PID}"
res=$?

# Clear the trap on normal exit
trap - SIGUSR2
Dominant language
R
Stars
87
Forks
10
PR merge metrics
No merged PRs in 30d

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from futureverse/future.batchtools

All issues in futureverse/future.batchtools

Similar issues

More R issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.