一个linux守护进程的编写(Ubuntu环境下)
在网上找了许多资料,发现不同系统下的编写方法有点不同,这里用的了ubuntu下的方法,供参考:
先写一下小程序运行 , init_daemon:
1 #include <stdlib.h> 2 #include <stdio.h> 3 4 int main() 5 { 6 daemon(0,0); // 将进程声明为守护进程 7 8 int i = 0 ; 9 while(1) 10 { 11 i++ ; 12 sleep(100000); 13 } 14 }
编译,生成可执行文件: gcc -c init_daemon gcc -o init_daemond init_daemon.o ( 这里守护进程一般在文件后面加个d )
下面写bash文件,注意这个文件名一定要与程序名一致 ,这里文件名为: init_daemond,创建后修改文件属性为 sudo chmod +x init_daemond :
1 #! /bin/sh 2 3 ### BEGIN INIT INFO 4 # Provides: 5 # Description: A simple example for daemon app 6 ### END INIT INFO 7 8 9 if [ -f /etc/init.d/functions ] 10 then 11 . /etc/init.d/functions 12 else 13 . /lib/lsb/init-functions 14 fi 15 16 NAME=Example_Daemond 17 DAEMON=/usr/bin/init_daemond 18 LOCKFILE=/var/lock/subsys/$DAEMON 19 PIDFILE=/var/run/$NAME.pid 20 21 #start function 22 start(){ 23 echo -n "Starting daemon: "$NAME 24 start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON 25 echo "." 26 } 27 #stop function 28 stop(){ 29 echo "Stopping $DAEMON ..." 30 if pidof $DAEMON > /dev/null; then 31 killall -9 $DAEMON > /dev/null 32 rm -rf $PIDFILE 33 echo "Stop $DAEMON Success..." 34 fi 35 } 36 37 38 #restart function 39 restart(){ 40 start 41 stop 42 } 43 44 #status function 45 status(){ 46 if pidof -o %PPID $DAEMON > /dev/null; then 47 echo $NAME" is running..." 48 exit 0 49 else 50 echo $NAME" is not running..." 51 exit 1 52 fi 53 } 54 55 56 case "$1" in 57 start) 58 start 59 ;; 60 stop) 61 stop 62 ;; 63 reload|restart) 64 stop 65 sleep 2 66 start 67 ;; 68 status) 69 status 70 ;; 71 *) 72 echo $"Usage: $0 {start|stop|restart|status}" 73 exit 1 74 esac
然后可以用service 命令启动守护进程:
1 service init_daemond start 2 service init_daemond stop 3 service init_daemond status
可以用ps -ef 命令来查看守护进程的运行