時間かかるプロセスが終わったときにGrowlで通知してくれるやつ

時間かかる処理(homebrewでなんかインストールしてるとかcpan-outdated | cpanm)してるときに、その処理が終わったタイミングでGrowl通知してくれるといいのになーって思うときがあるのでやっつけで書いた。10秒ごとにチェックしてるのでほんとのリアルタイムではないけど、自分用としてはこれで十分。

./watcher.pl 監視したいプロセスのpid &

みたいな感じで使う。

#!/usr/bin/env perl                                                                                                                         
use strict;
use warnings;

use Proc::ProcessTable;
use Mac::Growl;

my $pid = shift or die "<usage> $0 pid";
die "bad pid" unless $pid !~ m/[^0-9]/;
chomp $pid;
while (1) {
    my $t = Proc::ProcessTable->new;
    my $found = 0;
    foreach (@{$t->table}) {
        $found++ if $_->pid == $pid;
    }
    last unless $found;
    sleep 10;
}

my $appname = "process watcher";
Mac::Growl::RegisterNotifications($appname, ['alert'], ['alert']);

Mac::Growl::PostNotification(
    $appname,
    'alert',
    $appname,
    "pid $pid done",
    0,
    0,
    undef,
);