Вот макет моей рабочей пуленепробиваемой версии. Это сделано для того, чтобы показать логику. Он работает на моем маршрутизаторе нормально.
#!/bin/sh
age_max_sec=50
LOCKFILE=lock.txt
if [ -e ${LOCKFILE} ]; then
echo "lockfile exists"
if kill -0 `cat ${LOCKFILE}`; then
echo "script runs in mem"
lock_date=`date -r ${LOCKFILE} +%s`
now=`date +%s`
lock_age=$(($now-$lock_date))
if [ $lock_ag e -gt $age_max_sec ]; then
echo "DoubleDDNS (no2runKILL)"
kill `cat ${LOCKFILE}`
else
echo "DoubleDDNS (no2runOK), age $lock_age seconds, quit this run"
exit 1
fi
else
echo "not allready running, go ahead"
fi
fi
echo "working on"
# overkill???? just in case, scorched earth check.
filename=${0##*/}
for pid in $(pidof $filename); do
if [ $pid != $$ ]; then
echo "DoubleDDNS (no3runKILL)"
kill -9 $pid
fi
done
# make sure the lockfile is removed when we exit and then claim it
trap "rm -f ${LOCKFILE}; exit" INT TERM EXIT
echo $$ > ${LOCKFILE}
# main program here
rm -f ${LOCKFILE}
echo "done"
Думаю, мне нужно использовать файл блокировки, если я хочу проверить возраст предыдущего запуска. Итак, создайте файл блокировки с помощью pid. Если файл блокировки не старше установленного лимита секунд, выйдите. Если он старше, убейте предыдущий экземпляр. На моем маршрутизаторе у меня нет лучших способов для проверок, которые я сделал.
Нужна ли мне проверка выжженной земли или это лишнее? После того, как законные проверки файлов блокировки выполнены, я перепроверяю, есть ли в памяти незавершенный, но сломанный процесс, и убиваю его, если он обнаружен. Проблема в том, что у меня нет способа протестировать его, пока в конце концов не произойдет реальная катастрофа, и регулярная очистка не поможет очистить его. Если не излишество ...
Следует отметить, что доступность службы NTP может повлиять на синхронизированные блокировки и таблетку для самоубийства. Например. мой первый запуск вышеупомянутого сценария произойдет примерно за 4 секунды до того, как NTP установит время. Итак, мы должны принять это во внимание.
Таблетка для самоубийства, предоставленная выше DopeGhoti, работает отлично. Итак, теперь остается только решить, какую комбинацию использовать. Или все они? Lockfile, релиз по времени, выжженная земля и самоубийство. Хм, звучит как излишество, но я не вижу, чтобы кто-то из них работал против других, но в идеальной (параноидальной) гармонии. Комментарии приветствуются.
Коротко: наверное, нет. Приложения на рабочем столе X Window читают символы клавиш и интерпретируют их в зависимости от приложения. Есть соглашения для символов клавиш (которым может следовать конкретный набор программ), но ничего, что навязывает их глобально.