[Python-Dev] (os.kill (was Fork) on Win32 failing...) (original) (raw)
M.-A. Lemburg mal@lemburg.com
Thu, 03 Aug 2000 15:40:05 +0200
- Previous message: [Python-Dev] (os.kill (was Fork) on Win32 - was (test_fork1 failing...)
- Next message: [Python-Dev] (os.kill (was Fork) on Win32 - was (test_fork1 failing...)
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Mark Hammond wrote:
eek - a bit quick off the mark here ;-] > Signals are a bit of a problem on Windows. We can terminate the thread > mid-execution, but a clean way of terminating a thread isn't obvious. thread = process - you get the idea! > terminate-without-prejudice option any good? really should say > terminate-without-prejudice only version any good?
Well for one you can use signals for many other things than just terminating a process (e.g. to have it reload its configuration files). That's why os.kill() allows you to specify a signal.
The usual way of terminating a process on Unix from the outside is to send it a SIGTERM (and if that doesn't work a SIGKILL). I use this strategy a lot to control runaway client processes and safely shut them down:
On Unix you can install a signal handler in the Python program which then translates the SIGTERM signal into a normal Python exception. Sending the signal then causes the same as e.g. hitting Ctrl-C in a program: an exception is raised asynchronously, but it can be handled properly by the Python exception clauses to enable safe shutdown of the process.
For background: the client processes in my application server can execute arbitrary Python scripts written by users, i.e. potentially buggy code which could effectively hose the server. To control this, I use client processes which do the actual exec code and watch them using a watchdog process. If the processes don't return anything useful within a certain timeout limit, the watchdog process sends them a SIGTERM and restarts a new client.
Threads would not support this type of strategy, so I'm looking for something similar on Windows, Win2k to be more specific.
Thanks,
Marc-Andre Lemburg
Business: http://www.lemburg.com/ Python Pages: http://www.lemburg.com/python/
- Previous message: [Python-Dev] (os.kill (was Fork) on Win32 - was (test_fork1 failing...)
- Next message: [Python-Dev] (os.kill (was Fork) on Win32 - was (test_fork1 failing...)
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]