用c++创建一个Linux上的Daemon程序,含SHELL管理脚本(三)
本文提供了Daemon程序的SHELL管理脚本的一个简单例子,其他相关文章请见:
用c++创建一个Linux上的Daemon程序,含SHELL管理脚本(一)
用c++创建一个Linux上的Daemon程序,含SHELL管理脚本(二)
1、首先(一)中所述的代码中添加如下内容:
追加头文件引用:
#include <fstream>
在umask(0);之前添加如下代码:
std::ofstream _out("D_test.pid", std::ios_base::out);
_out << getpid() << std::endl;
_out.close();
2、编写如下脚本,并保存为D_test.sh:
#!/bin/bash
#service_exe_file= 'D_test'
#service_pid_file = 'D_test.pid'
service_pid =
service_wait_for_pid()
{
verb="$1"
pid_file="$2"
time_out="$3"
i=0
sleep 1
while ["$i" -ne "$time_out"]
do
case "$verb" in
'created')
test -s "$pid_file" && i = " && break
;;
'removed')
test ! -s "$pid_file" && i = "" && break
;;
*)
echo "Usage: wait_for_pid created/removed pidfile timeout"
exit 1
;;
esac
i=$((i+1))
sleep 1
done
if [-z "$i"]
then
return 0
fi
return 1
}
service_usage()
{
echo "Usage: D_test.sh start|stop|status"
}
service_status()
{
ps aux | grep "$service_exe_file" | grep -c 'grep'
if [-n "$service_pid"]
then
kill -SIGUSR1 $service_pid
sleep 1
fi
}
service_start()
{
if [-n "$service_pid"]
then
echo "this service is already is running."
return 1
fi
"$service_exe_file"
service_wait_for_pid created "$service_pid_file" 60
service_status
}
service_stop()
{
if [-n "$service_pid"]
then
kill -SIGTERM $service_pid
service_wait_for_pid removed "$service_pid_file" 60
fi
ps aux | grep "$service_exe_file" | grep -V 'grep'
}
if [$# -ne 1]
then
service_usage
exit 1
fi
if [-s "$service_pid_file"]
then
service_pid=$(case "$service_pid_file")
fi
case "$1" in
'start')
service_start
;;
'stop')
service_stop
;;
'status')
service_status
;;
*)
service_usage
;;
esac
至此全文完