I am trying to get the SIGSTOP CTRL+Z signal in my script's trap
.
When my script is executing, if I temporarily suspend from execution, send a SIGSTOP signalCTRL+Z, it needs to remove the files I create in it and to kill the execution.
I don't understand why the following script doesn't work. But, more important, what is the correct way to do it?
#!/bin/bash
DIR="temp_folder"
trap "rm -r $DIR; kill -SIGINT $$" SIGSTP
if [ -d $DIR ]
then
rm -r $DIR
else
mkdir $DIR
fi
sleep 5
EDIT:
SIGSTOP
cannot be trapped, however SIGTSTP
can be trapped, and from what I understood after searching on the internet and the answer below it's the correct to trap when sending signal with CTRL+Z. However, when I press CTRL+Z while running the script it will get stuck, meaning that the script will be endlessly execute no matter what signals I send afterwards.
The problem here is you are trying to suspend a process that is already sleeping.
It is also good practice to use
DIR=$(mktemp -d)
in shell scripts to create temp directories.CTRL-C is signal (
2
) / CTRL-Z (20
):if you send a function to the background (such as for a cursor spinner) - then you need to disable CTRL-Z while the long process is running with:
There are two signals you can't
trap
*,SIGKILL
andSIGSTOP
. Use another signal.*: without modifying the kernel
IEEE standard: