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
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
|
|
}
|
|
|