Здравствуйте
Подскажите пожалуйста есть ли способ ограничить время выполнения команды по времени, желательно в shell, или на худой конец в perl. Есть сценарий который ходит по каталогам и выполняет некоторые операции. Иногда эти операции могут подвиснуть, по независимым причинам. Хотелось бы ограничить время на эти операции, типа не успелось за пять минут, так и хрен с ним, идём в следующий каталог. Саму подвисшую операцию конечно неплохо прибить.
один процесс - родительский (он же таймер) запускает в фоновом режиме саму программу - когда время вышло убивает сначала дочку потом себя
Ага. Можете запостить какой-нибудь пример как делать таймер? и как определить имя запускаемого дочернего процесса?
Себя, родительский процесс, убивать не надо.>один процесс - родительский (он же таймер) запускает в фоновом режиме саму
>программу - когда время вышло убивает сначала дочку потом себя
>
>Ага. Можете запостить какой-нибудь пример как делать таймер? и как определить имя
>запускаемого дочернего процесса?
>Себя, родительский процесс, убивать не надо.
>
>>один процесс - родительский (он же таймер) запускает в фоновом режиме саму
>>программу - когда время вышло убивает сначала дочку потом себя
>>Примерно так:
#!/usr/local/bin/perl -w
my $pid = fork();
if (not defined $pid) {
print "resources not avilable.\n";
}
if ($pid == 0) {
print "CHILD0 == \$pid: $pid and \$\$: $$ \n";
sleep 20;
print "CHILD1 == \$pid: $pid and \$\$: $$\n";
exit(0);
}
if (! $pid == 0){
print "PARENT == \$pid: $pid and \$\$: $$\n";
if (defined $pid){
sleep 10;
print "kill CHILD $pid\n";
kill $pid;
}
}
>Здравствуйте
>Подскажите пожалуйста есть ли способ ограничить время выполнения команды по времени, желательно
>в shell, или на худой конец в perl. Есть сценарий который
>ходит по каталогам и выполняет некоторые операции. Иногда эти операции могут
>подвиснуть, по независимым причинам. Хотелось бы ограничить время на эти операции,
>типа не успелось за пять минут, так и хрен с ним,
>идём в следующий каталог. Саму подвисшую операцию конечно неплохо прибить.есть порт во фре:
http://www.freebsd.org/cgi/url.cgi?ports/sysutils/timelimit/...
будет работать и под линукс(исходники по ссылке)
>Здравствуйте
>Подскажите пожалуйста есть ли способ ограничить время выполнения команды по времени, желательно
>в shell, или на худой конец в perl. Есть сценарий который
>ходит по каталогам и выполняет некоторые операции. Иногда эти операции могут
>подвиснуть, по независимым причинам. Хотелось бы ограничить время на эти операции,
>типа не успелось за пять минут, так и хрен с ним,
>идём в следующий каталог. Саму подвисшую операцию конечно неплохо прибить.(Задача решена? А то подняли тему через две недели, думай теперь... :) )
На самом деле все просто:
my_process & p1=$! # рабочий процесс
sleep 5 & p2=$! # типа таймер
while [ -d /proc/$p1 -a -d /proc/$p2 ]; do sleep 1; done # ждем хоть кого-нить...
{ kill $p1; kill $p2; } &>/dev/null # и убиваем всех