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

Исходное сообщение
"Timeout (linux) аналог в freebsd"

Отправлено strike1984 , 13-Ноя-13 08:52 
Всем доброго дня. Есть ли во freebsd команда timeout как в linux?
Задача запускать другие команды на несколько секунд.
P.S. То ли гуглю неудачно, но сходу ничего не нашел.

Содержание

Сообщения в этом обсуждении
"Timeout (linux) аналог в freebsd"
Отправлено Сергей , 13-Ноя-13 10:08 
> Всем доброго дня. Есть ли во freebsd команда timeout как в linux?

A /bin/sleep не подойдет...



"Timeout (linux) аналог в freebsd"
Отправлено strike1984 , 13-Ноя-13 10:42 
>> Всем доброго дня. Есть ли во freebsd команда timeout как в linux?
>  A /bin/sleep не подойдет...

Тогда дополнительно придется kill pid или killall program


"Timeout (linux) аналог в freebsd"
Отправлено Pahanivo , 13-Ноя-13 11:14 
>>> Всем доброго дня. Есть ли во freebsd команда timeout как в linux?
>>  A /bin/sleep не подойдет...

походу товарисч имел ввиду:
man timeout
Start COMMAND, and kill it if still running after NUMBER seconds

> Тогда дополнительно придется kill pid или killall program

эээ насколько я понимаю, это сделано не для того чтобы "запускать на несколько секунд", а чтобы подвисший процесс грохался автоматом с случие подвисания через определенный таймаут.

запускаем, сохраняем pid, грохаем по pid через sleep N ...


"Timeout (linux) аналог в freebsd"
Отправлено lavr , 13-Ноя-13 11:24 
>>>> Всем доброго дня. Есть ли во freebsd команда timeout как в linux?
>>>  A /bin/sleep не подойдет...
> походу товарисч имел ввиду:
> man timeout
> Start COMMAND, and kill it if still running after NUMBER seconds
>> Тогда дополнительно придется kill pid или killall program
> эээ насколько я понимаю, это сделано не для того чтобы "запускать на
> несколько секунд", а чтобы подвисший процесс грохался автоматом с случие подвисания
> через определенный таймаут.
> запускаем, сохраняем pid, грохаем по pid через sleep N ...

угу, чтобы ничего не менять и оставить как в Linux: coreutils (gtimeout) из портов
или timelimit из портов


"Timeout (linux) аналог в freebsd"
Отправлено lavr , 13-Ноя-13 11:15 
>>> Всем доброго дня. Есть ли во freebsd команда timeout как в linux?
>>  A /bin/sleep не подойдет...
> Тогда дополнительно придется kill pid или killall program

/usr/ports/sysutils/coreutils

ничего не придется менять кроме timeout --на--> gtimeout

ps. timeout является частью coreutils, ставите порт и получаете (g)timeout


"Timeout (linux) аналог в freebsd"
Отправлено strike1984 , 13-Ноя-13 14:04 
>>>> Всем доброго дня. Есть ли во freebsd команда timeout как в linux?
>>>  A /bin/sleep не подойдет...
>> Тогда дополнительно придется kill pid или killall program
> /usr/ports/sysutils/coreutils
> ничего не придется менять кроме timeout --на--> gtimeout
> ps. timeout является частью coreutils, ставите порт и получаете (g)timeout

Спасибо, timelimit отлично справился с задачей.
gtimeout так и не нашелся на 9.1


"Timeout (linux) аналог в freebsd"
Отправлено lavr , 13-Ноя-13 14:12 
>>>>> Всем доброго дня. Есть ли во freebsd команда timeout как в linux?
>>>>  A /bin/sleep не подойдет...
>>> Тогда дополнительно придется kill pid или killall program
>> /usr/ports/sysutils/coreutils
>> ничего не придется менять кроме timeout --на--> gtimeout
>> ps. timeout является частью coreutils, ставите порт и получаете (g)timeout
> Спасибо, timelimit отлично справился с задачей.
> gtimeout так и не нашелся на 9.1

так в портах же (как и timelimit):

#  grep timeout /usr/ports/sysutils/coreutils/pkg-plist
bin/gtimeout
#


"Timeout (linux) аналог в freebsd"
Отправлено fx , 13-Ноя-13 10:42 
>  A /bin/sleep не подойдет...

верное утверждение.


"Timeout (linux) аналог в freebsd"
Отправлено Andrey Mitrofanov , 13-Ноя-13 12:35 
> Всем доброго дня. Есть ли во freebsd команда timeout как в linux?
> Задача запускать другие команды на несколько секунд.

Ну, я на bash-е делал: запуск осн.команды в bg, запуск 'sleep $TO;kill $PID_JOB_1', потом wait и сбор/интерпрпетайия результатов(RC1/RC2). Код давать?:*D


"Timeout (linux) аналог в freebsd"
Отправлено Andrey Mitrofanov , 13-Ноя-13 12:46 
>> Всем доброго дня. Есть ли во freebsd команда timeout как в linux?
>> Задача запускать другие команды на несколько секунд.
> Ну, я на bash-е делал: запуск осн.команды в bg,

Имелось в виду: это--^ ~ $job_1_command & ~

> запуск 'sleep $TO;kill $PID_JOB_1'

, а это ~ { sleep $timeout; kill $PID_OF_JOB_1; } & ~ job#2

> , потом wait

- того из этих двух, который _первым завершится.


"Timeout (linux) аналог в freebsd"
Отправлено strike1984 , 13-Ноя-13 14:10 
>>> Всем доброго дня. Есть ли во freebsd команда timeout как в linux?
>>> Задача запускать другие команды на несколько секунд.
>> Ну, я на bash-е делал: запуск осн.команды в bg,
> Имелось в виду: это--^ ~ $job_1_command & ~
>> запуск 'sleep $TO;kill $PID_JOB_1'
> , а это ~ { sleep $timeout; kill $PID_OF_JOB_1; } & ~
> job#2
>> , потом wait
> - того из этих двух, который _первым завершится.

Спасибо. timelimit решил данную задачу, но если код не очень далеко, то было бы интересно глянуть, так как задач еще много)


"Timeout (linux) аналог в freebsd"
Отправлено Andrey Mitrofanov , 13-Ноя-13 15:43 
>[оверквотинг удален]
>>>> Задача запускать другие команды на несколько секунд.
>>> Ну, я на bash-е делал: запуск осн.команды в bg,
>> Имелось в виду: это--^ ~ $job_1_command & ~
>>> запуск 'sleep $TO;kill $PID_JOB_1'
>> , а это ~ { sleep $timeout; kill $PID_OF_JOB_1; } & ~
>> job#2
>>> , потом wait
>> - того из этих двух, который _первым завершится.
> Спасибо. timelimit решил данную задачу, но если код не очень далеко, то
> было бы интересно глянуть, так как задач еще много)

<pd> Сим передаю в public domain. Я.

lastjobpid() { jobs -l |awk '$1~/\+$/{print$2}'; }
# Run:
#  { sleep $TT1 && $CC & } 2>/dev/null; time timeoutjob $TT2; echo $RC1+$RC2
# Returns: RC1 & RC2 globals - the guarded process & watchdogs' RC-s
#  [TT1;TT2;CC]=(1,10,true),(1,10,false),(10,1,yes) => [RC1+RC2]=(0,143),(1,143),(143,0)
timeoutjob() { {
  local PID=`lastjobpid` PID2;                  #the guarded pid
  sleep $1 && kill $PID &  PID2=`lastjobpid`    #the watchdog
    [ "$2" ] && $2   #asyncing [short lived job] by running while wait()
  wait $PID; RC1=$?;
  kill $PID2; wait $PID2; RC2=$?
  } >&/dev/null
#-echo "..... $PID2 . $PID + $RC1 . $RC2"   #FixME##leaves `sleep 60` sub-process behind##
}

#... Запуск того процесса:

{ $$$ТА_ПРОГРАММА$$$ >>"$dbg" 2>&1 <<<"$content" & } 2>/dev/null
timeoutjob 60 periodic_jobs #12-15s max. - normal per run, not 1000s+!

# Дальше ещё надо [глобальные] RC1+RC2 попроверять.


periodic_jobs - я ещё коперативную многозадачность прикрутил пока ТА_ПРОГРАММА работает, успеваю другие дела поделать. "60" - тот самый таймаут. B-g job-ов только эти два, других в скрипте нет. timeoutjob пускать сразу после перевода в bg job-а#1

Не образец стиля, но, выдранное из работающего _демона: 1) работает; 2) мож, и поломал чего, пока копипастил; 3) см.также fixme - у меня в wont fix.

А, да: linux (sles10/rhel6.3), bash, "обычные" утилиты.