После каждого задания задаётся вопрос: продолжать или снять выполнение задания:
Листинг задачи ask.sh (задаётся вопрос):
#!/bin/bash
zenity --question --timeout=5 --title="Confirm" --text="Отменить задачу?"
answer=$?
if [ "$answer" -eq 0 ]; then
echo '1' > /home/minter/Tools/result.txt
elif [ "$answer" -eq 1 ]; then
echo '0' > /home/minter/Tools/result.txt
elif [ "$answer" -eq 5 ]; then
echo '0' > /home/minter/Tools/result.txt
fi
exit 0
zenity --question --timeout=5 --title="Confirm" --text="Отменить задачу?"
answer=$?
if [ "$answer" -eq 0 ]; then
echo '1' > /home/minter/Tools/result.txt
elif [ "$answer" -eq 1 ]; then
echo '0' > /home/minter/Tools/result.txt
elif [ "$answer" -eq 5 ]; then
echo '0' > /home/minter/Tools/result.txt
fi
exit 0
Если введено No, то записывается 0, если Yes - 1. По умолчанию после 5 секундного ожидания записывается значение 0.
В задании test.sh имеется инструкция "если, то". Считывается значение выбора пользователя. Если оно равно 0, то ничего не делается (задание test.sh продолжается далее). Если считанное значение выбора пользователя 1, то должна выдаваться команда на прекращение процесса test.sh по его pid
Листинг:
#!/bin/bash
/home/minter/Tools/task1.sh
sleep 5
/home/minter/Tools/ask.sh
var=`cat /home/minter/Tools/result.txt`
if [ $var -eq 0 ];
then
:
else
kill -TERM pid_test.sh
fi
/home/minter/Tools/task2.sh
...
/home/minter/Tools/task1.sh
sleep 5
/home/minter/Tools/ask.sh
var=`cat /home/minter/Tools/result.txt`
if [ $var -eq 0 ];
then
:
else
kill -TERM pid_test.sh
fi
/home/minter/Tools/task2.sh
...
По запросу находятся 2 pid процесса test.sh
ps ax | grep -v grep | grep test.sh > /home/minter/Tools/test1.txt
Чтобы отменить оба процесса достаточно завершить процесс test.sh с бОльшим значение pid
15166 ? S 0:00 /bin/sh -c sh '/home/minter/Tools/test.sh'
15167 ? S 0:00 sh /home/minter/Tools/test.sh
А бывает, что pid имеет значение до 10000
2164 ? S 0:00 /bin/sh -c sh '/home/minter/Tools/test.sh'
2165 ? S 0:00 sh /home/minter/Tools/test.sh
15167 ? S 0:00 sh /home/minter/Tools/test.sh
А бывает, что pid имеет значение до 10000
2164 ? S 0:00 /bin/sh -c sh '/home/minter/Tools/test.sh'
2165 ? S 0:00 sh /home/minter/Tools/test.sh
Поэтому из результата беру вторую строку и записываю в новый файл:
sed -n -e 2p /home/minter/Tools/test1.txt > /home/minter/Tools/test2.txt
И здесь затык. Необходимо выбрать из строки только цифры, которые и будут являться необходимым номером pid, чтобы записать их в переменную $varpid и дать команду kill -TERM $varpid Может быть кто подскажет решение, если это значение может быть и 5-значным, и 4-значным, например:
15167 ? S 0:00 sh /home/minter/Tools/test.sh
или
2165 ? S 0:00 sh /home/minter/Tools/test.sh
или
2165 ? S 0:00 sh /home/minter/Tools/test.sh