----- Original Message -----
From: "William A. Rowe, Jr." <[EMAIL PROTECTED]>
To: "Mladen Turk" <[EMAIL PROTECTED]>; "Bill Tutt" <[EMAIL PROTECTED]>;
<[email protected]>
Sent: Saturday, February 16, 2002 6:47 PM
Subject: Re: [PATCH] WIN32 Optimistic apr_proc_kill
> From: "Mladen Turk" <[EMAIL PROTECTED]>
> Sent: Saturday, February 16, 2002 7:09 AM
> >
> > From: "Bill Tutt" <[EMAIL PROTECTED]>
> > Sent: Saturday, February 16, 2002 12:57 AM
> >
> > > Not quite. Yes we're calling kill, but you also don't want an A/V
dialog
> > > to pop up and prevent the process from exiting. The reason that this
is
> > > possible is because ExitProcess causes DLL entry points to get called
> > > with a notification that the process is exiting.
>
> The upshot? This requires some well thought out action before we begin
injecting
> code into other processes. But I agree with the concensus here, we need
to support
> both apr and non-apr app execution, clean up both, and it would be
terrific to be
> able to drop the 16 bit apps. Perhaps as a build-time option, and create
a new
> symbol APR_HAS_LEGACY_CREATE_CHILD or something for those that -need-
this. Keep
> in mind that pretty soon, the 32 bit apps will be legacy within the 32-bit
WOW in
> 64-bit Windows :)
>
I'm sorry if my English Leeds to some misunderstanding. My primary intention
with that patch was to try to kill the entire process tree. I suppose that
everyone sees the benefit of that.
Personally, I hate the "what if" questions, because those questions are
probably less then 1% of problems. For me the displaying of some messagebox
is less irrelevant then 100 processes left hanging from some perl script.
I'm probably lousy perl programmer, but how that I explain that to my
customers?
Here is my test case:
static apr_proc_t newproc = 5;
static int revolution;
void terminate()
{
if (revolution < 5)
apr_proc_kill(&newproc, 0);
apr_terminate();
}
int main(int argc, char *argv[])
{
apr_pool_t *pool;
apr_procattr_t *attr;
const char *args[3];
char sb[32];
int q;
if (apr_initialize() != APR_SUCCESS){
printf("Failed to initialize APR\n");
exit(-1);
}
atexit(terminate);
apr_pool_create(&pool, NULL);
revolution = atoi(argv[1]);
itoa(revolution + 1, sb, 10);
args[0] = "test";
args[1] = sb;
args[2] = NULL;
printf("Created %s\n", sb);
if (revolution < 5) {
apr_procattr_create(&attr, pool);
apr_proc_create(&newproc, "test", args, NULL, attr, pool);
}
while ((q = getch()) != 'q') {
apr_sleep(100);
}
printf("Exiting %d\n", revolution);
return 0;
}
Here I'm launching 5 processes.
The question is how to kill them all?
If I only call the TerminateProcess on the one I've created the rest 3 will
keep hanging.
MT.