免费注册 查看新帖 |

Chinaunix

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

LINUX中的程序不想让其同时运行多个副本,我应如何作呢? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-05-07 11:16 |只看该作者 |倒序浏览
LINUX中的程序不想让其同时运行多个副本,我应如何作呢?

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

LINUX中的程序不想让其同时运行多个副本,我应如何作呢?

LINUX中的程序不想让其同时运行多个副本,我应如何作呢?

你的多个副本是怎么产生的?

论坛徽章:
0
3 [报告]
发表于 2003-05-07 13:11 |只看该作者

LINUX中的程序不想让其同时运行多个副本,我应如何作呢?

你可以利用UNIX域套接字或者/proc文件系统来实现。

论坛徽章:
0
4 [报告]
发表于 2003-05-07 14:24 |只看该作者

LINUX中的程序不想让其同时运行多个副本,我应如何作呢?

我这个程序是一个作业调度程序,
根据不同的条件去调度作业(有程序,
也有shell脚本)去运行,
所以,在系统中只能运行一个我这个程序,
多了就有问题啦(作业调度会乱了)。
因此,当系统中运行了我这个程序后,
用户再想运行我这个程序时,就弹出一个
窗口提示"不能重载",之后退出。。。。
在Windows中我用
        HWND AppWnd=FindWindow("TApplication","调度程序";
        if(AppWnd){//已有调度程序运行了
          if(IsIconic(AppWnd))//
              ShowWindow(AppWnd,SW_RESTORE);//如果是最小化,就还原已运行了的调度程序窗口
             else
              SetForegroundWindow(AppWnd);//如果已运行了的调度程序不在前台,就将其窗口拉到前台
          return 0;//本次运行的调度程序退出
        }

但是在LINUX中我不会用,求高手细细指点一下

论坛徽章:
0
5 [报告]
发表于 2003-05-07 15:33 |只看该作者

LINUX中的程序不想让其同时运行多个副本,我应如何作呢?

用文件锁啦!
譬如,你的主程序启动后,产生一个文件,用这个文件去标识你的唯一啦!

论坛徽章:
0
6 [报告]
发表于 2003-05-07 16:17 |只看该作者

LINUX中的程序不想让其同时运行多个副本,我应如何作呢?

我这儿有一个UNIX下的:

  1. int check_sys ( char *string )
  2.    {
  3.       int     retu;
  4.       char    s[ 128 ];


  5.       sprintf( s, "ps -aef | awk '{ if ( $10 == \"%s\" ) cnt++ } END { exit cnt }'", string );
  6.       if( (retu=system(s) ) < 0 )
  7.          {
  8.             return -1 ;
  9.          }
  10.       else if( retu >;= 2*256 )
  11.          {
  12.             fprintf( stdout, "%s already started.\n\n", string );
  13.             return 1;
  14.          }
  15.       else
  16.          {
  17.             fprintf( stdout, "%s started.\n\n", string );
  18.             return 0;
  19.          }

  20.    }
复制代码

论坛徽章:
0
7 [报告]
发表于 2003-05-08 12:07 |只看该作者

LINUX中的程序不想让其同时运行多个副本,我应如何作呢?

使用信号灯!

论坛徽章:
0
8 [报告]
发表于 2003-05-08 12:55 |只看该作者

LINUX中的程序不想让其同时运行多个副本,我应如何作呢?

[quote]原帖由 "HopeCao"][/quote 发表:

这样恐怕不行吧。
如果程序叫app,而有人正在执行/.../app/....程序,岂不是要错了?
我觉得应该

  1. ps -ae | awk '{ if ( $4 == \"%s\" ) cnt++ } END { exit cnt }'
复制代码


用文件也不安全,万一进程没有正常退出,以后还得手工删除,麻烦死了。
最简单的还是使用/proc或者域套接字。你们跟BSD有仇吗?为什么宁可绕远也不使用BSD的机制呢?

论坛徽章:
0
9 [报告]
发表于 2003-05-08 13:19 |只看该作者

LINUX中的程序不想让其同时运行多个副本,我应如何作呢?

1 有名信号灯
2 文件锁

但是要注意这两种的生命周期,就是在进程非正常退出时是不是还保留在系统中,保留到什么时候

论坛徽章:
0
10 [报告]
发表于 2003-05-08 19:29 |只看该作者

LINUX中的程序不想让其同时运行多个副本,我应如何作呢?

倒底如何作才好呢?
多谢 !
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP