>[оверквотинг удален]
>>>> Задача запускать другие команды на несколько секунд.
>>> Ну, я на 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, "обычные" утилиты.