2006年12月21日 星期四 16:27
×î½üʹÓÃPythonдÁ˸ö³ÌÐò£¬µ«ÐèÒª·ÀÖ¹Õâ¸ö³ÌÐò±»Í¬Ê±ÔËÐÐ2´Î£¬ÇëÎÊÓÐʲô°ì·¨À´¼ì²é£¿ -------------- 下一部分 -------------- Ò»¸öHTML¸½¼þ±»ÒƳý... URL: http://python.cn/pipermail/python-chinese/attachments/20061221/4fc70c40/attachment.htm
2006年12月21日 星期四 16:42
第一次运行, 将 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
2006年12月21日 星期四 16:44
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 >> > > >
2006年12月21日 星期四 17:15
ÔÚ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
2006年12月21日 星期四 20:11
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
2006年12月21日 星期四 20:14
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
2006年12月21日 星期四 20:22
> 我使用socket主要不仅是为了实现判断是否已经有实例,同时是为了实现DDE(动态数据交换),在启动第二个实例时,当命令行参数传给第一个实例,而且为了跨平台,所以使用了socket来做。如果只是判断重复,则不必如此麻烦。 > 是这样啊,有什么好的办法能够在不同的系统平台上都能用呢? -- 武长斌 chbin.w at gmail.com
2006年12月22日 星期五 06:19
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
2006年12月22日 星期五 12:12
用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
2006年12月22日 星期五 12:16
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
2006年12月22日 星期五 12:20
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
2006年12月22日 星期五 13:12
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
2006年12月22日 星期五 13:17
ÎÒÔÚ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
2006年12月22日 星期五 13:17
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
2006年12月22日 星期五 13:22
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
2006年12月22日 星期五 13:25
一般情况下,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
2006年12月22日 星期五 13:50
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
2006年12月22日 星期五 13:50
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
2006年12月22日 星期五 13:52
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
2006年12月22日 星期五 14:44
当上一次进程非正常退出, 没删除掉 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
2006年12月23日 星期六 11:46
还是有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
Zeuux © 2025
京ICP备05028076号