To simplify the issue, I have removed the shell script and replaced it with a sleep command, which would be my long process. Below is the updated code that executes a 'sleep' command.

0 $ENV{PATH} = "/bin:"; 1 use CGI qw(:all delete_all escapeHTML); 2 3 my $redirect_page = "display_page.cgi"; 4 5 # The execution enters this loop in the first pass whereas 6 it shou +ld not!!! 7 if (my $session = param('session')) { # returning to pick 8 up sessi +on data 9 my $cache = get_cache_handle(); 10 my $data = $cache->get($session); 11 unless ($data and ref $data eq "ARRAY") { # something is wrong 12 show_form(); 13 exit 0; 14 } 15 print header; 16 if ( $data->[0] ){ 17 print start_html(-title=>'Sleep Results Done',-bgcolor=>'white'); 18 # Checking.... print $session and $data->[0] to screen 20 print h2("$session"); 21 print h2("$data->[0]"); 22 # End of checking 23 print start_form(-name=>'data',-action=>$redirect_page); 24 print end_form(); 25 print script("setTimeout(\"document.data.submit();\",2000);"); 26 } 27 else{ 28 print start_html(-title => "Sleep Results", 29 ($data->[0] ? () : 30 (-head => ["<meta http-equiv=refresh content=5>" +]))); 31 print h1("Sleep Results"); 32 print pre(escapeHTML($data->[0])); 33 print pre(escapeHTML($data->[1])); 34 print p(i("... continuing ...")) unless $data->[0]; 35 36 } 37 print end_html; 38 } 39 elsif ( (my $slp = param('sleep')) eq 'sleep') { 40 my $session = get_session_id(); 41 my $cache = get_cache_handle(); 42 $cache->set($session, [0, ""]); # no data yet 43 44 if (my $pid = fork) { # parent does 45 delete_all(); # clear parameters 46 param('session', $session); 47 print redirect(self_url()); 48 } 49 elsif (defined $pid) { # child does 50 close STDOUT; # so parent can go on 51 unless (open F, "-|") { 52 open STDERR, ">&=1"; 53 exec "sleep","120"; 54 die "Cannot execute Sleep: $!"; 55 } 56 my $buf = ""; 57 while (<F>) { 58 $buf .= $_; 59 $cache->set($session, [0, $buf]); 60 } 61 $cache->set($session, [1, $buf]); 62 exit 0; 63 } 64 else { 65 die "Cannot fork: $!"; 66 } 67 } 68 else { # display form 69 show_form(); 70 } 71 72 exit 0; sub show_form { print header, start_html("Sleep"), h1("Sleep"); print start_form; #print submit('traceroute to this host:'), " ", textfield('host'); print submit('Run Sleep Process:'), " ", textfield('sleep'); print end_form, end_html; } sub get_cache_handle { require Cache::FileCache; Cache::FileCache->new ({ namespace => 'sleep', username => 'sara2005', default_expires_in => '30 minutes', auto_purge_interval => '4 hours', }); } sub get_session_id { require Digest::MD5; Digest::MD5::md5_hex(Digest::MD5::md5_hex(time().{}.rand().$$)); }

If $ENV{PATH} is defined (line 0) in the perl script, the code works fine but if $ENV{PATH} is removed, everything goes weird. All the browser returns is a blank screen!!!!!

Any thoughts?


In reply to Re^2: Long Process through CGI and issue with $PATH by sara2005
in thread Long Process through CGI and issue with $PATH by sara2005

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • 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:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.