Beefy Boxes and Bandwidth Generously Provided by pair Networks
"be consistent"

Detachment problm

by baxy77bax (Deacon)
on May 27, 2012 at 08:23 UTC ( #972668=perlquestion: print w/replies, xml ) Need Help??
baxy77bax has asked for the wisdom of the Perl Monks concerning the following question:

Dear monks

I need an advice regarding a particular problem.

Couple of years ago i have been working on a program that starts other programs.The way that i tackled with the problem back then was , and i believe still is a bit wonky and now it bit me in the a... So what was the problem:

I have a main program that starts other programs given some other input let just treat this input as time . so on every full hour the main program will start some other program. Once the program is started the given process has to be detached from the main. The way i did this back then was : my $x = 0; while(1){ sleep 3600; $x++; # fork the process exec("./program$x &"); }
Now the reason i did it this way was because it was necessary to kill all running programs once the main program stops running. However though this worked for a while, recently with the new Rocks OS some background processes do not end when the main program is terminated. So what i am looking for is an alternative to the above described procedure. Something stable. Perfect solution would be that i have a complete control over my background processes in a way that once i detached the process, i can get its pid. With this information i could manually check if a specific process is still running or not and if it is, then kill it.

Any ideas ??



Replies are listed 'Best First'.
Re: Detachment problm
by Corion (Pope) on May 27, 2012 at 09:11 UTC

    You might also want to look at Schedule::Cron, or crond for existing solutions to launching programs at certain times.

Re: Detachment problm
by Anonymous Monk on May 27, 2012 at 08:32 UTC

    so on every full hour the main program will start some other program

    Well, if that is main, since you're not fork-ing before exec-ing, the main program replaces itself with the new program, in other words, there is no more main program running.

    If you want to launch processes in the background, see if they're still running, kill them if they are, on win32 and unix, you can use Proc::Background


Re: Detachment problm
by Marshall (Abbot) on May 27, 2012 at 10:42 UTC
    I guess I'm confused. The normal way to run a job every hour either on Unix or Windows is to setup a "cron" job, using cron or the Windows scheduler.

    Unix cron Windows Task Scheduler On Windows to kill processes by name, taskkill /? will provide some help. On Unix pkill will do it. You know the name(s).

    If you don't want that job to run again the next hour, then remove the cron job for it. Normally you shouldn't need your own process to sleep for an hour to start another process ( and since this process is replaced by the new running process, it is hard for me to understand how yet another one could be started). Let the OS run processes according the schedule. If you don't want it to run, remove it from the schedule. If you want to stop it while it is running, use some version of "kill". Yes, if you write a real "fork", if you die as the parent, the child dies too, but that seems overly complex. The exec() that you have now replaces your process with a new process with the same pid.

      ok i see you all did your homework and you know what is a standard approach. but that is not what i am looking for. so the whole project is a grid-wide and net-wide portable system. and i see that the time thing confused you . so let say that instead of time a user from a xy machine logs in and starts from main an application , but he doesn't want to wait for it to finish. plus this application is started on a computer on the other side of the globe(which is exactly what the app is doing). but then he decides to start 30 more applications on 30 different computers over the globe. and he doesn't want to wait for them to finish. but then a user get scared form some reason and decides to leave the main application. then it would be convenient to cover all his tracks so that all the pid's get terminated. that is why i was mentioning forks, exec and background jobs ,because it works in 90 percent of the time , but sometimes the forked and detached process stays detached when the main program is finished. i believe it is a bug in forking which is depended on OS (LINUX ONLY) so i'm looking for an advice


Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://972668]
Approved by davido
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others perusing the Monastery: (4)
As of 2018-03-21 01:43 GMT
Find Nodes?
    Voting Booth?
    When I think of a mole I think of:

    Results (263 votes). Check out past polls.