[Melbourne-pm] Testing fork
David Dick
david_dick at iprimus.com.au
Tue Aug 24 04:56:58 CDT 2004
Ok, test scripts are very nice, but some things are just ridiculously
hard to do properly.
i've got a cgi-script that needs to accept a job from a user, return a
202 and point the user to a url that they can use to monitor the job's
status.
Now, to kick off a job, the best way that i can think of is to partially
daemonize (i don't want to close STDERR for example) and run the job in
the partial daemon, while the original cgi process returns the pointer
to the user.
Unfortunately, the following bit of code has some issues;
FORK: {
if ($pid = fork) {
exit 0;
} elsif (defined $pid) {
} elsif ($! =~ /No more process/) {
sleep 5;
redo FORK;
} else {
die("Can't fork:$!");
}
}
1) How on earth can i test the /No more process/ line? I think i need a
"ulimit -u" sort of capability, and need to switch it on and off to get
the code to enter and exit the condition.
2) The horrifying mutations that this code can be subjected to. For
example, i'm writing the code as a cgi script to maximise portability.
For speed, the code be run using Apache::Registry. Which, among other
things silently overrides the exit statement, unless you fully qualify
as CORE::exit. I'm damned if i know how, even if i know and expect the
weird environmental conditions, that i can test that my code is correct
in an environment such as Apache::Registry;
3) probably a whole lot of other issues that i'm not aware of yet.
anyone got any ideas on writing a test script for these sort of issues?
More information about the Melbourne-pm
mailing list