Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.python > #5971

Re: how to get PID from subprocess library

References <ir3eu1$kgq$1@speranza.aioe.org> <mailman.1872.1305955023.9059.python-list@python.org> <ir8cfj$2s4$1@speranza.aioe.org>
From Kushal Kumaran <kushal.kumaran+python@gmail.com>
Date 2011-05-22 15:34 +0530
Subject Re: how to get PID from subprocess library
Newsgroups comp.lang.python
Message-ID <mailman.1912.1306058670.9059.python-list@python.org> (permalink)

Show all headers | View raw


On Sat, May 21, 2011 at 6:20 PM, TheSaint <nobody@nowhere.net.no> wrote:
> Kushal Kumaran wrote:
>
>> That's how it is able to give you the status.  So, if you
>> are using getstatusoutput, you will have only one instance of your
>> command running.
>
> My intent is to launch only one program instance, which will goes as daemon.
> To avoid a second call I'd like rather to use Python than
> ==============================code=========================================
>    def start(self):
>        '''try to start aria2c as a daemon and return its handle to where it
> can
>        proceed to issue commands'''
>
>        # aria2c is running, then don't try it again
>        if (chkout('ps -A |grep aria2c')[0] > 0):
>            try:
>                chkout(self.ARIA_CMD)
>            except:
>                raise SystemExit('aria2c is not working as deamon')
>        elif self.handle: return self.handle
>        # everything is good, it will return an handle
>        self.handle= \
>        xmlrpclib.ServerProxy('http://localhost:%s/rpc' %int(self.numport))
>        return self.handle
> ==============================code=========================================
>
> Here I've named subprocess.getstatusoutput as chkout, I'm calling 2 more
> programs to find whether there's a running instance of aria2c. I think it's
> not nice, python libraries should get the matter done.
>

Unfortunately, because of the way daemons work, you will not be able
to do this (there's some trickery with ptrace and similar tools, but
surely there must be simpler ways for you).

Here's a very simplified view of a typical daemon's startup:

- your process (let's call it pid1) starts a program which says it
will daemonize (let's call it pid2).

- pid2 forks an additional process (pid3), then pid2 exits

- pid1 gets the exit status of its own child (pid2)

Accordingly, even if you get a PID, it will only be pid2, which is not
the PID of the daemon process.  You will need some other way of
getting at the daemon's PID.

You could look for a way to make aria2c not become a daemon and use
subprocess.Popen to start it.  That gives you the PID and ways to see
if the process is still running.

-- 
regards,
kushal

Back to comp.lang.python | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

how to get PID from subprocess library TheSaint <nobody@nowhere.net.no> - 2011-05-20 00:02 +0800
  Re: how to get PID from subprocess library Kushal Kumaran <kushal.kumaran+python@gmail.com> - 2011-05-21 10:46 +0530
    Re: how to get PID from subprocess library TheSaint <nobody@nowhere.net.no> - 2011-05-21 20:50 +0800
      Re: how to get PID from subprocess library Kushal Kumaran <kushal.kumaran+python@gmail.com> - 2011-05-22 15:34 +0530
        Re: how to get PID from subprocess library TheSaint <nobody@nowhere.net.no> - 2011-05-22 21:41 +0800
          Re: how to get PID from subprocess library GMail Felipe <felipe.vinturini@gmail.com> - 2011-05-22 12:45 -0300
            Re: how to get PID from subprocess library TheSaint <nobody@nowhere.net.no> - 2011-05-23 19:06 +0800
      Re: how to get PID from subprocess library Anssi Saari <as@sci.fi> - 2011-05-24 13:45 +0300
        Re: how to get PID from subprocess library TheSaint <nobody@nowhere.net.no> - 2011-05-24 21:36 +0800

csiph-web