My PyLucene app freezes when run as a daemon

David Daney ddaney@avtrex.com
Fri Mar 23 22:23:00 GMT 2007


Ofer Nave wrote:
> Sorry, I should stated this explicitly:
>> I am running on linux 2.6.9.
>
The version does not really matter. You cannot call fork from within a 
libgcj based application and use it for much of anything other than exec.
If you want to daemonize, you should do it before calling Jv_RunMain.
David Daney
> -ofer 
>>> -----Original Message-----
>> From: java-owner@gcc.gnu.org [mailto:java-owner@gcc.gnu.org] 
>> On Behalf Of Ofer Nave
>> Sent: Friday, March 23, 2007 2:24 PM
>> To: java@gcc.gnu.org
>> Subject: My PyLucene app freezes when run as a daemon
>>>> This might be a bit off the usual topic range here, but I was 
>> pointed to this list.
>>>> Background:
>>>> PyLucene is a GCJ-compiled version of Java Lucene integrated 
>> with Python.
>> http://pylucene.osafoundation.org/
>>>> Context:
>>>> I have a PyLucene searcher application running under a 
>> multithreaded python web server called Paste 
>> (http://pythonpaste.org). I've added a command-line argument 
>> to my script to run the script as a daemon based on the code 
>> in this article: 
>> http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/278731
>>>> Problem:
>>>> When the script is run as a normal process, it works fine. 
>> When it is run as a daemon, it freezes after about a dozen 
>> requests. The point it's freezing at is in a call to a class 
>> that is known to not be thread-safe, so that might be the 
>> problem - but on the other hand, the only difference between 
>> the good and bad scenarios is whether it's running as a 
>> daemon, so I tend to lean towards that as my top clue.
>>>> How I Got Here:
>>>> I posted this to the PyLucene list, and was told: "You might 
>> want to ask java@gcc.gnu.org about daemonizing a process 
>> using libgcj and boehm-gc." So I'm giving it a shot. Does 
>> anyone have wisdom on the care and feeding of daemonized 
>> processes built with GCJ? Is there anything special I need 
>> to know about?
>>>> Appendix 1 - My daemonize() Function:
>>>> # call to detach yourself from a terminal def daemonize(logfile=None):
>> # fork twice to sever any ties
>> _fork()
>> os.setsid()
>> _fork()
>> os.chdir(WORKDIR)
>> os.umask(UMASK)
>>>> # close standard I/O channels
>> os.close(0) # stdin
>> os.close(1) # stdout
>> os.close(2) # stderr
>>>> # redirect standard output channels to logfile
>> if logfile:
>> sys.stdout = sys.stderr = logfile
>>>> # set up SIGTERM handler for cleanup
>> signal(SIGTERM, _sigterm_handler)
>>>> -ofer
>>>


More information about the Java mailing list

AltStyle によって変換されたページ (->オリジナル) /