I have written a script that uses DBI to talk to a MySQL. One requirement I have is to allow a sql statement to be ran for more than a few hours from the web browser. To accomplish this I used a fork to send a warn every 90 seconds. Since the Apache timeout is set to 120 seconds the script never times out. See example below
my $pid;
$SIG{CHLD} = 'IGNORE';
unless($pid = fork)
{
while(1)
{
sleep 90;
warn "Output taking longer then 90 seconds, waiting";
}
exit;
}
….. Do DBI stuff
kill(9,$pid);
So the problem that I am having is if the user stops the connection the process is still running. The process won’t stop until the SQL statement is completed. The bigger program is when all the tables are locked these process start growing until there are too many for the server to handle.
So my question is, is there a way to stop these scripts if the user disconnects. I would think apache would see the socket is broken and could kill the Perl script. Or is there a better method to use to accomplish the same thing?
Thanks in advance!
Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
Read Where should I post X? if you're not absolutely sure you're posting in the right place.
Please read these before you post! —
Posts may use any of the Perl Monks Approved HTML tags:
- a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
| |
For: |
|
Use: |
| & | | & |
| < | | < |
| > | | > |
| [ | | [ |
| ] | | ] |
Link using PerlMonks shortcuts! What shortcuts can I use for linking?
See Writeup Formatting Tips and other pages linked from there for more info.