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

求助:如何禁止程序重复运行?

    来源: 互联网  发布时间:2016-02-06

    本文导语:  也就是启动一个程序后, 再启动时能检测到已经存在的程序,并退出?请提供参考代码 | /*------------------------------------------------------------------------  * 文件说明:  * 文件名 - lock.c  *  * ...

也就是启动一个程序后, 再启动时能检测到已经存在的程序,并退出?请提供参考代码

|
/*------------------------------------------------------------------------
 * 文件说明:
 * 文件名 - lock.c
 *
 * 函数列表:
 *        iamrunning - 判断我是不是正在运行
 *        delpidfile - 删去我的pid文件
 *-----------------------------------------------------------------------*/

/*------------------------------------------------------------------------
 *
 * man
 *
 *-----------------------------------------------------------------------*/

#include "../lock/lock.h"

/* 把宏定义写在这里。*/

#ifdef __cplusplus
extern "C" {
#endif

/*--------------------------------------------------------------------------*
 * static const char *filename = "/var/run/wedskq42.pid";
 * 文件名
 *--------------------------------------------------------------------------*/
static const char *filename = "/var/run/wedskq42.pid";

static void cool_exit(void) __attribute__ ((constructor));
/* 把本文件中出现的函数的原型(如果需要)写在这里。*/

#ifdef __cplusplus
}
#endif

/*--------------------------------------------------------------------------*
函数名字            iamrunning - 判断我是不是正在运行
函数原型            int iamrunning(void)
函数所在头文件      lock.h
函数的详细描述      判断我是不是正在运行
函数返回值          如果我在运行,返回我的 pid; 出错或没有运行, 返回 -1
*--------------------------------------------------------------------------*/
int iamrunning(void) {

  FILE *fp;

  if(file_exist((char *)filename)) {
    pid_t pid;

    if((fp = fopen(filename, "rt")) == NULL) {
      perror(filename);
      return -1;
    }
    if(fscanf(fp, "%d", &pid) != 1) {
      perror("fscanf");
      fclose(fp);
      return -1;
    }
    fclose(fp);
    if(kill(pid, 0) == 0)
      return pid;
  }

  if((fp = fopen(filename, "wt")) == NULL) {
    perror("fopen");
    return -1;
  }
  if(fprintf(fp, "%dn", (int)getpid()) = 0) {
    printf("系统已经运行, 进程 ID 是 %ldn", (long int)pid);
    exit(1);
  }

|
启动程序
检查文件/var/run/progname.pid文件是否存在,如果存在,把内容读出来,
pid = readfile(/var/run/progname.pid);
if (kill(pid, SIGTERM) >= 0) {
    alarm(0);
    //  确保已经运行的程序退出
    do {
       sleep(1);
       continue;
    } while (kill(pid, 0) >= 0); 
}
调用getpid(),把pid写到一个文件/var/run/progname.pid里去


    
 
 

您可能感兴趣的文章:

  • 菜鸟求助,我下了一个MozillaFirebird,解压后怎么运行啊?
  • 一个关于文件运行参数的问题,求助!
  • 求助:第一次装apache+php,运行站点出现403错误!
  • [求助]如何在linux下运行windows应用程序????
  • 求助!我编写的程序如何运行?
  • 菜鸟求助:如何让自己编的小程序,开机自动运行?
  • 求助:用虚拟机运行linux/unix效率问题
  • 求助 有人能给个编译好的,可直接运行的 发包测试软件吗
  • 求助 APACHE不能运行
  • 求助:关于双核程序运行资源分配的问题,一大一小啊现在。。。
  • 高分求助:fedora 8 安装了kismet,可是他放在什么地方,怎么运行呢
  • 求助关于ubuntu12开机后定期运行程序
  • (紧急求助)后台运行程序出错
  • 用户登陆后自动运行sh脚本,怎么写?(菜鸟求助)
  • 新人求助。crontab运行问题
  • 【求助】ubuntu正在运行低画质模式
  • 半夜百分求助,linux下tomcat运行问题
  • 求助:VMware7.1.4下安装64位REDHAT5.5后无法运行
  • 求助:32位机子里写的进程控制,网络通讯等程序在64位的机子里能否正常运行?
  • 如何在制作RPM包时运行脚本文件,求助?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 菜鸟求助:Linux 应用程序后台启动后关闭窗口程序退出
  • 求助 如何取消fedora 8启动时候的欢迎应用程序
  • 高分求助foxpro的jdbc驱动程序!!!!
  • 高分求助程序框架!!!!
  • 求助访问linux下jboss应用程序?
  • 求助:脚本文件和主程序通信问题
  • 求助:程序移植,让程序拷过去就可以用
  • Linux配置程序求助
  • 程序打包,求助!
  • [求助]如何获取一个程序所使用的系统调用和参数?
  • gtk程序中如何定时刷新?求助
  • 菜鸟的问题:求助,关于red hat linux 引导程序
  • 各位师哥师姐,我急切求助,关于文件的上传下载程序代码
  • IPTABLE辅助程序求助
  • HTML标签参考手册 iis7站长之家
  • 求助 程序中添加互斥锁代码后编译怎么通不过 ?
  • 【求助】应用程序能用likely和unlikely宏吗?
  • 求助!! 在QTE 下如何编写播放flash的 程序????
  • 求助!怎样实现一个程序长期固定的在一块物理内存
  • 求助:用java如何编写生成pdf格式报表的程序?
  • 高分求助高分求助高分求助高分求助高分求助高分求助
  • 怎样读取HZK24S前十区的内容啊???求助求助
  • 紧急求助!紧急求助!
  • 【求助】iplanet问题,求助高手解答!
  • 菜鸟求助,solaris下计算问题求助
  • 【求助】SOS紧急求助..............极为简单的问题...跪求....
  • 高分求助啊!求助SUSE 10.0 不能上网.
  • 急急急急急急急啊,紧急求助啊!!!!!满分求助啊!!!!!!
  • 求助:linux下 vim的配置(高分求助)
  • red hat怎么安装gcc啊!总是出错,求助求助啊!!!yum源怎么改啊!!
  • 求助~~求助 ~~linux文件读写问题


  • 站内导航:


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

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

    浙ICP备11055608号-3