URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 7361
[ Назад ]

Исходное сообщение
"Ограничение времени исполнения в shell"

Отправлено Agp , 11-Май-08 00:37 
Здравствуйте
Подскажите пожалуйста есть ли способ ограничить время выполнения команды по времени, желательно в shell, или на худой конец в perl. Есть сценарий который ходит по каталогам и выполняет некоторые операции. Иногда эти операции могут подвиснуть, по независимым причинам. Хотелось бы ограничить время на эти операции, типа не успелось за пять минут, так и хрен с ним, идём в следующий каталог. Саму подвисшую операцию конечно неплохо прибить.

Содержание

Сообщения в этом обсуждении
"Ограничение времени исполнения в shell"
Отправлено ффф , 11-Май-08 14:38 
один процесс - родительский (он же таймер) запускает в фоновом режиме саму программу - когда  время вышло убивает сначала дочку потом себя

"Ограничение времени исполнения в shell"
Отправлено Agp , 12-Май-08 09:12 
Ага. Можете запостить какой-нибудь пример как делать таймер? и как определить имя запускаемого дочернего процесса?
Себя, родительский процесс, убивать не надо.

>один процесс - родительский (он же таймер) запускает в фоновом режиме саму
>программу - когда  время вышло убивает сначала дочку потом себя
>


"Ограничение времени исполнения в shell"
Отправлено distant.admin , 12-Май-08 15:28 
>Ага. Можете запостить какой-нибудь пример как делать таймер? и как определить имя
>запускаемого дочернего процесса?
>Себя, родительский процесс, убивать не надо.
>
>>один процесс - родительский (он же таймер) запускает в фоновом режиме саму
>>программу - когда  время вышло убивает сначала дочку потом себя
>>

Примерно так:

#!/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"
Отправлено yuuum , 23-Май-08 13:05 
>Здравствуйте
>Подскажите пожалуйста есть ли способ ограничить время выполнения команды по времени, желательно
>в shell, или на худой конец в perl. Есть сценарий который
>ходит по каталогам и выполняет некоторые операции. Иногда эти операции могут
>подвиснуть, по независимым причинам. Хотелось бы ограничить время на эти операции,
>типа не успелось за пять минут, так и хрен с ним,
>идём в следующий каталог. Саму подвисшую операцию конечно неплохо прибить.

есть порт во фре:
http://www.freebsd.org/cgi/url.cgi?ports/sysutils/timelimit/...
будет работать и под линукс(исходники по ссылке)


"Ограничение времени исполнения в shell"
Отправлено madskull , 26-Май-08 16:03 
>Здравствуйте
>Подскажите пожалуйста есть ли способ ограничить время выполнения команды по времени, желательно
>в 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 # и убиваем всех