Home > Perl > Windows Hintergrundprozess mit Perl

Windows Hintergrundprozess mit Perl

Ein Perl-Script unter Windows im Hintergrund rennen zu lassen waere schon etwas feines, dachte ich mir. Aber Windoof laesst keine Hintergrundprozesse zu, wird das jeweilige Programm (in dem Fall perl.exe) von der Commandline ausgefuehrt.

Ich hab’s mit allen moeglichen Tricks probiert. STDIN, STDOUT und STDERR nach nul (unter Windows nur mit einem L) umleiten, fork(), von einem anderen Script aus mit open eine Pipe oeffnen, mit cmd.exe /C und mit start /B. Und auch all’ diese verschiedenen Moeglichkeiten kombiniert. Aber nichts funktioniert. Ich kann mich an Visual Basic erinnern. Sogar das kann Prozesse komplett im Hintergrund starten. Aber es liegt nicht an Perl, dass die Windows Commandline so beschissen ist. Das zeigt, dass die Linux Shell sehr maechtig ist. Wofuer gibt es dann unter Windows eigentlich cmd.exe, wenn sie nichts kann? Das ist wie der Blinddarm im menschlichen Koerper. Es muss doch eine Moeglichkeit geben, um ganz einfach einen Prozess im Hintergrund rennen zu lassen. Ich will nicht extra Module installieren muessen, nur um dieses Problem zu loesen. Selber schuld, wieso verwend’ ich auch Windows?

Schliesslich blieb mir doch nichts anderes ueber, als ein vorhandenes Perl-Modul fuer diesen Job zu installieren. Jedoch bevor ich ein passendes Modul gefunden hatte, probierte ich folgende Module aus: Daemon::Easy, Working::Daemon, Win32::Console und Proc::Background. Alle haben eines gemeinsam: POSIX::setsid(). ERROR: POSIX::setsid not implemented on this architecture. Will man setsid() unter Windows XP verwenden, wird diese Fehlermeldung angezeigt. Win32::Process war dann schliesslich des Raetels Loesung. Die anderen Module starten zwar auch einen Prozess im Hintergrund, aber sobald cmd.exe beendet wird, werden auch alle anderen Prozesse beendet, die ueber diese Console gestartet worden sind. Win32::Process startet naemlich einen richtigen Hintergrundprozess, vorausgesetzt das cFlag ist DETACHED_PROCESS.

use Win32::Process;
Win32::Process::Create(
	my $proc,
	$^X,
	'perl run.pl',
	1,
	DETACHED_PROCESS,
	'.'
) || die "Win32::Process::Create failed\n";

Benoetigte Perl-Module

Download

Share and Enjoy:
  • Twitter
  • del.icio.us
  • Google Bookmarks
  • Digg
  • Slashdot
  • StumbleUpon
  • Reddit

TheFox Perl , , , , , , , , , ,

  1. Bisher keine Kommentare
  1. Bisher keine Trackbacks
hacker Powered by Gentoo Linux Blogverzeichnis - Blog Verzeichnis bloggerei.de Suchmaschinenoptimierung mit Ranking-Hits