You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

72 lines
1.7 KiB
Bash

# linux script framework progress about functions encapsulation
# Longwei Lai
###################################################################
source "${____FWK_SCRIPT_PATH}/lnx_fwk_log.sh"
# check specific progress is running or not
function is_progress_running()
{
local pid="$1"
local pids="`top -b -n1 | sed -e 's/\s*\(.*\)/\1/; s/\([0-9]*\).*/\1/; /^$/d' | tr -s '\n' " "`"
for now_pid in $pids; do
if [ "$now_pid" -eq "${pid}" ]; then
echo -n "TRUE"
return
fi
done
echo -n "FALSE"
}
# kill specific progress(included child progresses)
function kill_progress()
{
# kill child processes
local will_kill_pid="$1"
for child in $(ps -o pid --no-headers --ppid ${will_kill_pid}); do
kill -9 "${child}" 1>/dev/null 2>&1
done
# kill self
kill -9 "${will_kill_pid}" 1>/dev/null 2>&1
}
# check specific pidfile's progress is running or not
function is_pidfile_running()
{
local pid_file="$1"
if [ ! -e "${pid_file}" ]; then
echo -n "FALSE"
return
fi
local pid="`cat "${pid_file}"`"
if [ $(is_progress_running "${pid}") = "FALSE" ]; then
rm -rf "${pid_file}" 1>/dev/null 2>&1
echo -n "FALSE"
return
fi
echo -n "TRUE"
}
# kill specific pidfile's progress(included child progresses)
function stop_pidfile()
{
local pid_file="$1"
if [ "$(is_pidfile_running "${pid_file}")" = "TRUE" ]; then
pid="`cat "${pid_file}"`"
kill_progress "$pid"
sleep 1.618
fi
if [ "$(is_pidfile_running "${pid_file}")" = "TRUE" ]; then
echo "stop pidfile failed"
stop_pidfile "${pid_file}"
else
rm -rf "${pid_file}"
fi
}