Subprocess and pipe-fork-exec primitive
Rafael V.
rafaelv at spress.com.br
Wed Aug 1 15:20:10 EDT 2007
Hi Martin,
the operating system I'm using is SUSE Linux 10, kernel 2.6.13.
You're right, I was missing something. After you told me that it
couldn't be Python preforming wait() on SIGCHLD, I decided to
investigate further.
My application requires access to a Informix database, and uses
informixdb. The problem seems to be related to that module. I wrote a
small piece of code to test it:
---------------------------------------------------
#!/usr/bin/env python
from os import fork, execl, waitpid
from informixdb import connect
try:
conf = {}
conf['dsn'] = 'db at server'
conf['user'] = 'user'
conf['password'] = 'password'
connection = connect(**conf)
except:
pass
pid = fork()
if pid == 0:
# Child
execl("/bin/sh", "/bin/sh", "-c", "true")
# Parent
waitpid(pid, 0)
print pid
---------------------------------------------------
If you run the code above multiple times, some runs will trigger
exceptions on the waitpid calls. Commenting the call to
informixdb.connect(), no exceptions are triggered. I am concluding that
informixdb, not Python, is handling the signals and reaping the
subprocesses.
Now Martin, do you think I can use informixdb.py and subprocess.py in
the same application? I was thinking on forking subprocesses from the
main thread and using other threads to access the Informix database,
would that work?
Thanks,
Rafael.
Martin v. Löwis escreveu:
>> From my experience, this primitive will fail with 'no child processes'
>> at the waitpid call if the forked child dies very quickly - before the
>> parent is scheduled back for execution. This seems to happen because
>> Python has a default SIGCHLD handler that, in this case, will reap the
>> process before the parent has the chance to do it.
>
> What operating system is your experience from? On a POSIX system,
> this should not happen - i.e. delivery of SIGCHLD should not cause
> to make the child waited-for. Python itself does not perform wait()
> in response to SIGCHLD.
>
>> I would like to know if this is correct, or am I missing something here?
>
> You must be missing something, although I'm uncertain what precisely
> that is.
>
> Regards,
> Martin
More information about the Python-list
mailing list