当前位置:  技术问答>linux和unix

请大家帮我看看这样做来确保UNIX某程序同时只有一个进程运行可以吗?

    来源: 互联网  发布时间:2015-04-24

    本文导语:  请大家帮我看看这样做来确保UNIX某程序同时只有一个进程运行可以吗? 环境为Sco OpenServer5.0.5。 isAloneProcess返回1表示为第一个进程,0表示已有进程启动,负数表示出错; key为一约定的文件名,同一程序采用同样的...

请大家帮我看看这样做来确保UNIX某程序同时只有一个进程运行可以吗?
环境为Sco OpenServer5.0.5。
isAloneProcess返回1表示为第一个进程,0表示已有进程启动,负数表示出错;
key为一约定的文件名,同一程序采用同样的值(文件的绝对路径名)。本函数在main的开头调用,打开的文件及其上的锁不关闭不撤销,等进程退出时自动关闭。
我这样做可靠吗?有什么地方可以改进?或者谁有其它简单可靠的方法,最好给出样例程序。谢谢!
#include 
#include 
#include 
#include 
int isAloneProcess(char * key)
{
int fd;
struct flock fl;

fl.l_type = F_WRLCK;
fl.l_start = 0;
fl.l_whence = 0;
fl.l_len = 0;
fl.l_pid = getpid();

fd = open(key, O_RDWR|O_CREAT|O_TRUNC);
if (-1 == fd) return -1000-errno;
if (-1 == fchmod(fd, S_IRUSR|S_IWUSR)) return -2000-errno;
if (0 == fcntl(fd, F_SETLK, &fl)) return 1;
else
{
if (EACCES == errno) return 0;
else return -3000-errno;
}
}

|
我觉得可以使用一个文件,将该进程的PID写进去,这样当另一实例起来时,读此文件,取得PID,检查该PID 是否是同一类程序,如果是,就自己kill自己,否则前一pid已非自然死亡,可以从文件中删除前pid,写入自己的pid.(自然该文件的读写需要上锁)。
还有,启动另一daemon,和此程序的唯一实例进行通信,定时握手,如果唯一实例非正常死亡,daemon可以kill 该pid, 重新启动此程序的另一实例,该实例启动时将pid写入到文件中。

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 简单!看看这个方法!简单!看看这个方法!
  • linux高手看看
  • 好消息,近来看看......
  • 我想看看有关Linux和Unix的源码,有什么好的建议
  • 想看看linux的内核源代码!从哪里开始!给点建议!!
  • php iis7站长之家
  • 关于全选的问题大家帮忙看看~
  • jsp论坛,大家快去看看,解决树形目录http://52jsp.126.com
  • 各位大侠,小侠,快过来看看。
  • 看过操作系统设计与实现的进来看看
  • 请进来看看!!
  • 帮我看看下面这条语句??
  • 大家去软件工程论坛里面去看看那,我发了700分的问题!!
  • 建议去这里看看,有好多基本的重要知识! 绝对值得一看!
  • 大家帮我看看,我好把贴子结了,里面有100分。。。。。。
  • 到 http://www.xbit2008.com 看看技术文章把! 我写的或从网上摘的!
  • 虚心请教问题,帮我看看好吗?
  • 我刚申请的域名rootsafe.com大家看看怎么样? up有分!
  • 帮我看看是不是被黑了?
  • 我的Solaris启动不了了,请帮忙看看


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3