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

寻求 Linux 进程互斥的方法,谢谢!

    来源: 互联网  发布时间:2016-05-09

    本文导语:  问个问题,对于有些来说也许很简单。 关于Linux下进程互斥的方法,就是启动一个Linux运行程序,只能被运行一次,第二次运行的时候检测互斥信号量,如果存在便退出该进程。 我所知道的VC创建信号量的方法,但不...

问个问题,对于有些来说也许很简单。

关于Linux下进程互斥的方法,就是启动一个Linux运行程序,只能被运行一次,第二次运行的时候检测互斥信号量,如果存在便退出该进程。
我所知道的VC创建信号量的方法,但不知道Linux下如何创建的,请高手给几句话参考一下。
或者推荐一些其他更有效更合理的做法。

谢谢

|
sem = sem_open("/var/.vp", O_CREAT, SEM_MODE);
这句错误。当为sem_open指定O_CREAT时,后边要带两个参数的,除了mode,还需要一个值。
另外,在/var目录下有写权限吗?

|
后面跟了什么值??

[code=BatchFile]
#include 

sem_t *sem_open(const char *name, int oflag);
sem_t *sem_open(const char *name, int oflag,
                mode_t mode, unsigned int value);

If  O_CREAT  is  specified  in oflag, then two additional arguments must be
supplied.  The mode argument specifies the permissions to be placed on  the
new semaphore, as for open(2).  The permissions settings are masked against
the process umask.  Both read and write permission  should  be  granted  to
each  class  of  user  that  will access the semaphore.  The value argument
specifies the initial value for the new semaphore.  If  O_CREAT  is  speci-
fied,  and  a  semaphore  with the given name already exists, then mode and
value are ignored.
[/code]

mode必须给自己读写权限,value是默认初始值。楼主分别穿了什么参数?
在sem = sem_open("/var/.vp", O_CREAT, SEM_MODE); 
后面追加

int err = errno;
printf("ERRNO:[%d]", err);



|
c语言如何实现只运行单个进程实例?

参考上文,简单的方法是在确定的目录下创建一个文件,然后用文件锁。如果能加锁,说明是First进程,否则说明已有进程,退出即可。 
用文件锁的好处是,当进程异常退出时,内核会自动释放其持有的文件锁,这样不会引起无法再次启动的问题。

其他手段很多、大概分成两类。 
第一类是使用系统资源,文件、有名管道、共享内存、信号灯等等。 
第二类是建立自己的监测体系,例如使用demon监视进程状态等等。这种方式也离不开进程间通信的。


|
楼上讲的很全面了。

//信号量。
#include 
#include 
#include 

#define SEM_MODE        (S_IRUSR | S_IWUSR)
int
main(void)
{
        sem_t   *sem;
        sem = sem_open("/posixsem", O_CREAT, SEM_MODE);
        return (0);
}



|
二楼的解释得很清楚,三楼和四楼的代码都可以用.三楼的是用信号量,就是你问的问题的方法了。四楼的用文件锁,就是二楼所说的简单的方法了。其实这些方法都差不多.

|
这个好像你问过一次了

|
为啥 open 后fd的返回一直是3呢,?

stdin, stdout, sderr由shell分配了0,1,2

open 打开的文件返回的文件描述符是没有被站用的描述符中最小的.

|
我记得在linux线程编程里边也有互斥量的建立。有专门函数的。

|
sign,学习了。。。

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












  • 相关文章推荐
  • 高分寻求Jcreator 2.0的注册码。谢谢!急用! 50分。
  • 寻求有关通讯的源代码,可以发到我油箱june37@163.com,小女子先谢谢了!100分
  • 寻求java压缩算法及实例,谢谢
  • 寻求 UltraEdit 9.10 的注册码,谢谢!
  • 寻求linux开发高手,本人想用linux开发一个视频服务器。本人已将编码和解码部分写完,但对LINUX不熟。特有意寻求合作伙伴。
  • 高分寻求jsp代码(网上调查系统,新闻发布系统)就这点分了
  • 寻求java加密算法及实例
  • 高分寻求JSP/Servlet写的聊天室源代码?请各位高手帮忙!
  • 德国母公司寻求国内软件开发合作伙伴
  • 寻求《beginning linux programming》中文版电子书
  • 寻求RTOS解决方案
  • 可耻的寻求大家帮助
  • 寻求精通Linux内核的高手共同开发程序
  • 给你1000分也行,再现等待!!寻求:直接基与xlib开发的控件:对话框、文本框、按钮、tab、。。。。
  • 寻求:/proc/sys/net/ipv4 参数详解
  • 寻求:unix/linux 基础实用资料
  • 1000分寻求解答,今天刚为win xp打了sp1,结果系统装完后要我再次激活
  • 寻求jbuilder4.0的注册码
  • 寻求乱序算法。
  • 寻求图象下载的applet程序
  • 寻求jbuilder的破解,~O^
  • --========寻求帮助=========--
  • 寻求jsp高手
  • 寻求linux桌面壁纸


  • 站内导航:


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

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

    浙ICP备11055608号-3