Depending what it is that your actually trying to achieve, it could be as simple as:
P:\test>start /b perl -le"open LOG, '>', 'my.log';
select LOG;
$|=1;
print ~~localtime while sleep 10" 1>nul 2>&1 <nul
P:\test>u:tail -f my.log
Tue Sep 14 12:11:10 2004
Tue Sep 14 12:11:20 2004
^C
The "one-liner" (here split across multiple lines to avoid wrapping) could be just about any perl script you like. It runs in the background, has it's STDIN, STOUT and STDERR redirected to the nul device and will continue to run until terminated through the task manager or other mechanism.
Proc::Daemon does a couple of other things--changing the umask (whatever that is) etc.-- but nothing that you cannot easily do yourself.
Examine what is said, not who speaks.
"Efficiency is intelligent laziness." -David Dunham
"Think for yourself!" - Abigail
"Memory, processor, disk in that order on the hardware side. Algorithm, algorithm, algorithm on the code side." - tachyon
| [reply] [d/l] |
In fact my problem was that I was not aware of the windows 'start' command. As I said, I'm a Windows newbie ;)
Many thanks !
| [reply] |
In fact, your solution does not fully fit my needs : if I try to exit from the windows that was used to launch the 'start' command, it hangs. And if I close that windows 'by force', the perl script does not run any longer.
So that's not a real daemon behaviour, because I do not want a window to be attached to the program.
Any hint ?
| [reply] |
...your solution does not fully fit my needs...
Like I say, it would be easier if you would explain what your needs are...
Maybe this will do what you want?
P:\test>type detach.pl ## A script to detach scripts
#! perl -lw
use strict;
use Win32::Process;
print "@ARGV";
my $cmdline = "perl.exe @ARGV";
print $cmdline;
Win32::Process::Create(
my $hProc, $^X, $cmdline, 0, DETACHED_PROCESS, '.'
) or die $^E;
print "PID: ", $hProc->GetProcessID;
P:\test>type test.pl ## A script to detach
#! perl -slw
use strict;
close $_ for *STDIN, *STDOUT, *STDERR;
open LOG, '>', 'my.log' or die $!;
select LOG;
$|=1;
print ~~localtime while sleep 2;
P:\test>del my.log
P:\test>cmd
Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.
P:\test>detach test.pl
test.pl
perl.exe test.pl
PID: 3540
P:\test>u:tail -f my.log
Tue Sep 14 17:39:05 2004
Tue Sep 14 17:39:07 2004
Tue Sep 14 17:39:09 2004
Tue Sep 14 17:39:11 2004
Tue Sep 14 17:39:13 2004
Tue Sep 14 17:39:15 2004
Tue Sep 14 17:39:17 2004
^C
P:\test>exit
^C
P:\test>u:tail -f my.log
Tue Sep 14 17:39:07 2004
Tue Sep 14 17:39:09 2004
Tue Sep 14 17:39:11 2004
Tue Sep 14 17:39:13 2004
Tue Sep 14 17:39:15 2004
Tue Sep 14 17:39:17 2004
Tue Sep 14 17:39:19 2004
Tue Sep 14 17:39:21 2004
Tue Sep 14 17:39:23 2004
Tue Sep 14 17:39:25 2004
Tue Sep 14 17:39:27 2004
Tue Sep 14 17:39:29 2004
^C
Examine what is said, not who speaks.
"Efficiency is intelligent laziness." -David Dunham
"Think for yourself!" - Abigail
"Memory, processor, disk in that order on the hardware side. Algorithm, algorithm, algorithm on the code side." - tachyon
| [reply] [d/l] |
| [reply] |