2012-02-15T16:44:20 FIFOHi,
betriebssystemunabhängig ist das nicht so trivial, unter Windows ist der Skriptname nicht in der Prozessliste. Ich schreibe meistens in einem BEGIN-Block ein kleines temporäres Lockfile, dessen Existenz sich ja prüfen lässt. Das Löschen gehört dann in einen END-Block. Einziger Nachteil: Bei einem Absturz ist das Lockfile evtl. persistent. Hier kann man aber über die Kontrolle der mtime Zeitintervalle vorsehen, nach deren Ablauf der Prozess als Zombie betrachtet und das Lockfile gelöscht wird.
2012-02-15T19:04:52 GUIfreundDen Absturz mit eval abfangen.
1 2 3
use Fcntl qw(:flock); open FLOCKFILE, '>', $ENV{APPDATA}.'/lst.lock'; flock(FLOCKFILE, LOCK_EX|LOCK_NB) or do {print "ENDE: Eine Instanz laeuft derzeit schon.\n\n";exit;};
2012-02-16T08:33:07 MolafOhne NonBlocking wartet aber jeder Prozess dann bis er das Lock kriegt. Wenn man 10 startet, hat einer das Lock, 9 warten und holen es sich dann hinternander weg.
2012-02-16T11:46:03 MolafAber wenn er in der Quere steht, dann ist er geblockt, macht in der Zwischenzeit gar nichts :/