免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 8743 | 回复: 11
打印 上一主题 下一主题

如何保证一个程序同时只有一个实例(进程)运行? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-12-11 08:51 |只看该作者 |倒序浏览
要编程实现?
1。如何保证本程序同时只有一个实例(进程)运行?

2。如何判断一个进程的父进程是SHELL?

论坛徽章:
0
2 [报告]
发表于 2003-12-11 09:15 |只看该作者

如何保证一个程序同时只有一个实例(进程)运行?

getppid()

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
3 [报告]
发表于 2003-12-11 09:17 |只看该作者

如何保证一个程序同时只有一个实例(进程)运行?

原帖由 "nwlee" 发表:
要编程实现?
1。如何保证本程序同时只有一个实例(进程)运行?

2。如何判断一个进程的父进程是SHELL?

第一个,你可以这样,建立一个文件,里面放的是
这个进程的pid,然后把文件锁住,如果再起一个的话,
去读此文件,因文件已被锁,所以知道已经有一个进程在
运行。没有特别好的方法来判断,这是一个方法。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
4 [报告]
发表于 2003-12-11 13:22 |只看该作者

如何保证一个程序同时只有一个实例(进程)运行?

要编程实现?
1。如何保证本程序同时只有一个实例(进程)运行?
这个应该在程序设计的时候保证的,如果是判断一个进程是否起来,没必要编程序吧

2。如何判断一个进程的父进程是SHELL?
进程如果不是守护的,getppid后便知道,如果是守护的那么一般是init,也能够知道

论坛徽章:
0
5 [报告]
发表于 2003-12-11 13:38 |只看该作者

如何保证一个程序同时只有一个实例(进程)运行?

蓝色键盘,谢谢你的答复
>;要编程实现?
>;1。如何保证本程序同时只有一个实例(进程)运行?
>;这个应该在程序设计的时候保证的,如果是判断一个进程是否起来,没必要编程>;序吧
因为我写的程序比较占资源,一次最好只起一个进程。最好能在程序内判断。



>;2。如何判断一个进程的父进程是SHELL?
>;进程如果不是守护的,getppid后便知道,如果是守护的那么一般是init,也能够>;知道

能否详细点, getppid只能得到父进程的pid,但如何判断父进程是shell进程?

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
6 [报告]
发表于 2003-12-11 13:50 |只看该作者

如何保证一个程序同时只有一个实例(进程)运行?

1、如果启动某个进城后,又另外一进程在启动,这样的过程实现起来比较麻烦,至少你要有一种IPC的手段。
如果只是在一个进程创建了某个进程,然后判断是否继续fork之类的,这个比较简单。随便一个计数器和一个signal函数便能实现。
2、如果进程成为了deamon,那么其一般父进程为init。

论坛徽章:
0
7 [报告]
发表于 2003-12-11 14:23 |只看该作者

如何保证一个程序同时只有一个实例(进程)运行?

1、用一个咨询式文件锁。APUE里有。
2、不可能。也没这个必要。楼主的需求有问题。

论坛徽章:
0
8 [报告]
发表于 2003-12-11 20:46 |只看该作者

如何保证一个程序同时只有一个实例(进程)运行?

偶觉得很简单,没那么复杂。

在程序运行的时候,判断是否有同样的程序在运行。

俺用GCC, 来一个popen , 测试一下PS -EF|GREP 程序|wc -l。

就OK。

论坛徽章:
0
9 [报告]
发表于 2003-12-11 20:59 |只看该作者

如何保证一个程序同时只有一个实例(进程)运行?

没必要用文件锁那么复杂,用popen 即可,这儿有个现成的函数,可以判断同名进程已经起了几个。
/************************************
*      函 数 名: int  CheckPoc(char * ppszProcess)
*      文 件 名: CheckProc.c
*      入口参数: ppszProcess:进程名
*
*      返回参数: 进程数
*      函数功能: 检查进程数,并可用于杀进程使用
***************************************/
int    CheckProc(ppszProcess)
char * ppszProcess;
{
    FILE *fp;
    char buffer[300], cmd[20];
    char pid[20], temp[20],proc[20];
    int  i = 0;
    sprintf(temp,"ps -ef|grep %s",ppszProcess);

    if((fp = popen(temp, "r") != NULL)
    {
        while (fgets(buffer, 128, fp))
        {
           sscanf(buffer, "%*s%s%*s%*s%*s%*s%*s%s", pid,proc);
           if (strstr(proc, ppszProcess)!=NULL && atoi(pid)!=getpid())
                i++;
        }
    }
    pclose(fp);
    return  (i);
}

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
10 [报告]
发表于 2003-12-11 22:45 |只看该作者

如何保证一个程序同时只有一个实例(进程)运行?

一般两种
1、启动脚本中判断进程是否存在
2、文件锁的方式,一般是将pid写到某个pid文件中,并对文件加锁。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP