Hier ist mein allererstes Perl-Programm:
Ich möchte sicherstellen, dass dieses Skript, wenn ich für eine Weile von meinem Rechner weg bin, per SSH auf unseren Hauptserver zugreift und alle meine Prozesse dort beendet. (Ich vergesse immer wieder, sie zu beenden, wenn ich zum Mittagessen gehe, und sie beanspruchen Unmengen an CPU und Speicher).
Ich bin so weit gekommen, und 15 Minuten nachdem der Bildschirmschoner aktiviert wurde, beginnt das Töten.
#!/usr/bin/perl
my $cmd = "dbus-monitor --session \"type='signal',interface='org.gnome.ScreenSaver',member='ActiveChanged'\"";
open (IN, "$cmd |");
while (<IN>) {
if (m/^\s+boolean true/) {
print "*** Screensaver is active ***\n";
print "*** Sleeping before megadeath....\n";
sleep(15*60);
print "*** killing all jla processes on anvil...\n";
$result = `ssh anvil pkill -u jla`;
print "*** should all be dead\n";
print $result;
} elsif (m/^\s+boolean false/) {
print "*** Screensaver is no longer active ***\n";
}
}
Aber ich würde gerne 15 Minuten warten, während ich die Tastatur überwache. Wenn, sagen wir, die Taste "N" gedrückt wird (in dem Terminal, in dem das Skript läuft), dann möchte ich die Tötung abbrechen und zur Überwachung des Bildschirmschoners zurückkehren. So habe ich eine Ausweichmöglichkeit, falls der Bildschirmschoner anspringt, während ich mir einen Kaffee hole.
Eine Art Countdown im Stil von Bond wäre auch schön.
Noch besser wäre es, zu erkennen, wenn der Bildschirmschoner entsperrt wird, und den Countdown zu stoppen, wenn dies der Fall ist, und wieder in den Überwachungsmodus zu wechseln. Dann bräuchte ich mir keine Gedanken mehr zu machen, ob ich N drücken muss.