gpt4 book ai didi

perl:我可以等 15 分钟,然后如果没有按下某个键,做点什么吗?

转载 作者:行者123 更新时间:2023-12-04 22:35:31 25 4
gpt4 key购买 nike

这是我的第一个 perl 程序:

我想确保如果我离开我的机器一段时间,那么这个脚本 ssh 到我们的主服务器并杀死我在那里的所有进程。 (我去吃午饭时总是忘记杀死它们,它们占用了大量的 CPU 和内存)。

我已经到了这一步,在屏幕保护程序激活杀戮开始后 15 分钟。

#!/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";
}
}

但我想要的是在监视键盘的同时等待 15 分钟。如果说,'N' 键被按下(在终端中运行脚本),那么我想中止杀戮并返回监视屏幕保护程序。如果在我喝咖啡时屏幕保护程序打开,这将为我提供一条逃生路线。

某种邦德式倒计时也不错。

实际上更好的是注意屏幕保护程序何时解锁,如果是,则停止倒计时,回到监控模式。然后我什至不用担心记得按 N。

最佳答案

正如 mob 所说,线程和 select 使这有点过于复杂。所以这里有一些很好的和简单的 Term::ReadKey ,它让你首先做你要求的事情:WAITING一个键被按下,但如果在 15 分钟内没有按下任何键,则超时。

#!/usr/bin/env perl

use strict;
use warnings;

use Term::ReadKey;
my $cmd = "dbus-monitor --session \"type='signal', interface='org.gnome.ScreenSaver',member='ActiveChanged'\"";

open(IN, "$cmd |");

ReadMode 'cbreak'; # return keypress immediately without waiting for "Enter"

while (<IN>) {
if (m/^\s+boolean true/) {
print "*** Screensaver is active ***\n";
print "*** Sleeping before megadeath....\n";

my $key = ReadKey 900; # timeout after 900 seconds = 15 minutes
if (defined $key) {
print "*** A key was pressed; megadeath averted\n";
} else {
print "*** killing all jla processes on anvil...\n";
my $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";
}
}

ReadMode 'restore'; # back to normal input mode

(代码在语法上是正确的,但尚未运行,因此没有经过全面测试。除了 'cbreak' 之外,您可能还想设置 'noecho' ReadMode 以防止禁用 megadeath 的按键出现在屏幕上。)

关于perl:我可以等 15 分钟,然后如果没有按下某个键,做点什么吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7586794/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com