У меня есть следующий скрипт bash.
#!/bin/bash
stop_service {
$(service $1 stop)
}
servicename=$(inictl list | grep $1 | cut -d ' ' -f1)
servicestate=$(initctl list | grep "$1" | cut -d ' ' -f2)
servicepid=$(initctl list | grep "$1" | cut -d "," -f2 | cut -d " " -f3)
stop_service $servicename &
if [ \( $servicestate = "stop/killed," \) -o \( $servicestate = "start/killed," \) ] ;then
/upstartCleaner/upstartCleaner $servicepid
echo "Command executed"
else
echo "The service didnt crash"
fi
Что я хочу сделать, так это запустить stop_service как дочерний процесс, а затем в родительском процессе иметь возможность определить, завис ли дочерний процесс и убить его, или иметь возможность отсоединить его выполнение от родительского процесса, чтобы он не зависал, когда он останавливается.
Каждый раз, когда я запускаю этот скрипт, а дочерний процесс перестает отвечать или зависает, это, в свою очередь, останавливает выполнение каждой строки родительского процесса после строки stop_service $servicename &.
kill -s SIGCHLD <ppid>
скажет родителю убить его дочерний процесс, и через него родитель не выйдет из строя, потому что он выполняет это юридическое действие. ознакомьтесь с этой ссылкой, stackoverflow.com/edit-tag-wiki/17776 26.04.2016