Python论坛  - 讨论区

标题:[python-chinese] python 如何判断一个程序已经启动过一次了? (使用Py2Exe生成Exe后在windows中运行)

2006年12月21日 星期四 16:27

ray zhenlin ray1.cn在gmail.com
星期四 十二月 21 16:27:07 HKT 2006

×î½üʹÓÃPythonдÁ˸ö³ÌÐò£¬µ«ÐèÒª·ÀÖ¹Õâ¸ö³ÌÐò±»Í¬Ê±ÔËÐÐ2´Î£¬ÇëÎÊÓÐʲô°ì·¨À´¼ì²é£¿
-------------- 下一部分 --------------
Ò»¸öHTML¸½¼þ±»ÒƳý...
URL: http://python.cn/pipermail/python-chinese/attachments/20061221/4fc70c40/attachment.htm 

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年12月21日 星期四 16:42

IQDoctor huanghao.c在gmail.com
星期四 十二月 21 16:42:58 HKT 2006

第一次运行, 将 PID 写进文件, 例如: /var/run/yourprog.pid
下次运行时检查该文件, 如果正在运行中就 exit..

ray zhenlin 写道:
> 最近使用Python写了个程序,但需要防止这个程序被同时运行2次,请问有什么
> 办法来检查?
> ------------------------------------------------------------------------
>
> _______________________________________________
> python-chinese
> Post: send python-chinese at lists.python.cn
> Subscribe: send subscribe to python-chinese-request at lists.python.cn
> Unsubscribe: send unsubscribe to  python-chinese-request at lists.python.cn
> Detail Info: http://python.cn/mailman/listinfo/python-chinese


[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年12月21日 星期四 16:44

IQDoctor huanghao.c在gmail.com
星期四 十二月 21 16:44:05 HKT 2006

sry, 没看到 WINDOWS...

IQDoctor 写道:
> 第一次运行, 将 PID 写进文件, 例如: /var/run/yourprog.pid
> 下次运行时检查该文件, 如果正在运行中就 exit..
>
> ray zhenlin 写道:
>   
>> 最近使用Python写了个程序,但需要防止这个程序被同时运行2次,请问有什么
>> 办法来检查?
>> ------------------------------------------------------------------------
>>
>> _______________________________________________
>> python-chinese
>> Post: send python-chinese at lists.python.cn
>> Subscribe: send subscribe to python-chinese-request at lists.python.cn
>> Unsubscribe: send unsubscribe to  python-chinese-request at lists.python.cn
>> Detail Info: http://python.cn/mailman/listinfo/python-chinese
>>     
>
>
>   


[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年12月21日 星期四 17:15

头太晕 torrycn在gmail.com
星期四 十二月 21 17:15:27 HKT 2006

ÔÚ06-12-21£¬ray zhenlin <ray1.cn在gmail.com> дµÀ£º
>
> ×î½üʹÓÃPythonдÁ˸ö³ÌÐò£¬µ«ÐèÒª·ÀÖ¹Õâ¸ö³ÌÐò±»Í¬Ê±ÔËÐÐ2´Î£¬ÇëÎÊÓÐʲô°ì·¨À´¼ì²é£¿


Èç¹ûÊÇÔÚwindowsÉÏ,¿ÉÒÔʹÓÃCreateMutex()½¨Á¢Ò»¸ö»¥³â.

ÏÂÃæÊÇactivepythonµÄ°ïÖúÎļþÖеÄÒ»¶Î

win32event .CreateMutex

PyHANDLE  = *CreateMutex(securityAttributes, bInitialOwner ,
mutexName *)

Creates a mutex

 Parameters

 *securityAttributes* : object Placeholder for furture security object, or
None *bInitialOwner* : int flag for initial ownership *mutexName* : *
PyIUnicode* mutex-object name, or None

Return ValueThe result is a handle to the created object
-------------- 下一部分 --------------
Ò»¸öHTML¸½¼þ±»ÒƳý...
URL: http://python.cn/pipermail/python-chinese/attachments/20061221/4838d986/attachment.html 

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年12月21日 星期四 20:11

武长斌 chbin.w在gmail.com
星期四 十二月 21 20:11:08 HKT 2006

limoudo 在Ulipad中有一个实现,你可以和他探讨一下,似乎他用的是socket来作的。

在 06-12-21,头太晕<torrycn at gmail.com> 写道:
>
>
> 在06-12-21,ray zhenlin <ray1.cn at gmail.com> 写道:
> > 最近使用Python写了个程序,但需要防止这个程序被同时运行2次,请问有什么办法来检查?
>
> 如果是在windows上,可以使用CreateMutex()建立一个互斥.
>
> 下面是activepython的帮助文件中的一段
>
> win32event.CreateMutex
>
> PyHANDLE = CreateMutex(securityAttributes, bInitialOwner , mutexName )
>
> Creates a mutex
>
> Parameters
>
> securityAttributes : object Placeholder for furture security object, or None
> bInitialOwner : int flag for initial ownership mutexName : PyIUnicode
> mutex-object name, or None
>
> Return ValueThe result is a handle to the created object
> _______________________________________________
> python-chinese
> Post: send python-chinese at lists.python.cn
> Subscribe: send subscribe to
> python-chinese-request at lists.python.cn
> Unsubscribe: send unsubscribe to
> python-chinese-request at lists.python.cn
> Detail Info:
> http://python.cn/mailman/listinfo/python-chinese
>


-- 
武长斌
chbin.w at gmail.com

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年12月21日 星期四 20:14

limodou limodou在gmail.com
星期四 十二月 21 20:14:59 HKT 2006

On 12/21/06, 武长斌 <chbin.w在gmail.com> wrote:
> limoudo 在Ulipad中有一个实现,你可以和他探讨一下,似乎他用的是socket来作的。
>
我使用socket主要不仅是为了实现判断是否已经有实例,同时是为了实现DDE(动态数据交换),在启动第二个实例时,当命令行参数传给第一个实例,而且为了跨平台,所以使用了socket来做。如果只是判断重复,则不必如此麻烦。

-- 
I like python!
UliPad <>: http://wiki.woodpecker.org.cn/moin/UliPad
My Blog: http://www.donews.net/limodou

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年12月21日 星期四 20:22

武长斌 chbin.w在gmail.com
星期四 十二月 21 20:22:46 HKT 2006

> 我使用socket主要不仅是为了实现判断是否已经有实例,同时是为了实现DDE(动态数据交换),在启动第二个实例时,当命令行参数传给第一个实例,而且为了跨平台,所以使用了socket来做。如果只是判断重复,则不必如此麻烦。
>

是这样啊,有什么好的办法能够在不同的系统平台上都能用呢?

-- 
武长斌
chbin.w at gmail.com

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年12月22日 星期五 06:19

Hong Yuan hongyuan在homemaster.cn
星期五 十二月 22 06:19:14 HKT 2006

IQDoctor 写道:
> 如果你的进程永远是作为 ROOT 跑的, 那就简单了, 为了担心 ROOT 误删除 PID 
> 文件, 可以在建立
> PID 文件时候, 立即 chattr +i prog.pid, 这样 ROOT 误操作都删除不掉 
> prog.pid 了.
chattr好像只适用于ext2/ext3文件系统,不购通用。

-- 

大管家网上建材超市
装修买建材 上网找大管家
http://www.homemaster.cn
Tel: 0086-21-34240987
Fax: 0086-21-64692422


[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年12月22日 星期五 12:12

shhgs shhgs.efhilt在gmail.com
星期五 十二月 22 12:12:20 HKT 2006

用socket是一个好办法。定一个端口,程序启动,就监听。不管程序是不是正常退出了,只要是退出,端口就没人监听了,于是其他程序就可以上了。

CU上有一个讨论怎样确保一个程序只有一个实例的帖子。我想了半天,也没找到能让我满意的办法。limodou的办法确实巧妙,值得学习。

On 12/21/06, 武长斌 <chbin.w在gmail.com> wrote:
> > 我使用socket主要不仅是为了实现判断是否已经有实例,同时是为了实现DDE(动态数据交换),在启动第二个实例时,当命令行参数传给第一个实例,而且为了跨平台,所以使用了socket来做。如果只是判断重复,则不必如此麻烦。
> >
>
> 是这样啊,有什么好的办法能够在不同的系统平台上都能用呢?
>
> --
> 武长斌
> chbin.w在gmail.com
> _______________________________________________
> python-chinese
> Post: send python-chinese在lists.python.cn
> Subscribe: send subscribe to python-chinese-request在lists.python.cn
> Unsubscribe: send unsubscribe to  python-chinese-request在lists.python.cn
> Detail Info: http://python.cn/mailman/listinfo/python-chinese

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年12月22日 星期五 12:16

shhgs shhgs.efhilt在gmail.com
星期五 十二月 22 12:16:48 HKT 2006

PID的办法并不是万无一失的。

第一,如果有人把你的PID文件删了,该怎么办?

第二,如果你的程序意外退出了,且退出的时候,没有删PID文件,该怎么办?

这个问题看上去简单,但真的要做好却很难。

On 12/21/06, IQDoctor <huanghao.c在gmail.com> wrote:
> 第一次运行, 将 PID 写进文件, 例如: /var/run/yourprog.pid
> 下次运行时检查该文件, 如果正在运行中就 exit..
>
> ray zhenlin 写道:
> > 最近使用Python写了个程序,但需要防止这个程序被同时运行2次,请问有什么
> > 办法来检查?
> > ------------------------------------------------------------------------
> >
> > _______________________________________________
> > python-chinese
> > Post: send python-chinese在lists.python.cn
> > Subscribe: send subscribe to python-chinese-request在lists.python.cn
> > Unsubscribe: send unsubscribe to  python-chinese-request在lists.python.cn
> > Detail Info: http://python.cn/mailman/listinfo/python-chinese
>
> _______________________________________________
> python-chinese
> Post: send python-chinese在lists.python.cn
> Subscribe: send subscribe to python-chinese-request在lists.python.cn
> Unsubscribe: send unsubscribe to  python-chinese-request在lists.python.cn
> Detail Info: http://python.cn/mailman/listinfo/python-chinese

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年12月22日 星期五 12:20

IQDoctor huanghao.c在gmail.com
星期五 十二月 22 12:20:05 HKT 2006

socket 是一种依靠 "错误" 来判定程序是否启动的方法, 虽然有效, 但是
从逻辑上来说并不好.

将 "已启动标记" 写进文件更好. LIN 下写 PID 作为标记,
WIN 下写别的 ..


shhgs 写道:
> 用socket是一个好办法。定一个端口,程序启动,就监听。不管程序是不是正常退出了,只要是退出,端口就没人监听了,于是其他程序就可以上了。
>
> CU上有一个讨论怎样确保一个程序只有一个实例的帖子。我想了半天,也没找到能让我满意的办法。limodou的办法确实巧妙,值得学习。
>
> On 12/21/06, 武长斌 <chbin.w at gmail.com> wrote:
>   
>>> 我使用socket主要不仅是为了实现判断是否已经有实例,同时是为了实现DDE(动态数据交换),在启动第二个实例时,当命令行参数传给第一个实例,而且为了跨平台,所以使用了socket来做。如果只是判断重复,则不必如此麻烦。
>>>
>>>       
>> 是这样啊,有什么好的办法能够在不同的系统平台上都能用呢?
>>
>> --
>> 武长斌
>> chbin.w at gmail.com
>> _______________________________________________
>> python-chinese
>> Post: send python-chinese at lists.python.cn
>> Subscribe: send subscribe to python-chinese-request at lists.python.cn
>> Unsubscribe: send unsubscribe to  python-chinese-request at lists.python.cn
>> Detail Info: http://python.cn/mailman/listinfo/python-chinese
>>     
> _______________________________________________
> python-chinese
> Post: send python-chinese at lists.python.cn
> Subscribe: send subscribe to python-chinese-request at lists.python.cn
> Unsubscribe: send unsubscribe to  python-chinese-request at lists.python.cn
> Detail Info: http://python.cn/mailman/listinfo/python-chinese


[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年12月22日 星期五 13:12

yi huang yi.codeplayer在gmail.com
星期五 十二月 22 13:12:18 HKT 2006

On 12/22/06, IQDoctor <huanghao.c at gmail.com> wrote:
>
> socket 是一种依靠 "错误" 来判定程序是否启动的方法, 虽然有效, 但是
> 从逻辑上来说并不好.
>
> 将 "已启动标记" 写进文件更好. LIN 下写 PID 作为标记,
> WIN 下写别的 ..
>
>
> shhgs 写道:
> > 用socket是一个好办法。定一个端口,程序启动,就监听。不管程序是不是正常退出了,只要是退出,端口就没人监听了,于是其他程序就可以上了。
> >
> > CU上有一个讨论怎样确保一个程序只有一个实例的帖子。我想了半天,也没找到能让我满意的办法。limodou的办法确实巧妙,值得学习。
> >
> > On 12/21/06, 武长斌 <chbin.w at gmail.com> wrote:
> >
> >>>
> 我使用socket主要不仅是为了实现判断是否已经有实例,同时是为了实现DDE(动态数据交换),在启动第二个实例时,当命令行参数传给第一个实例,而且为了跨平台,所以使用了socket来做。如果只是判断重复,则不必如此麻烦。
> >>>
> >>>
> >> 是这样啊,有什么好的办法能够在不同的系统平台上都能用呢?
> >>
> >> --
> >> 武长斌
> >> chbin.w at gmail.com
> >> _______________________________________________
> >> python-chinese
> >> Post: send python-chinese at lists.python.cn
> >> Subscribe: send subscribe to python-chinese-request at lists.python.cn
> >> Unsubscribe: send unsubscribe to
> python-chinese-request at lists.python.cn
> >> Detail Info: http://python.cn/mailman/listinfo/python-chinese
> >>
> > _______________________________________________
> > python-chinese
> > Post: send python-chinese at lists.python.cn
> > Subscribe: send subscribe to python-chinese-request at lists.python.cn
> > Unsubscribe: send unsubscribe to  python-chinese-request at lists.python.cn
> > Detail Info: http://python.cn/mailman/listinfo/python-chinese
>
> _______________________________________________
> python-chinese
> Post: send python-chinese at lists.python.cn
> Subscribe: send subscribe to python-chinese-request at lists.python.cn
> Unsubscribe: send unsubscribe to  python-chinese-request at lists.python.cn
> Detail Info: http://python.cn/mailman/listinfo/python-chinese


要跨平台的话,用 socket 就不错。
在 windows 下可以通过 CreateMutex 创建独享的内核对象。
网上搜一下有不少这样的文章。

-- 
http://codeplayer.blogspot.com/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://python.cn/pipermail/python-chinese/attachments/20061222/e5c71fda/attachment.html 

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年12月22日 星期五 13:17

ray zhenlin ray1.cn在gmail.com
星期五 十二月 22 13:17:06 HKT 2006

ÎÒÔÚwinÉÏÊÇÕâÑùʵÏֵģ¬ÓÐЧ¹û

import win32event
import win32api
import winerror

    # ÅжÏÊÇ·ñÓÐʵÀýÔËÐУ¬ÓУ¬Í˳ö
    mutex = None
    mutex = win32event.CreateMutex(None, 1, title)
    if win32api.GetLastError() == winerror.ERROR_ALREADY_EXISTS:
        dlg= wx.MessageDialog(None, title + "ÕýÔÚÔËÐÐÖÐ...",'¾¯¸æ',wx.OK |
wx.ICON_ERROR )
        dlg.ShowModal()
        dlg.Destroy()
        return

лл´ó¼Ò¸øµÄ½¨Òé

On 12/22/06, yi huang <yi.codeplayer在gmail.com> wrote:
>
> On 12/22/06, IQDoctor <huanghao.c在gmail.com> wrote:
> >
> > socket ÊÇÒ»ÖÖÒÀ¿¿ "´íÎó" À´Åж¨³ÌÐòÊÇ·ñÆô¶¯µÄ·½·¨, ËäÈ»ÓÐЧ, µ«ÊÇ
> > ´ÓÂß¼­ÉÏÀ´Ëµ²¢²»ºÃ.
> >
> > ½« "ÒÑÆô¶¯±ê¼Ç" д½øÎļþ¸üºÃ. LIN ÏÂд PID ×÷Ϊ±ê¼Ç,
> > WIN ÏÂд±ðµÄ ..
> >
> >
> > shhgs дµÀ:
> > > ÓÃsocketÊÇÒ»¸öºÃ°ì·¨¡£¶¨Ò»¸ö¶Ë¿Ú£¬³ÌÐòÆô¶¯£¬¾Í¼àÌý¡£²»¹Ü³ÌÐòÊDz»ÊÇÕý³£Í˳öÁË£¬Ö»ÒªÊÇÍ˳ö£¬¶Ë¿Ú¾ÍûÈ˼àÌýÁË£¬ÓÚÊÇÆäËû³ÌÐò¾Í¿ÉÒÔÉÏÁË¡£
> > >
> > > CUÉÏÓÐÒ»¸öÌÖÂÛÔõÑùÈ·±£Ò»¸ö³ÌÐòÖ»ÓÐÒ»¸öʵÀýµÄÌû×Ó¡£ÎÒÏëÁË°ëÌ죬ҲûÕÒµ½ÄÜÈÃÎÒÂúÒâµÄ°ì·¨¡£limodouµÄ°ì·¨È·ÊµÇÉÃֵµÃѧϰ¡£
> > >
> > > On 12/21/06, Î䳤±ó <chbin.w在gmail.com> wrote:
> > >
> > >>>
> > ÎÒʹÓÃsocketÖ÷Òª²»½öÊÇΪÁËʵÏÖÅжÏÊÇ·ñÒѾ­ÓÐʵÀý£¬Í¬Ê±ÊÇΪÁËʵÏÖDDE(¶¯Ì¬Êý¾Ý½»»»)£¬ÔÚÆô¶¯µÚ¶þ¸öʵÀýʱ£¬µ±ÃüÁîÐвÎÊý´«¸øµÚÒ»¸öʵÀý£¬¶øÇÒΪÁË¿çƽ̨£¬ËùÒÔʹÓÃÁËsocketÀ´×ö¡£Èç¹ûÖ»ÊÇÅжÏÖظ´£¬Ôò²»±ØÈç´ËÂé·³¡£
> >
> > >>>
> > >>>
> > >> ÊÇÕâÑù°¡£¬ÓÐʲôºÃµÄ°ì·¨Äܹ»ÔÚ²»Í¬µÄϵͳƽ̨É϶¼ÄÜÓÃÄØ£¿
> > >>
> > >> --
> > >> Î䳤±ó
> > >> chbin.w在gmail.com
> > >> _______________________________________________
> > >> python-chinese
> > >> Post: send python-chinese在lists.python.cn
> > >> Subscribe: send subscribe to python-chinese-request在lists.python.cn
> > >> Unsubscribe: send unsubscribe to
> > python-chinese-request在lists.python.cn
> > >> Detail Info: http://python.cn/mailman/listinfo/python-chinese
> > >>
> > > _______________________________________________
> > > python-chinese
> > > Post: send python-chinese在lists.python.cn
> > > Subscribe: send subscribe to python-chinese-request在lists.python.cn
> > > Unsubscribe: send unsubscribe to  python-chinese-request在lists.python.cn
> > > Detail Info: http://python.cn/mailman/listinfo/python-chinese
> >
> > _______________________________________________
> > python-chinese
> > Post: send python-chinese在lists.python.cn
> > Subscribe: send subscribe to python-chinese-request在lists.python.cn
> > Unsubscribe: send unsubscribe to  python-chinese-request在lists.python.cn
> > Detail Info: http://python.cn/mailman/listinfo/python-chinese
>
>
> Òª¿çƽ̨µÄ»°£¬Óà socket ¾Í²»´í¡£
> ÔÚ windows Ï¿ÉÒÔͨ¹ý CreateMutex ´´½¨¶ÀÏíµÄÄں˶ÔÏó¡£
> ÍøÉÏËÑÒ»ÏÂÓв»ÉÙÕâÑùµÄÎÄÕ¡£
>
> --
> http://codeplayer.blogspot.com/
> _______________________________________________
> python-chinese
> Post: send python-chinese在lists.python.cn
> Subscribe: send subscribe to python-chinese-request在lists.python.cn
> Unsubscribe: send unsubscribe to  python-chinese-request在lists.python.cn
> Detail Info: http://python.cn/mailman/listinfo/python-chinese
>
-------------- 下一部分 --------------
Ò»¸öHTML¸½¼þ±»ÒƳý...
URL: http://python.cn/pipermail/python-chinese/attachments/20061222/93db903e/attachment-0001.html 

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年12月22日 星期五 13:17

IQDoctor huanghao.c在gmail.com
星期五 十二月 22 13:17:17 HKT 2006

socket 一样可以被终止掉的.

只要想破坏的人具有 ROOT 身份, 你在系统里做的任何 "记号" 都不是万
无一失的(包括 SOCKET)

另外, 还有一种幄挫办法是取进程列表, 然后比较, 这个办法好处是
连 ROOT 都无法作假.

shhgs 写道:
> PID的办法并不是万无一失的。
>
> 第一,如果有人把你的PID文件删了,该怎么办?
>
> 第二,如果你的程序意外退出了,且退出的时候,没有删PID文件,该怎么办?
>
> 这个问题看上去简单,但真的要做好却很难。
>
> On 12/21/06, IQDoctor <huanghao.c at gmail.com> wrote:
>   
>> 第一次运行, 将 PID 写进文件, 例如: /var/run/yourprog.pid
>> 下次运行时检查该文件, 如果正在运行中就 exit..
>>
>> ray zhenlin 写道:
>>     
>>> 最近使用Python写了个程序,但需要防止这个程序被同时运行2次,请问有什么
>>> 办法来检查?
>>> ------------------------------------------------------------------------
>>>
>>> _______________________________________________
>>> python-chinese
>>> Post: send python-chinese at lists.python.cn
>>> Subscribe: send subscribe to python-chinese-request at lists.python.cn
>>> Unsubscribe: send unsubscribe to  python-chinese-request at lists.python.cn
>>> Detail Info: http://python.cn/mailman/listinfo/python-chinese
>>>       
>> _______________________________________________
>> python-chinese
>> Post: send python-chinese at lists.python.cn
>> Subscribe: send subscribe to python-chinese-request at lists.python.cn
>> Unsubscribe: send unsubscribe to  python-chinese-request at lists.python.cn
>> Detail Info: http://python.cn/mailman/listinfo/python-chinese
>>     
> _______________________________________________
> python-chinese
> Post: send python-chinese at lists.python.cn
> Subscribe: send subscribe to python-chinese-request at lists.python.cn
> Unsubscribe: send unsubscribe to  python-chinese-request at lists.python.cn
> Detail Info: http://python.cn/mailman/listinfo/python-chinese


[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年12月22日 星期五 13:22

limodou limodou在gmail.com
星期五 十二月 22 13:22:14 HKT 2006

On 12/22/06, ray zhenlin <ray1.cn在gmail.com> wrote:
> 我在win上是这样实现的,有效果
>
> import win32event
> import win32api
> import winerror
>
>     # 判断是否有实例运行,有,退出
>     mutex = None
>     mutex = win32event.CreateMutex(None, 1, title)
>     if win32api.GetLastError() == winerror.ERROR_ALREADY_EXISTS:
>         dlg= wx.MessageDialog(None, title + "正在运行中...",'警告',wx.OK |
> wx.ICON_ERROR )
>         dlg.ShowModal()
>         dlg.Destroy()
>         return
>
> 谢谢大家给的建议
>
看到你使用wx,其实wx有一个wx.SingleInstanceChecker的方法可以使用

-- 
I like python!
UliPad <>: http://wiki.woodpecker.org.cn/moin/UliPad
My Blog: http://www.donews.net/limodou

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年12月22日 星期五 13:25

shhgs shhgs.efhilt在gmail.com
星期五 十二月 22 13:25:00 HKT 2006

一般情况下,PID是标准做法。但是要做到万无一失,确实很难。

读进程表没有办法保证racing。

进程一读进程表,发现没有进程,但是在它读完进程表之后,启动进程之前,进程二插了进来。请问这个怎么解决?



On 12/22/06, IQDoctor <huanghao.c在gmail.com> wrote:
> socket 一样可以被终止掉的.
>
> 只要想破坏的人具有 ROOT 身份, 你在系统里做的任何 "记号" 都不是万
> 无一失的(包括 SOCKET)
>
> 另外, 还有一种幄挫办法是取进程列表, 然后比较, 这个办法好处是
> 连 ROOT 都无法作假.
>
> shhgs 写道:
> > PID的办法并不是万无一失的。
> >
> > 第一,如果有人把你的PID文件删了,该怎么办?
> >
> > 第二,如果你的程序意外退出了,且退出的时候,没有删PID文件,该怎么办?
> >
> > 这个问题看上去简单,但真的要做好却很难。
> >
> > On 12/21/06, IQDoctor <huanghao.c在gmail.com> wrote:
> >
> >> 第一次运行, 将 PID 写进文件, 例如: /var/run/yourprog.pid
> >> 下次运行时检查该文件, 如果正在运行中就 exit..
> >>
> >> ray zhenlin 写道:
> >>
> >>> 最近使用Python写了个程序,但需要防止这个程序被同时运行2次,请问有什么
> >>> 办法来检查?
> >>> ------------------------------------------------------------------------
> >>>
> >>> _______________________________________________
> >>> python-chinese
> >>> Post: send python-chinese在lists.python.cn
> >>> Subscribe: send subscribe to python-chinese-request在lists.python.cn
> >>> Unsubscribe: send unsubscribe to  python-chinese-request在lists.python.cn
> >>> Detail Info: http://python.cn/mailman/listinfo/python-chinese
> >>>
> >> _______________________________________________
> >> python-chinese
> >> Post: send python-chinese在lists.python.cn
> >> Subscribe: send subscribe to python-chinese-request在lists.python.cn
> >> Unsubscribe: send unsubscribe to  python-chinese-request在lists.python.cn
> >> Detail Info: http://python.cn/mailman/listinfo/python-chinese
> >>
> > _______________________________________________
> > python-chinese
> > Post: send python-chinese在lists.python.cn
> > Subscribe: send subscribe to python-chinese-request在lists.python.cn
> > Unsubscribe: send unsubscribe to  python-chinese-request在lists.python.cn
> > Detail Info: http://python.cn/mailman/listinfo/python-chinese
>
> _______________________________________________
> python-chinese
> Post: send python-chinese在lists.python.cn
> Subscribe: send subscribe to python-chinese-request在lists.python.cn
> Unsubscribe: send unsubscribe to  python-chinese-request在lists.python.cn
> Detail Info: http://python.cn/mailman/listinfo/python-chinese

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年12月22日 星期五 13:50

IQDoctor huanghao.c在gmail.com
星期五 十二月 22 13:50:00 HKT 2006

shhgs 写道:
> 一般情况下,PID是标准做法。但是要做到万无一失,确实很难。
>
> 读进程表没有办法保证racing。
>
> 进程一读进程表,发现没有进程,但是在它读完进程表之后,启动进程之前,进程二插了进来。请问这个怎么解决?
>   
嗯, 读进程表确实也不完美.

PID 方法还是最好的. PID 方法的问题是担心有人会删了 PID 文件, 只要解决这 
个问题就可以了.

默认的 umask 是不允许非 owner 和 ROOT 以外的人删除你的 PID 的.
那么有两种可能你的 PID 被删除:
1. 你进程本身无故删除 PID, 那就是 BUG 了
2. ROOT无故删除你的 PID 文件, 这种情况不大需要考虑吧, 那通常是 ROOT 有病.

如果你的进程永远是作为 ROOT 跑的, 那就简单了, 为了担心 ROOT 误删除 PID 
文件, 可以在建立
PID 文件时候, 立即 chattr +i prog.pid, 这样 ROOT 误操作都删除不掉 
prog.pid 了.
>  
>
>
> On 12/22/06, IQDoctor <huanghao.c at gmail.com> wrote:
>   
>> socket 一样可以被终止掉的.
>>
>> 只要想破坏的人具有 ROOT 身份, 你在系统里做的任何 "记号" 都不是万
>> 无一失的(包括 SOCKET)
>>
>> 另外, 还有一种幄挫办法是取进程列表, 然后比较, 这个办法好处是
>> 连 ROOT 都无法作假.
>>
>> shhgs 写道:
>>     
>>> PID的办法并不是万无一失的。
>>>
>>> 第一,如果有人把你的PID文件删了,该怎么办?
>>>
>>> 第二,如果你的程序意外退出了,且退出的时候,没有删PID文件,该怎么办?
>>>
>>> 这个问题看上去简单,但真的要做好却很难。
>>>
>>> On 12/21/06, IQDoctor <huanghao.c at gmail.com> wrote:
>>>
>>>       
>>>> 第一次运行, 将 PID 写进文件, 例如: /var/run/yourprog.pid
>>>> 下次运行时检查该文件, 如果正在运行中就 exit..
>>>>
>>>> ray zhenlin 写道:
>>>>
>>>>         
>>>>> 最近使用Python写了个程序,但需要防止这个程序被同时运行2次,请问有什么
>>>>> 办法来检查?
>>>>> ------------------------------------------------------------------------
>>>>>
>>>>> _______________________________________________
>>>>> python-chinese
>>>>> Post: send python-chinese at lists.python.cn
>>>>> Subscribe: send subscribe to python-chinese-request at lists.python.cn
>>>>> Unsubscribe: send unsubscribe to  python-chinese-request at lists.python.cn
>>>>> Detail Info: http://python.cn/mailman/listinfo/python-chinese
>>>>>
>>>>>           
>>>> _______________________________________________
>>>> python-chinese
>>>> Post: send python-chinese at lists.python.cn
>>>> Subscribe: send subscribe to python-chinese-request at lists.python.cn
>>>> Unsubscribe: send unsubscribe to  python-chinese-request at lists.python.cn
>>>> Detail Info: http://python.cn/mailman/listinfo/python-chinese
>>>>
>>>>         
>>> _______________________________________________
>>> python-chinese
>>> Post: send python-chinese at lists.python.cn
>>> Subscribe: send subscribe to python-chinese-request at lists.python.cn
>>> Unsubscribe: send unsubscribe to  python-chinese-request at lists.python.cn
>>> Detail Info: http://python.cn/mailman/listinfo/python-chinese
>>>       
>> _______________________________________________
>> python-chinese
>> Post: send python-chinese at lists.python.cn
>> Subscribe: send subscribe to python-chinese-request at lists.python.cn
>> Unsubscribe: send unsubscribe to  python-chinese-request at lists.python.cn
>> Detail Info: http://python.cn/mailman/listinfo/python-chinese
>>     
> _______________________________________________
> python-chinese
> Post: send python-chinese at lists.python.cn
> Subscribe: send subscribe to python-chinese-request at lists.python.cn
> Unsubscribe: send unsubscribe to  python-chinese-request at lists.python.cn
> Detail Info: http://python.cn/mailman/listinfo/python-chinese


[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年12月22日 星期五 13:50

IQDoctor huanghao.c在gmail.com
星期五 十二月 22 13:50:31 HKT 2006

shhgs 写道:
> 一般情况下,PID是标准做法。但是要做到万无一失,确实很难。
>
> 读进程表没有办法保证racing。
>
> 进程一读进程表,发现没有进程,但是在它读完进程表之后,启动进程之前,进程二插了进来。请问这个怎么解决?
>   
嗯, 读进程表确实也不完美.

PID 方法还是最好的. PID 方法的问题是担心有人会删了 PID 文件, 只要解决这 
个问题就可以了.

默认的 umask 是不允许非 owner 和 ROOT 以外的人删除你的 PID 文件的.
那么有两种可能你的 PID 被删除:
1. 你进程本身无故删除 PID, 那就是 BUG 了
2. ROOT无故删除你的 PID 文件, 这种情况不大需要考虑吧, 那通常是 ROOT 有病.

如果你的进程永远是作为 ROOT 跑的, 那就简单了, 为了担心 ROOT 误删除 PID 
文件, 可以在建立
PID 文件时候, 立即 chattr +i prog.pid, 这样 ROOT 误操作都删除不掉 
prog.pid 了.
>  
>
>
> On 12/22/06, IQDoctor <huanghao.c at gmail.com> wrote:
>   
>> socket 一样可以被终止掉的.
>>
>> 只要想破坏的人具有 ROOT 身份, 你在系统里做的任何 "记号" 都不是万
>> 无一失的(包括 SOCKET)
>>
>> 另外, 还有一种幄挫办法是取进程列表, 然后比较, 这个办法好处是
>> 连 ROOT 都无法作假.
>>
>> shhgs 写道:
>>     
>>> PID的办法并不是万无一失的。
>>>
>>> 第一,如果有人把你的PID文件删了,该怎么办?
>>>
>>> 第二,如果你的程序意外退出了,且退出的时候,没有删PID文件,该怎么办?
>>>
>>> 这个问题看上去简单,但真的要做好却很难。
>>>
>>> On 12/21/06, IQDoctor <huanghao.c at gmail.com> wrote:
>>>
>>>       
>>>> 第一次运行, 将 PID 写进文件, 例如: /var/run/yourprog.pid
>>>> 下次运行时检查该文件, 如果正在运行中就 exit..
>>>>
>>>> ray zhenlin 写道:
>>>>
>>>>         
>>>>> 最近使用Python写了个程序,但需要防止这个程序被同时运行2次,请问有什么
>>>>> 办法来检查?
>>>>> ------------------------------------------------------------------------
>>>>>
>>>>> _______________________________________________
>>>>> python-chinese
>>>>> Post: send python-chinese at lists.python.cn
>>>>> Subscribe: send subscribe to python-chinese-request at lists.python.cn
>>>>> Unsubscribe: send unsubscribe to  python-chinese-request at lists.python.cn
>>>>> Detail Info: http://python.cn/mailman/listinfo/python-chinese
>>>>>
>>>>>           
>>>> _______________________________________________
>>>> python-chinese
>>>> Post: send python-chinese at lists.python.cn
>>>> Subscribe: send subscribe to python-chinese-request at lists.python.cn
>>>> Unsubscribe: send unsubscribe to  python-chinese-request at lists.python.cn
>>>> Detail Info: http://python.cn/mailman/listinfo/python-chinese
>>>>
>>>>         
>>> _______________________________________________
>>> python-chinese
>>> Post: send python-chinese at lists.python.cn
>>> Subscribe: send subscribe to python-chinese-request at lists.python.cn
>>> Unsubscribe: send unsubscribe to  python-chinese-request at lists.python.cn
>>> Detail Info: http://python.cn/mailman/listinfo/python-chinese
>>>       
>> _______________________________________________
>> python-chinese
>> Post: send python-chinese at lists.python.cn
>> Subscribe: send subscribe to python-chinese-request at lists.python.cn
>> Unsubscribe: send unsubscribe to  python-chinese-request at lists.python.cn
>> Detail Info: http://python.cn/mailman/listinfo/python-chinese
>>     
> _______________________________________________
> python-chinese
> Post: send python-chinese at lists.python.cn
> Subscribe: send subscribe to python-chinese-request at lists.python.cn
> Unsubscribe: send unsubscribe to  python-chinese-request at lists.python.cn
> Detail Info: http://python.cn/mailman/listinfo/python-chinese


[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年12月22日 星期五 13:52

shhgs shhgs.efhilt在gmail.com
星期五 十二月 22 13:52:47 HKT 2006

pid的麻烦在于,程序如果不正常退出,没有删掉PID文件,那该怎么办。

On 12/22/06, IQDoctor <huanghao.c在gmail.com> wrote:
> shhgs 写道:
> > 一般情况下,PID是标准做法。但是要做到万无一失,确实很难。
> >
> > 读进程表没有办法保证racing。
> >
> > 进程一读进程表,发现没有进程,但是在它读完进程表之后,启动进程之前,进程二插了进来。请问这个怎么解决?
> >
> 嗯, 读进程表确实也不完美.
>
> PID 方法还是最好的. PID 方法的问题是担心有人会删了 PID 文件, 只要解决这
> 个问题就可以了.
>
> 默认的 umask 是不允许非 owner 和 ROOT 以外的人删除你的 PID 的.
> 那么有两种可能你的 PID 被删除:
> 1. 你进程本身无故删除 PID, 那就是 BUG 了
> 2. ROOT无故删除你的 PID 文件, 这种情况不大需要考虑吧, 那通常是 ROOT 有病.
>
> 如果你的进程永远是作为 ROOT 跑的, 那就简单了, 为了担心 ROOT 误删除 PID
> 文件, 可以在建立
> PID 文件时候, 立即 chattr +i prog.pid, 这样 ROOT 误操作都删除不掉
> prog.pid 了.
> >
> >
> >
> > On 12/22/06, IQDoctor <huanghao.c在gmail.com> wrote:
> >
> >> socket 一样可以被终止掉的.
> >>
> >> 只要想破坏的人具有 ROOT 身份, 你在系统里做的任何 "记号" 都不是万
> >> 无一失的(包括 SOCKET)
> >>
> >> 另外, 还有一种幄挫办法是取进程列表, 然后比较, 这个办法好处是
> >> 连 ROOT 都无法作假.
> >>
> >> shhgs 写道:
> >>
> >>> PID的办法并不是万无一失的。
> >>>
> >>> 第一,如果有人把你的PID文件删了,该怎么办?
> >>>
> >>> 第二,如果你的程序意外退出了,且退出的时候,没有删PID文件,该怎么办?
> >>>
> >>> 这个问题看上去简单,但真的要做好却很难。
> >>>
> >>> On 12/21/06, IQDoctor <huanghao.c在gmail.com> wrote:
> >>>
> >>>
> >>>> 第一次运行, 将 PID 写进文件, 例如: /var/run/yourprog.pid
> >>>> 下次运行时检查该文件, 如果正在运行中就 exit..
> >>>>
> >>>> ray zhenlin 写道:
> >>>>
> >>>>
> >>>>> 最近使用Python写了个程序,但需要防止这个程序被同时运行2次,请问有什么
> >>>>> 办法来检查?
> >>>>> ------------------------------------------------------------------------
> >>>>>
> >>>>> _______________________________________________
> >>>>> python-chinese
> >>>>> Post: send python-chinese在lists.python.cn
> >>>>> Subscribe: send subscribe to python-chinese-request在lists.python.cn
> >>>>> Unsubscribe: send unsubscribe to  python-chinese-request在lists.python.cn
> >>>>> Detail Info: http://python.cn/mailman/listinfo/python-chinese
> >>>>>
> >>>>>
> >>>> _______________________________________________
> >>>> python-chinese
> >>>> Post: send python-chinese在lists.python.cn
> >>>> Subscribe: send subscribe to python-chinese-request在lists.python.cn
> >>>> Unsubscribe: send unsubscribe to  python-chinese-request在lists.python.cn
> >>>> Detail Info: http://python.cn/mailman/listinfo/python-chinese
> >>>>
> >>>>
> >>> _______________________________________________
> >>> python-chinese
> >>> Post: send python-chinese在lists.python.cn
> >>> Subscribe: send subscribe to python-chinese-request在lists.python.cn
> >>> Unsubscribe: send unsubscribe to  python-chinese-request在lists.python.cn
> >>> Detail Info: http://python.cn/mailman/listinfo/python-chinese
> >>>
> >> _______________________________________________
> >> python-chinese
> >> Post: send python-chinese在lists.python.cn
> >> Subscribe: send subscribe to python-chinese-request在lists.python.cn
> >> Unsubscribe: send unsubscribe to  python-chinese-request在lists.python.cn
> >> Detail Info: http://python.cn/mailman/listinfo/python-chinese
> >>
> > _______________________________________________
> > python-chinese
> > Post: send python-chinese在lists.python.cn
> > Subscribe: send subscribe to python-chinese-request在lists.python.cn
> > Unsubscribe: send unsubscribe to  python-chinese-request在lists.python.cn
> > Detail Info: http://python.cn/mailman/listinfo/python-chinese
>
> _______________________________________________
> python-chinese
> Post: send python-chinese在lists.python.cn
> Subscribe: send subscribe to python-chinese-request在lists.python.cn
> Unsubscribe: send unsubscribe to  python-chinese-request在lists.python.cn
> Detail Info: http://python.cn/mailman/listinfo/python-chinese

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年12月22日 星期五 14:44

IQDoctor huanghao.c在gmail.com
星期五 十二月 22 14:44:28 HKT 2006

当上一次进程非正常退出, 没删除掉 PID, 那么下一个进程启动的时候, 读进该 
PID文件,
取得 PID 文件里的PID, 然后取所有进程列表PID, 看进程列表里是否有该 PID, 
如果没有,
就代表上个进程已经不再运行, 并运行自己, 把自己的 PID 更新到该文件里头.


shhgs 写道:
> pid的麻烦在于,程序如果不正常退出,没有删掉PID文件,那该怎么办。
>
> On 12/22/06, IQDoctor <huanghao.c at gmail.com> wrote:
>   
>> shhgs 写道:
>>     
>>> 一般情况下,PID是标准做法。但是要做到万无一失,确实很难。
>>>
>>> 读进程表没有办法保证racing。
>>>
>>> 进程一读进程表,发现没有进程,但是在它读完进程表之后,启动进程之前,进程二插了进来。请问这个怎么解决?
>>>
>>>       
>> 嗯, 读进程表确实也不完美.
>>
>> PID 方法还是最好的. PID 方法的问题是担心有人会删了 PID 文件, 只要解决这
>> 个问题就可以了.
>>
>> 默认的 umask 是不允许非 owner 和 ROOT 以外的人删除你的 PID 的.
>> 那么有两种可能你的 PID 被删除:
>> 1. 你进程本身无故删除 PID, 那就是 BUG 了
>> 2. ROOT无故删除你的 PID 文件, 这种情况不大需要考虑吧, 那通常是 ROOT 有病.
>>
>> 如果你的进程永远是作为 ROOT 跑的, 那就简单了, 为了担心 ROOT 误删除 PID
>> 文件, 可以在建立
>> PID 文件时候, 立即 chattr +i prog.pid, 这样 ROOT 误操作都删除不掉
>> prog.pid 了.
>>     
>>>
>>> On 12/22/06, IQDoctor <huanghao.c at gmail.com> wrote:
>>>
>>>       
>>>> socket 一样可以被终止掉的.
>>>>
>>>> 只要想破坏的人具有 ROOT 身份, 你在系统里做的任何 "记号" 都不是万
>>>> 无一失的(包括 SOCKET)
>>>>
>>>> 另外, 还有一种幄挫办法是取进程列表, 然后比较, 这个办法好处是
>>>> 连 ROOT 都无法作假.
>>>>
>>>> shhgs 写道:
>>>>
>>>>         
>>>>> PID的办法并不是万无一失的。
>>>>>
>>>>> 第一,如果有人把你的PID文件删了,该怎么办?
>>>>>
>>>>> 第二,如果你的程序意外退出了,且退出的时候,没有删PID文件,该怎么办?
>>>>>
>>>>> 这个问题看上去简单,但真的要做好却很难。
>>>>>
>>>>> On 12/21/06, IQDoctor <huanghao.c at gmail.com> wrote:
>>>>>
>>>>>
>>>>>           
>>>>>> 第一次运行, 将 PID 写进文件, 例如: /var/run/yourprog.pid
>>>>>> 下次运行时检查该文件, 如果正在运行中就 exit..
>>>>>>
>>>>>> ray zhenlin 写道:
>>>>>>
>>>>>>
>>>>>>             
>>>>>>> 最近使用Python写了个程序,但需要防止这个程序被同时运行2次,请问有什么
>>>>>>> 办法来检查?
>>>>>>> ------------------------------------------------------------------------
>>>>>>>
>>>>>>> _______________________________________________
>>>>>>> python-chinese
>>>>>>> Post: send python-chinese at lists.python.cn
>>>>>>> Subscribe: send subscribe to python-chinese-request at lists.python.cn
>>>>>>> Unsubscribe: send unsubscribe to  python-chinese-request at lists.python.cn
>>>>>>> Detail Info: http://python.cn/mailman/listinfo/python-chinese
>>>>>>>
>>>>>>>
>>>>>>>               
>>>>>> _______________________________________________
>>>>>> python-chinese
>>>>>> Post: send python-chinese at lists.python.cn
>>>>>> Subscribe: send subscribe to python-chinese-request at lists.python.cn
>>>>>> Unsubscribe: send unsubscribe to  python-chinese-request at lists.python.cn
>>>>>> Detail Info: http://python.cn/mailman/listinfo/python-chinese
>>>>>>
>>>>>>
>>>>>>             
>>>>> _______________________________________________
>>>>> python-chinese
>>>>> Post: send python-chinese at lists.python.cn
>>>>> Subscribe: send subscribe to python-chinese-request at lists.python.cn
>>>>> Unsubscribe: send unsubscribe to  python-chinese-request at lists.python.cn
>>>>> Detail Info: http://python.cn/mailman/listinfo/python-chinese
>>>>>
>>>>>           
>>>> _______________________________________________
>>>> python-chinese
>>>> Post: send python-chinese at lists.python.cn
>>>> Subscribe: send subscribe to python-chinese-request at lists.python.cn
>>>> Unsubscribe: send unsubscribe to  python-chinese-request at lists.python.cn
>>>> Detail Info: http://python.cn/mailman/listinfo/python-chinese
>>>>
>>>>         
>>> _______________________________________________
>>> python-chinese
>>> Post: send python-chinese at lists.python.cn
>>> Subscribe: send subscribe to python-chinese-request at lists.python.cn
>>> Unsubscribe: send unsubscribe to  python-chinese-request at lists.python.cn
>>> Detail Info: http://python.cn/mailman/listinfo/python-chinese
>>>       
>> _______________________________________________
>> python-chinese
>> Post: send python-chinese at lists.python.cn
>> Subscribe: send subscribe to python-chinese-request at lists.python.cn
>> Unsubscribe: send unsubscribe to  python-chinese-request at lists.python.cn
>> Detail Info: http://python.cn/mailman/listinfo/python-chinese
>>     
> _______________________________________________
> python-chinese
> Post: send python-chinese at lists.python.cn
> Subscribe: send subscribe to python-chinese-request at lists.python.cn
> Unsubscribe: send unsubscribe to  python-chinese-request at lists.python.cn
> Detail Info: http://python.cn/mailman/listinfo/python-chinese


[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年12月23日 星期六 11:46

shhgs shhgs.efhilt在gmail.com
星期六 十二月 23 11:46:57 HKT 2006

还是有racing

你读完PID,发现有进程,但是检查ps的时候,进程退出了,于是你启动进程。但是你怎么保证在你启动进程之前,没有其他进程启动?

其实建PID的时候本身就有racing的问题。两个进程,第一个检查完PID文件之后被挂起来了,第二个进程进来发现没有PID文件,于是启动。等第二个进程启动完毕之后,第一个进程继续。

如果一般用用,PID就可以了,但是真的要做到在高负载环境下的万无一失,很难,很难。


On 12/22/06, IQDoctor <huanghao.c在gmail.com> wrote:
> 当上一次进程非正常退出, 没删除掉 PID, 那么下一个进程启动的时候, 读进该
> PID文件,
> 取得 PID 文件里的PID, 然后取所有进程列表PID, 看进程列表里是否有该 PID,
> 如果没有,
> 就代表上个进程已经不再运行, 并运行自己, 把自己的 PID 更新到该文件里头.
>
>
> shhgs 写道:
> > pid的麻烦在于,程序如果不正常退出,没有删掉PID文件,那该怎么办。
> >
> > On 12/22/06, IQDoctor <huanghao.c在gmail.com> wrote:
> >
> >> shhgs 写道:
> >>
> >>> 一般情况下,PID是标准做法。但是要做到万无一失,确实很难。
> >>>
> >>> 读进程表没有办法保证racing。
> >>>
> >>> 进程一读进程表,发现没有进程,但是在它读完进程表之后,启动进程之前,进程二插了进来。请问这个怎么解决?
> >>>
> >>>
> >> 嗯, 读进程表确实也不完美.
> >>
> >> PID 方法还是最好的. PID 方法的问题是担心有人会删了 PID 文件, 只要解决这
> >> 个问题就可以了.
> >>
> >> 默认的 umask 是不允许非 owner 和 ROOT 以外的人删除你的 PID 的.
> >> 那么有两种可能你的 PID 被删除:
> >> 1. 你进程本身无故删除 PID, 那就是 BUG 了
> >> 2. ROOT无故删除你的 PID 文件, 这种情况不大需要考虑吧, 那通常是 ROOT 有病.
> >>
> >> 如果你的进程永远是作为 ROOT 跑的, 那就简单了, 为了担心 ROOT 误删除 PID
> >> 文件, 可以在建立
> >> PID 文件时候, 立即 chattr +i prog.pid, 这样 ROOT 误操作都删除不掉
> >> prog.pid 了.
> >>
> >>>
> >>> On 12/22/06, IQDoctor <huanghao.c在gmail.com> wrote:
> >>>
> >>>
> >>>> socket 一样可以被终止掉的.
> >>>>
> >>>> 只要想破坏的人具有 ROOT 身份, 你在系统里做的任何 "记号" 都不是万
> >>>> 无一失的(包括 SOCKET)
> >>>>
> >>>> 另外, 还有一种幄挫办法是取进程列表, 然后比较, 这个办法好处是
> >>>> 连 ROOT 都无法作假.
> >>>>
> >>>> shhgs 写道:
> >>>>
> >>>>
> >>>>> PID的办法并不是万无一失的。
> >>>>>
> >>>>> 第一,如果有人把你的PID文件删了,该怎么办?
> >>>>>
> >>>>> 第二,如果你的程序意外退出了,且退出的时候,没有删PID文件,该怎么办?
> >>>>>
> >>>>> 这个问题看上去简单,但真的要做好却很难。
> >>>>>
> >>>>> On 12/21/06, IQDoctor <huanghao.c在gmail.com> wrote:
> >>>>>
> >>>>>
> >>>>>
> >>>>>> 第一次运行, 将 PID 写进文件, 例如: /var/run/yourprog.pid
> >>>>>> 下次运行时检查该文件, 如果正在运行中就 exit..
> >>>>>>
> >>>>>> ray zhenlin 写道:
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>>> 最近使用Python写了个程序,但需要防止这个程序被同时运行2次,请问有什么
> >>>>>>> 办法来检查?
> >>>>>>> ------------------------------------------------------------------------
> >>>>>>>
> >>>>>>> _______________________________________________
> >>>>>>> python-chinese
> >>>>>>> Post: send python-chinese在lists.python.cn
> >>>>>>> Subscribe: send subscribe to python-chinese-request在lists.python.cn
> >>>>>>> Unsubscribe: send unsubscribe to  python-chinese-request在lists.python.cn
> >>>>>>> Detail Info: http://python.cn/mailman/listinfo/python-chinese
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>> _______________________________________________
> >>>>>> python-chinese
> >>>>>> Post: send python-chinese在lists.python.cn
> >>>>>> Subscribe: send subscribe to python-chinese-request在lists.python.cn
> >>>>>> Unsubscribe: send unsubscribe to  python-chinese-request在lists.python.cn
> >>>>>> Detail Info: http://python.cn/mailman/listinfo/python-chinese
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>> _______________________________________________
> >>>>> python-chinese
> >>>>> Post: send python-chinese在lists.python.cn
> >>>>> Subscribe: send subscribe to python-chinese-request在lists.python.cn
> >>>>> Unsubscribe: send unsubscribe to  python-chinese-request在lists.python.cn
> >>>>> Detail Info: http://python.cn/mailman/listinfo/python-chinese
> >>>>>
> >>>>>
> >>>> _______________________________________________
> >>>> python-chinese
> >>>> Post: send python-chinese在lists.python.cn
> >>>> Subscribe: send subscribe to python-chinese-request在lists.python.cn
> >>>> Unsubscribe: send unsubscribe to  python-chinese-request在lists.python.cn
> >>>> Detail Info: http://python.cn/mailman/listinfo/python-chinese
> >>>>
> >>>>
> >>> _______________________________________________
> >>> python-chinese
> >>> Post: send python-chinese在lists.python.cn
> >>> Subscribe: send subscribe to python-chinese-request在lists.python.cn
> >>> Unsubscribe: send unsubscribe to  python-chinese-request在lists.python.cn
> >>> Detail Info: http://python.cn/mailman/listinfo/python-chinese
> >>>
> >> _______________________________________________
> >> python-chinese
> >> Post: send python-chinese在lists.python.cn
> >> Subscribe: send subscribe to python-chinese-request在lists.python.cn
> >> Unsubscribe: send unsubscribe to  python-chinese-request在lists.python.cn
> >> Detail Info: http://python.cn/mailman/listinfo/python-chinese
> >>
> > _______________________________________________
> > python-chinese
> > Post: send python-chinese在lists.python.cn
> > Subscribe: send subscribe to python-chinese-request在lists.python.cn
> > Unsubscribe: send unsubscribe to  python-chinese-request在lists.python.cn
> > Detail Info: http://python.cn/mailman/listinfo/python-chinese
>
> _______________________________________________
> python-chinese
> Post: send python-chinese在lists.python.cn
> Subscribe: send subscribe to python-chinese-request在lists.python.cn
> Unsubscribe: send unsubscribe to  python-chinese-request在lists.python.cn
> Detail Info: http://python.cn/mailman/listinfo/python-chinese

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2025

    京ICP备05028076号