[Twisted-web] spawning a xvfb and firefox with a timeout
Stephan
schenette at gmail.com
Mon Aug 22 05:16:21 EDT 2011
Jean-Paul,
adding
env=os.environ to spanProcess fixed the issue, thank you.
There is still one problem I brought up that I'm attempting to figure
out with twisted that is related to the initial question...
current status is that now with the addition of setting the env params
xvfb starts up correctly and starts up firefox.
the ProcessProtocol object that I created, has a calllater function
that kills the process after 20seconds.
the issue is that xvfb has one process id and any process it's asked
to create will cause another process to be spawned, thus another
process id, where the parent process is that of xvfb.
when I issue the kill command, xvfb does indeed die, but firefox-bin
stays around and it's parent is set to 1.
here is the ProcessProtocol code, should I be killing the parent
process differently so that the children die as well?
33 class TimedProcessProtocol(protocol.ProcessProtocol):
34
35 def __init__(self, timeout):
36 self.timeout = timeout
37
38 def connectionMade(self):
39 logging.debug("connection made timeout = %d", self.timeout)
40 @defer.inlineCallbacks
41 def killIfAlive():
42 logging.debug("timeout reached - killing process")
43 try:
44 yield self.transport.signalProcess('TERM')
45 except error.ProcessExitedAlready:
46 logging.debug("process already exited")
47 pass
48
49 d = reactor.callLater(self.timeout, killIfAlive)
50
51 def outReceived(self, data):
52 logging.debug("output: %s", data)
Stephan
ps both TERM and KILL act the same way
On Sat, Aug 20, 2011 at 2:01 PM, <exarkun at twistedmatrix.com> wrote:
> On 19 Aug, 04:42 am, schenette at gmail.com wrote:
>>I'm attempting to spawn xvfb with firefox using twisted's spawnProcess.
>>
>>I'm having two issues:
>>
>>1) when I call a normal process (not xvfb) it seems to
>>work, but when I call xvfb the process goes defunct
>>
>>2) perhaps because it goes defunct but the timeout I set in place in
>>the processprotocol does
>>not trigger.
>>
>>==============
>>here is the code for spawning a process
>>==============
>>108 command = ["/usr/bin/xvfb-run", "--auto-servernum",
>>"/usr/bin/firefox", "-P", profile_id]
>>109 subprocess = reactor.spawnProcess(TimedProcessProtocol(20),
>>110 command[0], command)
>
>
> Does it make any difference if you pass on the parent's environment to
> the xvfb-run process? Try something like spawnProcess(...,
> env=os.environ)
>
> Jean-Paul
>
> _______________________________________________
> Twisted-web mailing list
> Twisted-web at twistedmatrix.com
> http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-web
>
More information about the Twisted-web
mailing list