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


Groups > comp.lang.python > #5777 > unrolled thread

how to get PID from subprocess library

Started byTheSaint <nobody@nowhere.net.no>
First post2011-05-20 00:02 +0800
Last post2011-05-24 21:36 +0800
Articles 9 — 4 participants

Back to article view | Back to comp.lang.python


Contents

  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

#5777 — how to get PID from subprocess library

FromTheSaint <nobody@nowhere.net.no>
Date2011-05-20 00:02 +0800
Subjecthow to get PID from subprocess library
Message-ID<ir3eu1$kgq$1@speranza.aioe.org>
hello,

I'm using to launch a program by subprocess.getstatusoutput. I'd like to 
know whether I can get the program ID, in order to avoid another launch.

For clarity sake, I'm calling aria2 (the download manager for linux) and I 
wouldn't like to call one more instance of it. So what will I use to find 
the PID of the launched program?

-- 
goto /dev/null

[toc] | [next] | [standalone]


#5901

FromKushal Kumaran <kushal.kumaran+python@gmail.com>
Date2011-05-21 10:46 +0530
Message-ID<mailman.1872.1305955023.9059.python-list@python.org>
In reply to#5777
On Thu, May 19, 2011 at 9:32 PM, TheSaint <nobody@nowhere.net.no> wrote:
> hello,
>
> I'm using to launch a program by subprocess.getstatusoutput. I'd like to
> know whether I can get the program ID, in order to avoid another launch.
>
> For clarity sake, I'm calling aria2 (the download manager for linux) and I
> wouldn't like to call one more instance of it. So what will I use to find
> the PID of the launched program?
>

The getstatusoutput function will only return when the command has
finished.  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.

-- 
regards,
kushal

[toc] | [prev] | [next] | [standalone]


#5917

FromTheSaint <nobody@nowhere.net.no>
Date2011-05-21 20:50 +0800
Message-ID<ir8cfj$2s4$1@speranza.aioe.org>
In reply to#5901
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.

-- 
goto /dev/null

[toc] | [prev] | [next] | [standalone]


#5971

FromKushal Kumaran <kushal.kumaran+python@gmail.com>
Date2011-05-22 15:34 +0530
Message-ID<mailman.1912.1306058670.9059.python-list@python.org>
In reply to#5917
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

[toc] | [prev] | [next] | [standalone]


#5974

FromTheSaint <nobody@nowhere.net.no>
Date2011-05-22 21:41 +0800
Message-ID<irb3qv$bkm$1@speranza.aioe.org>
In reply to#5971
Kushal Kumaran wrote:

> 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

I see. It's a step that I've to get on my account. Unfortunately I'll have 
to study it some more.

BTW. I removed grep from the command. Python does it with the *in* statement 
:)


-- 
goto /dev/null

[toc] | [prev] | [next] | [standalone]


#5978

FromGMail Felipe <felipe.vinturini@gmail.com>
Date2011-05-22 12:45 -0300
Message-ID<mailman.1917.1306079058.9059.python-list@python.org>
In reply to#5974

On 22/05/2011, at 10:41, TheSaint <nobody@nowhere.net.no> wrote:

> Kushal Kumaran wrote:
> 
>> 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
> 
> I see. It's a step that I've to get on my account. Unfortunately I'll have 
> to study it some more.
> 
> BTW. I removed grep from the command. Python does it with the *in* statement 
> :)
> 
> 
> -- 
> goto /dev/null
> -- 
> http://mail.python.org/mailman/listinfo/python-list

Hi, 

For the "ps" command, have you seen the psuti module?

The link to it is: http://code.google.com/p/psutil/

Regards,
Felipe.

[toc] | [prev] | [next] | [standalone]


#6064

FromTheSaint <nobody@nowhere.net.no>
Date2011-05-23 19:06 +0800
Message-ID<irdf2v$spe$1@speranza.aioe.org>
In reply to#5978
GMail Felipe wrote:


> For the "ps" command, have you seen the psuti module?
> 
> The link to it is: http://code.google.com/p/psutil/

You gave a brand new start :)
I bit of additional program to include into the package ;)

-- 
goto /dev/null

[toc] | [prev] | [next] | [standalone]


#6132

FromAnssi Saari <as@sci.fi>
Date2011-05-24 13:45 +0300
Message-ID<vg3ipt04bt6.fsf@pepper.modeemi.fi>
In reply to#5917
TheSaint <nobody@nowhere.net.no> writes:

>         self.handle= \
>         xmlrpclib.ServerProxy('http://localhost:%s/rpc' %int(self.numport))

Couldn't you just try to call something via this handle, like
self.handle.aria2.getVersion()? If there's an error, then start aria2
as a daemon and try again.

[toc] | [prev] | [next] | [standalone]


#6137

FromTheSaint <nobody@nowhere.net.no>
Date2011-05-24 21:36 +0800
Message-ID<irgc99$3dp$1@speranza.aioe.org>
In reply to#6132
Anssi Saari wrote:

> Couldn't you just try to call something via this handle, like
> self.handle.aria2.getVersion()? If there's an error, then start aria2
> as a daemon and try again.
> 

Very good, you're right. Furthermore I should avoid to call that function 
several times. I think to join it with __init__ function
The program on exit must tell aria2c to quit.

-- 
goto /dev/null

[toc] | [prev] | [standalone]


Back to top | Article view | comp.lang.python


csiph-web