[Twisted-web] spawning a xvfb and firefox with a timeout

Stephan schenette at gmail.com
Mon Aug 22 12:32:55 EDT 2011


I think I might have figured out that you have to add usePTY=1 to
associate the process group, so that the children will be killed when
the parent process is killed.
e.g.
subprocess = reactor.spawnProcess(self.pp, args[0], args, env = os.e
 nviron, usePTY=1)

but I tried to separate out the killing in another process and now the
new method isnt' called.
are ProcessProtocol classes allowed to have other methods added to it
for calling?

 45     def killProcessIfAlive(self):
 46         logging.debug("killProcessIfAlive called")
 47         try:
 48             yield self.transport.signalProcess('KILL')
 49         except error.ProcessExitedAlready:
 50             logging.debug("process already exited")
 51             pass
 52
 53     def connectionMade(self):
 54         logging.debug("connection made timeout = %d", self.timeout)
 55         @defer.inlineCallbacks
 56         def onTimer():
 57             logging.debug("timeout triggered")
 58             self.killProcessIfAlive()
 59         d = reactor.callLater(self.timeout, onTimer)

On Mon, Aug 22, 2011 at 2:16 AM, Stephan <schenette at gmail.com> wrote:
> 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