Всем доброго дня. Есть ли во freebsd команда timeout как в linux?
Задача запускать другие команды на несколько секунд.
P.S. То ли гуглю неудачно, но сходу ничего не нашел.
> Всем доброго дня. Есть ли во freebsd команда timeout как в linux?A /bin/sleep не подойдет...
>> Всем доброго дня. Есть ли во freebsd команда timeout как в linux?
> A /bin/sleep не подойдет...Тогда дополнительно придется kill pid или killall program
>>> Всем доброго дня. Есть ли во 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 ...
>>>> Всем доброго дня. Есть ли во 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 из портов
>>> Всем доброго дня. Есть ли во freebsd команда timeout как в linux?
>> A /bin/sleep не подойдет...
> Тогда дополнительно придется kill pid или killall program/usr/ports/sysutils/coreutils
ничего не придется менять кроме timeout --на--> gtimeout
ps. timeout является частью coreutils, ставите порт и получаете (g)timeout
>>>> Всем доброго дня. Есть ли во 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
>>>>> Всем доброго дня. Есть ли во 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
#
> A /bin/sleep не подойдет...верное утверждение.
> Всем доброго дня. Есть ли во freebsd команда timeout как в linux?
> Задача запускать другие команды на несколько секунд.Ну, я на bash-е делал: запуск осн.команды в bg, запуск 'sleep $TO;kill $PID_JOB_1', потом wait и сбор/интерпрпетайия результатов(RC1/RC2). Код давать?:*D
>> Всем доброго дня. Есть ли во freebsd команда timeout как в linux?
>> Задача запускать другие команды на несколько секунд.
> Ну, я на bash-е делал: запуск осн.команды в bg,Имелось в виду: это--^ ~ $job_1_command & ~
> запуск 'sleep $TO;kill $PID_JOB_1'
, а это ~ { sleep $timeout; kill $PID_OF_JOB_1; } & ~ job#2
> , потом wait
- того из этих двух, который _первым завершится.
>>> Всем доброго дня. Есть ли во 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 решил данную задачу, но если код не очень далеко, то было бы интересно глянуть, так как задач еще много)
>[оверквотинг удален]
>>>> Задача запускать другие команды на несколько секунд.
>>> Ну, я на 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, "обычные" утилиты.