Система Perl (команда), затем команда kill - PullRequest
2 голосов
/ 19 октября 2011

Я пытаюсь вывести систему netstat -an -p TCP $interval > $log для сна в течение $ секунд, а затем выйти / убить команду netstat, но у меня возникают проблемы с ее корректной работой.

Если я использую start netstat..., мои команды sleep и kill работают, но они не записывают в журнал.

Если я использую только netstat..., то он записывает в журналы, но не переходит к командам сна и уничтожения.

Есть идеи, как решить эту проблему?

$netstat_cmd = "netstat -an -p TCP $interval >$netstatlog;
$stop_netstat_cmd = "c:\utilities\pskill NETSTAT.exe";
system($netstat_cmd);
sleep $seconds;
system "$stop_netstat_cmd";

Спасибо!

Ответы [ 3 ]

2 голосов
/ 19 октября 2011

Почему бы вам не использовать IPC::Run?У него есть метод kill_kill(), который переносим через Unix и Win32 (последний важен, если вы работаете в Windows, поскольку ваш «запуск», возможно, указывает на это).


Насколько вашПо своему подходу перенаправление start xxx не работает, поэтому самое простое решение:

  • Создать пакетный файл для запуска netstat и перенаправить в файл

  • Запустите пакетный файл с помощью start

0 голосов
/ 19 октября 2011

Forks::Super облегчает выполнение этой задачи

0 голосов
/ 19 октября 2011

Ваша проблема в том, что system () запускает свою команду и ждет, пока она не вернется, поэтому вы никогда не доберетесь до вызова sleep ().Вам нужно запустить netstat из другого процесса или в фоновом режиме.Вы можете использовать fork (), чтобы добиться этого, запустив другой процесс из вашего основного процесса и запустив netstat:

my $interval = 5;
my $netstatlog = "foo.tmp";
my $seconds = 10;

my $netstat_cmd = "netstat -an -p TCP $interval >$netstatlog";
my $stop_netstat_cmd = "pskill NETSTAT.exe";

if (my $pid = fork()) { # make new process
    print "launched netstat $pid\n";
}
else { # this is the "new" process
    system($netstat_cmd);
    exit();
}

sleep $seconds;

system "$stop_netstat_cmd";

(у меня нет pskill, так что вам придется сделать эточасть работы самостоятельно ...)

...