Процесс подачи заявок никогда не прекращается при каждом запуске - PullRequest
1 голос
/ 03 апреля 2010

Я вижу, что приложение всегда остается активным, даже после закрытия приложения, используя мой Perl-скрипт ниже. Кроме того, для последующих запусков всегда говорится, что «процесс не может получить доступ к файлу, поскольку он используется другим процессом. Iperf.exe -u -s -p 5001 успешно. Вывод был:«

Так что каждый раз, когда мне нужно изменить имя файла $ file, используемый в скрипте, или мне нужно убить процесс iperf.exe в диспетчере задач.

Может кто-нибудь, пожалуйста, дайте мне знать, как избавиться от него?

Вот код, который я использую ...

my @command_output;
eval { 
    my $file = "abc6.txt";    
    $command = "iperf.exe -u -s -p 5001";
    alarm 10;
    system("$command > $file");
    alarm 0;
close $file;
};
if ($@) {
    warn "$command timed out.\n";
} else {
   print "$command successful. Output was:\n", $file;
}
unlink $file;

1 Ответ

0 голосов
/ 03 апреля 2010

Поскольку ваш процесс не открыл $ file, закрывающий $ file ничего не добился.

Если процесс завершится вовремя, у вас не возникнет проблемы. Поэтому вам необходимо выяснить, почему вы считаете, что iperf может выполнить свою работу за 10 секунд, и почему он считает, что не может.

Кроме того, если истекло время ожидания, вы, вероятно, должны стремиться завершить дочерний процесс. В Unix вы можете посылать ему сигналы SIGTERM, SIGHUP и SIGKILL последовательно, с короткой паузой (возможно, 1 секунда) между ними. Первые два - вежливые просьбы вылезти из Додж-Сити; последнее - высшая угроза смерти. Конечно, вы должны знать, какой процесс отправить сигнал тоже - это может быть сложнее определить в «системе» и Windows, чем в Unix.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...