Home | Trees | Index | Help |
|
---|
Package twisted :: Package internet :: Module process :: Class Process |
|
Ephemeral
--+
|
Process
An operating-system Process.
This represents an operating-system process with arbitrary input/output pipes connected to it. Those pipes may represent standard input, standard output, and standard error, or any other file descriptor.
On UNIX, this is implemented using fork(), exec(), pipe() and fcntl(). These calls may not exist elsewhere so this code is not cross-platform. (also, windows can only select on sockets...)Method Summary | |
---|---|
Spawn an operating-system process. | |
_execChild(self,
path,
settingUID,
uid,
gid,
command,
args,
environment)
| |
fdmap[childFD] = parentFD The child wants to end up with 'childFD' attached to what used to be the parent's parentFD. | |
childConnectionLost(self,
childFD)
| |
closeChildFD(self,
childFD)
| |
closeStderr(self)
| |
Call this to close standard input on this process. | |
closeStdout(self)
| |
loseConnection(self)
| |
maybeCallProcessEnded(self)
| |
processEnded(self,
status)
| |
Try to reap a process (without blocking) via waitpid. | |
signalProcess(self,
signalID)
| |
Call this to write to standard input on this process. | |
writeToChild(self,
childFD,
data)
| |
Inherited from Ephemeral | |
| |
|
Class Variable Summary | |
---|---|
int |
debug = 0 |
int |
debug_child = 0 |
Method Details |
---|
__init__(self,
reactor,
command,
args,
environment,
path,
proto,
uid=None,
gid=None,
childFDs=None)
|
_setupChild(self, fdmap)fdmap[childFD] = parentFD The child wants to end up with 'childFD' attached to what used to be the parent's parentFD. As an example, a bash command run like 'command 2>&1' would correspond to an fdmap of {0:0, 1:1, 2:1}. 'command >foo.txt' would be {0:0, 1:os.open('foo.txt'), 2:2}. Step 1: close all file descriptors that aren't values of fdmap. This means 0 .. maxfds. Step 2: for each childFD: if fdmap[childFD] == childFD, the descriptor is already in place. Make sure the CLOEXEC flag is not set, then delete the entry from fdmap. if childFD is in fdmap.values(), then the target descriptor is busy. Use os.dup() to move it elsewhere, update all fdmap[childFD] items that point to it, then close the original. Then fall through to the next case. now fdmap[childFD] is not in fdmap.values(), and is free. Use os.dup2() to move it to the right place, then close the original. |
closeStdin(self)Call this to close standard input on this process. |
reapProcess(self)Try to reap a process (without blocking) via waitpid. This is called when sigchild is caught or a Process object loses its "connection" (stdout is closed) This ought to result in reaping all zombie processes, since it will be called twice as often as it needs to be. (Unfortunately, this is a slightly experimental approach, since UNIX has no way to be really sure that your process is going to go away w/o blocking. I don't want to block.) |
write(self, data)Call this to write to standard input on this process. |
Class Variable Details |
---|
debug
|
debug_child
|
Home | Trees | Index | Help |
|
---|
Generated by Epydoc 2.0 on Wed Feb 25 07:37:19 2004 | http://epydoc.sf.net |