当前位置: 技术问答>linux和unix
c语言编程问题:如果防止linux下程序的重复运行?
来源: 互联网 发布时间:2015-04-12
本文导语: 如题目, 如何防止自己的程序被重复运行?谢谢 | 那就这么办,当第一个进程创建时,这个进程可以创建一个文件,然后给这个文件加上建议性锁,然后往这个文件里写上这个进程的pid信息...
如题目, 如何防止自己的程序被重复运行?谢谢
|
那就这么办,当第一个进程创建时,这个进程可以创建一个文件,然后给这个文件加上建议性锁,然后往这个文件里写上这个进程的pid信息,这样也可以用脚本命令来结束这个进程。当另一个进程创建时,如果这个文件存在,但是没有加锁,那么就是机器非正常重新启动,如果加了锁,就是有另外一个进程存在,退出即可。
|
编一SHELL程序来判断,程序名定为:TestDaemonExist:
DaemonNum=`ps -e|grep $1|wc -l`
if [ $DaemonNum -ge 2 ]
then
exit(1) #如daemon进程已起动,则返回1
else
exit(0) #如daemon进程未起动,则返回0
fi
在程序前部,增加一个判断
if (system("TestDaemonExist Daemon-name")!=0)
{
printf("daemon进程已起动!!!");
exit(0);
};
DaemonNum=`ps -e|grep $1|wc -l`
if [ $DaemonNum -ge 2 ]
then
exit(1) #如daemon进程已起动,则返回1
else
exit(0) #如daemon进程未起动,则返回0
fi
在程序前部,增加一个判断
if (system("TestDaemonExist Daemon-name")!=0)
{
printf("daemon进程已起动!!!");
exit(0);
};
|
不过这样有些小问题,就是可能是其他程序的进程。如果为了保险,可以取该进程的信息,看看是否是本程序的一个进程。
其实一般的程序在检测到该pid文件后做的事情只是提示用户,然后退出,由用户处理。
其实一般的程序在检测到该pid文件后做的事情只是提示用户,然后退出,由用户处理。
|
同意CoolQ的方法。这个方法是一般的daemon常用的方法,见《UNIX网络编程》第二卷的9.3节。用一个写入锁就可以了。
|
没关系。根据获得的pid文件中的pid,用kill(pid, 0)看看其状态。如果死了,可以把pid文件干掉,生成新的,启动即可。