Solved

process handling

Posted on 2002-05-09
5
169 Views
Last Modified: 2010-03-05
I have a perl cgi script which executes a program using `` what I would like to do, is start the process and then immediatly send the response back to the user, without waiting for the process to finish.

In other words: the user makes an http request, the script starts a process, sends back the response, and some time later the process finishes (without anyone really knowing about it).

How can I do this?

thanks
0
Comment
Question by:_D_
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 3
  • 2
5 Comments
 
LVL 1

Expert Comment

by:japhyRPI
ID: 6999091
You could merely append an ampersand (&) to the end of the system call:

  `/some/process arg1 arg2 &`;

0
 
LVL 8

Accepted Solution

by:
jhurst earned 200 total points
ID: 7000311
This is exactly what fork() is for.

$x=fork();  #make two copies of the running process
if ($x > 0) { #the maker of the copy gets the
              #pid of the new one
  print ...   #whatever you want to tell the user
  close(STDOUT); #ensure that the web server knows
  }           #we are done
else {
  #we are the second copy
  ... do whatever he wants to do, no one will know
  }

0
 
LVL 8

Expert Comment

by:jhurst
ID: 7001970
In the case where the other process is as described by japhyrpi I somewhat agree that the & method works, if the OS is one that supports the & method.  

The things I do not like about this is that: 1) it does not take advantage of multi-threading where implemented, 2) it is OS specific, 3) it does not allow the rest of the work to be done in the same perl script.

But, I do agree it will work with these restrictions.
0
 
LVL 1

Expert Comment

by:japhyRPI
ID: 7002022
jhurst - well, fork() is OS dependent too.  ActivePerl has only recently provided support for it.
0
 
LVL 8

Expert Comment

by:jhurst
ID: 7002302
correct.  However, fork() is defined in perl, the & is not.  Also, most decent multi-tasking operating systems implement fork() therefore it makes its way into perl there too.  Now, MS products are of course a different issue.
0

Featured Post

Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

I've just discovered very important differences between Windows an Unix formats in Perl,at least 5.xx.. MOST IMPORTANT: Use Unix file format while saving Your script. otherwise it will have ^M s or smth likely weird in the EOL, Then DO NOT use m…
Checking the Alert Log in AWS RDS Oracle can be a pain through their user interface.  I made a script to download the Alert Log, look for errors, and email me the trace files.  In this article I'll describe what I did and share my script.
Explain concepts important to validation of email addresses with regular expressions. Applies to most languages/tools that uses regular expressions. Consider email address RFCs: Look at HTML5 form input element (with type=email) regex pattern: T…
Six Sigma Control Plans

636 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question