#include <stdio.h>
#include <stdlib.h>
#define PROGRAM_PID_FILE "/var/run/program.pid"
/**************************************/
/**** 代码执行,编写后台运行程序 ***/
/**************************************/
static void demonize(void)
{
pid_t pid;
pid = fork();
if(pid < 0)
{
printf("fork error\n");
exit(0);
}
if(pid != 0)
{
exit(0);
}
if(setsid() < 0)
{
exit(0);
}
umask(0);
return;
}
/**************************************/
/**** 防止进程启动两次 ***/
/**************************************/
int program_pid_write(char *pidfile, pid_t pid)
{
FILE *file = fopen(pidfile,"w");
if(!file )
{
printf("open file error\n");
return -1;
}
fprintf(file,"%d\n", pid);
fclose(file);
return 0;
}
int program_is_running(char *pidfile)
{
FILE *file = fopen(pidfile,"r");
pid_t pid;
if(!file )
{
printf("open file error\n");
return 0;
}
fscanf(file, "%d", &pid);
fclose(file);
if(kill(pid, 0))
{
printf("open file error\n");
unlink(pidfile);
return 0;
}
return 1;
}
/**************************************/
int main()
{
if(program_is_running(PROGRAM_PID_FILE))
{
printf("the program has benn running.\n");
return 0;
}
/*进程后台运行*/
demonize();
if(program_pid_write(PROGRAM_PID_FILE,getpid()))
{
printf("the program pid write err.\n");
return 0;
}
/*code by yourself*/
while(1)
{
printf("the program is running.\n");
sleep(3);
}
}
/**************************************/
#include <stdlib.h>
#define PROGRAM_PID_FILE "/var/run/program.pid"
/**************************************/
/**** 代码执行,编写后台运行程序 ***/
/**************************************/
static void demonize(void)
{
pid_t pid;
pid = fork();
if(pid < 0)
{
printf("fork error\n");
exit(0);
}
if(pid != 0)
{
exit(0);
}
if(setsid() < 0)
{
exit(0);
}
umask(0);
return;
}
/**************************************/
/**** 防止进程启动两次 ***/
/**************************************/
int program_pid_write(char *pidfile, pid_t pid)
{
FILE *file = fopen(pidfile,"w");
if(!file )
{
printf("open file error\n");
return -1;
}
fprintf(file,"%d\n", pid);
fclose(file);
return 0;
}
int program_is_running(char *pidfile)
{
FILE *file = fopen(pidfile,"r");
pid_t pid;
if(!file )
{
printf("open file error\n");
return 0;
}
fscanf(file, "%d", &pid);
fclose(file);
if(kill(pid, 0))
{
printf("open file error\n");
unlink(pidfile);
return 0;
}
return 1;
}
/**************************************/
int main()
{
if(program_is_running(PROGRAM_PID_FILE))
{
printf("the program has benn running.\n");
return 0;
}
/*进程后台运行*/
demonize();
if(program_pid_write(PROGRAM_PID_FILE,getpid()))
{
printf("the program pid write err.\n");
return 0;
}
/*code by yourself*/
while(1)
{
printf("the program is running.\n");
sleep(3);
}
}
/**************************************/