Hello, 

I'm using slurm version 19.05.2 on debian 10. 

I'm try to hand a SIGINT signal by a child process of a batch. 
The signal is automatically send 30 s before the end of time. 
You can see this mechanism in this minimal example: 

--------------------------------------- 
test.slurm: 

#!/bin/bash 
#SBATCH --job-name=test 
#SBATCH --ntasks-per-node=1 
#SBATCH --nodes=1 
#SBATCH --time=00:03:00 
#SBATCH --signal=B:SIGINT@30 

# This example works, but I need it to work without "B:" in --signal options, 
so I want test.sh receives the SIGINT signal and not test.slurm 

sig_handler() 
{ 
echo "BATCH interrupted" 
exit 2 
} 

trap 'sig_handler' SIGINT 

/home/user/test.sh & 

wait 
--------------------------------------- 
test.sh: 

#!/bin/bash 

function sig_handler() 
{ 
echo "Executable interrupted" 
exit 2 
} 

trap 'sig_handler' SIGINT 

echo "BEGIN" 
sleep 200 
echo "END" 
--------------------------------------- 

Unfortunately, when I use in test.slurm: 

#SBATCH --signal=SIGINT@30 

It seems that the signal SIGINT is not received. 

I was try to debug with the use of scancel like this: 

scancel --signal=SIGINT IDJOB 

without success. In this way, only SIGKILL signals are received but a SIGKILL 
signal can't be trap. 

In [ https://slurm.schedmd.com/scancel.html, | 
https://slurm.schedmd.com/scancel.html, ] we can see in -b option, but seems to 
be the case even without -b option: 
By default, signals other than SIGKILL are not sent to the batch step 

How to change this default behavior? 

Do you have the same behavior on your systems? 

How would you get a SIGINT signal trapped in test.sh? 

Best regards, 

Jean-Mathieu 


Reply via email to