Како користити команду за временско ограничење на Линуку

ОК, довољно је времена за компјутер. Процесима можете дати временска ограничења, постављајући максимално време за које могу да раде помоћу наредбе тимеоут. Ево упутства за постављање ограничења на покретање програма са овом командом.

Шта вам тајмаут чини?

Команда тимеоут вам омогућава да поставити ограничење на дужину времена програм ће се покренути за. Али зашто бисте то желели да урадите?

Један случај је када тачно знате колико дуго желите да процес траје. Уобичајени случај употребе је да временско ограничење контролише програм за евидентирање или снимање података тако да датотеке евиденције не би немилосрдно прождиле простор на вашем чврстом диску.

Други случај је када не знате колико дуго желите да процес траје, али знате да не желите да траје бесконачно. Можда имате навику да покренете процесе, минимизирате прозор терминала и заборавите на њих.

Неки програми – чак и једноставни услужни програми – могу да генеришу мрежни саобраћај на нивоима који могу да ометају перформансе ваше мреже. Или могу да повежу ресурсе на циљном уређају, успоравајући његове перформансе. (пинг, гледам те.) Лоша пракса је оставити ове врсте програма да раде на дужи период док сте далеко од рачунара.

временско ограничење је део ГНУ Цоре Утилс тако да Линук и оперативни системи слични Унику, као што је мацОС, имају уграђено временско ограничење. Нема шта да се инсталира; можете га користити одмах из кутије.

Почетак рада са временским ограничењем

Ево једноставног примера. На пример, са својим подразумеваним опцијама командне линије, команда пинг ће се покретати све док је не зауставите притиском на Цтрл+Ц. Ако га не прекинете, само ће наставити.

ping 192.168.4.28

Коришћењем временског ограничења, можемо да осигурамо да се пинг не покреће и наставља, жваћући мрежни пропусни опсег и гњавити било који уређај који се пингује.

  Како аутоматски лајковати објаве на Инстаграму

Ова следећа команда користи временско ограничење за временско ограничење пинга. Дозвољавамо 15 секунди времена рада за пинг.

timeout 15 ping 192.168.4.28

Након 15 секунди временско ограничење прекида пинг сесију и враћамо се на промпт командне линије.

Коришћење временског ограничења са другим временским јединицама

Имајте на уму да нисмо морали да додамо „с“ иза 15. Тимеоут претпоставља да је вредност у секундама. Можете додати „с“, али то заиста нема разлике.

Да бисте користили временску вредност мерену у минутима, сатима или данима, додајте „м“, „х“ или „д“.

Да бисте покренули пинг три минута, користите следећу команду:

timeout 3m ping 192.168.4.28

пинг ће радити три минута пре него што наступи временско ограничење и заустави пинг сесију.

Ограничавање хватања података са временским ограничењем

Неке датотеке за прикупљање података могу веома брзо да нарасту. Да бисте спречили да такве датотеке постану гломазне или чак проблематичне по величини, ограничите временско трајање програма за снимање.

У овом примеру користимо тцпдумп, а хватање мрежног саобраћаја оруђе. На тест машинама на којима је овај чланак истраживан, тцпдумп је већ инсталиран у Убунту Линук и Федора Линук. Морао је да се инсталира на Мањаро Линук и Арцх Линук, са следећом командом:

sudo pacman -Syu tcpdump

Можемо да покренемо тцпдумп 10 секунди са његовим подразумеваним опцијама и преусмеримо његов излаз у датотеку под називом цаптуре.ткт са следећом командом:

timeout 10 sudo tcpdump > capture.txt

тимеоут 10 судо тцпдумп > цаптуре.ткт у прозору терминала” видтх=”646″ хеигхт=”77″ онлоад=”пагеспеед.лазиЛоадИмагес.лоадИфВисиблеАндМаибеБеацон(тхис);”  онеррор=”тхис.онеррор=нулл;пагеспеед.лазиЛоадИмагес.лоадИфВисиблеАндМаибеБеацон(тхис);”></п> <п>(тцпдумп има сопствене опције да сачува ухваћени мрежни саобраћај у датотеци. Ово је брз хак јер ми поново разговарамо о временском ограничењу, а не о тцпдумпу.)</п> <п>тцпдумп почиње да хвата мрежни саобраћај и чекамо 10 секунди.  И 10 секунди дође и прође, а тцпдумп и даље ради, а цаптуре.ткт и даље расте.  Биће потребан брзи Цтрл+Ц да се заустави тцпдумп.</п> <п>Провера величине цаптуре.ткт помоћу лс показује да је нарасла на 209К за неколико секунди.  Тај фајл је брзо растао!</п> <пре>лс -лх цаптуре.ткт</пре> <п><имг срц=

Шта се десило? Зашто временско ограничење није зауставило тцпдумп?

  Како уклонити хипервезе из Гоогле докумената

Све је у вези са сигналима.

Слање правог сигнала

Када временско ограничење жели да заустави програм, он шаље СИГТЕРМ сигнал. Ово љубазно тражи од програма да се прекине. Неки програми могу изабрати да игноришу сигнал СИГТЕРМ. Када се то догоди, морамо да кажемо да тајм-аут буде мало снажнији.

То можемо учинити тако што ћемо затражити временско ограничење за слање сигнала СИГКИЛЛ.

Сигнал СИГКИЛЛ не може бити „ухваћен, блокиран или игнорисан“ – увек пролази. СИГКИЛЛ не љубазно тражи од програма да се заустави. СИГКИЛЛ се крије иза ћошка са штоперицом и косом.

Можемо користити опцију -с (сигнал) да кажемо временском ограничењу за слање сигнала СИГКИЛЛ.

timeout -s SIGKILL 10 sudo tcpdump > capture.txt

тимеоут -с СИГКИЛЛ 10 судо тцпдумп > цаптуре.ткт у прозору терминала” видтх=”646″ хеигхт=”167″ онлоад=”пагеспеед.лазиЛоадИмагес.лоадИфВисиблеАндМаибеБеацон(тхис);”  онеррор=”тхис.онеррор=нулл;пагеспеед.лазиЛоадИмагес.лоадИфВисиблеАндМаибеБеацон(тхис);”></п> <п>Овај пут, чим прође 10 секунди, тцпдумп се зауставља.</п> <п><п>Овај пут, чим прође 10 секунди. имг срц=“ http:=““ width=“646″ height=“197″/></p>
<h2 role=Прво љубазно питајте

Можемо тражити временско ограничење да покушамо да зауставимо програм користећи СИГТЕРМ и да пошаљемо СИГКИЛЛ само ако СИГТЕРМ не ради.

Да бисмо то урадили, користимо опцију -к (килл афтер). Опција -к захтева временску вредност као параметар.

У овој команди тражимо временско ограничење да пустимо дмесг да ради 30 секунди, а затим га прекинемо сигналом СИГТЕРМ. Ако дмесг и даље ради након 40 секунди, то значи да је дипломатски СИГТЕРМ игнорисан и временско ограничење треба да пошаље СИГКИЛЛ да заврши посао.

дмесг је услужни програм који може надгледајте поруке бафера прстена језгра и приказати их у прозору терминала.

timeout -k 40 30 dmseg -w

дмесг ради 30 секунди и зауставља се када прими сигнал СИГТЕРМ.

Знамо да није СИГКИЛЛ зауставио дмесг јер СИГКИЛЛ увек оставља читуљу од једне речи у прозору терминала: „Убијен“. То се у овом случају није догодило.

Преузимање излазног кода програма

Програми који се добро понашају прослеђују вредност назад у љуску када се заврше. Ово је познато као излазни код. Обично се ово користи да каже љусци – или било ком процесу који је покренуо програм – да ли је програм наишао на проблеме док је радио.

  12 анализатора мрежних пакета за Сисадмин и безбедносне аналитичаре

тимеоут обезбеђује сопствени излазни код, али нас то можда није брига. Вероватно нас више занима излазни код из процеса који контролише временско ограничење.

Ова команда омогућава пинг да ради пет секунди. Пингује рачунар под називом Ностромо, који се налази на тестној мрежи која је коришћена за истраживање овог чланка.

timeout 5 ping Nostromo.local

Команда ради пет секунди и временско ограничење је прекида. Затим можемо проверити излазни код помоћу ове команде:

echo $?

Излазни код је 124. Ово је вредност која се користи да означи да је програм прекинут коришћењем СИГТЕРМ-а. Ако СИГКИЛЛ прекине програм, излазни код је 137.

Ако прекинемо програм са Цтрл+Ц, излазни код из временског ограничења је нула.

timeout 5 ping Nostromo.local
echo $?

Ако се извршавање програма заврши пре него што га прекине временско ограничење, тимеоут може да проследи излазни код из програма назад у љуску.

Да би се ово догодило, програм мора да се заустави сам од себе (другим речима, не прекида се тимеоутом), и морамо користити опцију –пресерве-статус.

Ако користимо опцију -ц (цоунт) са вредношћу од пет, пинг ће покренути само пет захтева. Ако дамо временско ограничење од једног минута, пинг ће се дефинитивно прекинути сам од себе. Затим можемо проверити излазну вредност користећи ехо.

timeout --preserve-status 1m ping -c 5 Nostromo.local
echo $?

пинг завршава својих пет пинг захтева и завршава. Излазни код је нула.

Да бисмо проверили да излазни код долази од пинга, хајде да приморанимо пинг да генерише другачији излазни код. Ако покушамо да пошаљемо пинг захтеве на непостојећу ИП адресу, пинг неће успети са излазним кодом грешке. Затим можемо користити ехо да проверимо да ли је излазни код различит од нуле.

timeout --preserve-status 1m ping -c 5 NotHere.local
echo $?

Команда пинг очигледно не може да стигне до непостојећег уређаја, па пријављује грешку и затвара се. Излазни код је два. Ово је излазни код који пинг користи за опште грешке.

Постављање основних правила

Тимеоут се односи на пружање неких граница за покретање програма. Ако постоји опасност да датотеке евиденције могу да прегазе ваш чврсти диск или да заборавите да сте оставили мрежни алат који ради, умотајте их у временско ограничење и пустите рачунар да се саморегулише.