Как да използвате командата за изчакване в Linux

Лаптоп с Linux, показващ подкана за bash

Фатмавати Ахмад Заенури/Shutterstock.com



Добре, това е достатъчно време за компютър. Можете да зададете времеви ограничения на процесите, като зададете максимално време, за което могат да работят с командата |_+_|. Ето урок за поставяне на ограничения за стартиране на програми с тази команда.

Какво прави времето за изчакване за вас?

|_+_| командата ви позволява да задайте ограничение за продължителността на времето програма ще се изпълнява за. Но защо бихте искали да направите това?





Един случай е, когато знаете точно колко време искате да продължи даден процес. Често срещан случай на използване е да имате |_+_| контролирайте програма за регистриране или заснемане на данни, така че регистрационните файлове да не поглъщат безмилостно пространството на вашия твърд диск.

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



Някои програми – дори прости помощни програми – могат да генерират мрежов трафик на нива, които могат да попречат на производителността на вашата мрежа. Или могат да обвържат ресурсите на целево устройство, забавяйки неговата производителност. (|_+_|, гледам ви.) Оставянето на тези типове програми да работят за продължителни периоди, докато сте далеч от компютъра си, е лоша практика.

Реклама

|_+_| е част от GNU Core Utils така че Linux и Подобно на Unix Всички операционни системи като macOS имат вградено време за изчакване. Няма нищо за инсталиране; можете да го използвате направо от кутията.

Първи стъпки с изчакване

Ето един прост пример. Например, с опциите на командния ред по подразбиране, |_+_| командата ще работи, докато не я спрете, като натиснете Ctrl+C. Ако не го прекъснете, то просто ще продължи.



timeout

Използвайки |_+_|, можем да се уверим, че |_+_| не работи непрекъснато, дъвчейки честотната лента на мрежата и безпокоя каквото и да е устройство, което се пингува.

Следващата команда използва |_+_| до времево ограничение |_+_|. Разрешаваме 15 секунди време за изпълнение за |_+_|.

timeout

След 15 секунди |_+_| прекратява |_+_| сесия и се връщаме към подканата на командния ред.

Използване на изчакване с други единици за време

Обърнете внимание, че не трябваше да добавяме s зад 15. |_+_| приема, че стойността е в секунди. Можете да добавите s, но наистина няма разлика.

Реклама

За да използвате времева стойност, измерена в минути, часове или дни, добавете m, h или d.

За да стартирате ping за три минути, използвайте следната команда:

timeout

|_+_| ще работи три минути преди |_+_| влиза и спира |_+_| сесия.

ping сесия, изпълнявана в терминална вдовица

Ограничаване на улавянето на данни с изчакване

Някои файлове за улавяне на данни могат да нараснат много бързо. За да предотвратите такива файлове да станат тромави или дори проблемни по размер, ограничете времето, през което програмата за заснемане може да работи.

В този пример използваме |_+_|, a улавяне на мрежов трафик инструмент. На тестовите машини, върху които е изследвана тази статия, |_+_| вече беше инсталиран в Ubuntu Linux и Fedora Linux. Трябваше да бъде инсталиран на Manjaro Linux и Arch Linux, със следната команда:

ping

Можем да изпълним |_+_| за 10 секунди с неговите опции по подразбиране и пренасочва изхода му към файл, наречен capture.txt със следната команда:

timeout

Реклама

(|_+_| има свои собствени опции за запазване на заловен мрежов трафик във файл. Това е бърз хак, защото обсъждаме |_+_|, а не |_+_|.)

|_+_| започва да улавя мрежовия трафик и чакаме 10 секунди. И 10 секунди идват и си отиват и |_+_| все още работи, а capture.txt все още нараства по размер. Ще е необходимо прибързано Ctrl+C, за да спрете |_+_|.

Проверка на размера на capture.txt с |_+_| показва, че нарасна до 209K за броени секунди. Този файл растеше бързо!

ping

Какво стана? Защо не |_+_| спре |_+_|?

Всичко е свързано със сигнали.

Изпращане на правилния сигнал

Когато |_+_| иска да спре програма, която изпраща Сигнал SIGTERM . Това учтиво моли програмата да бъде прекратена. Някои програми може да изберат да игнорират сигнала SIGTERM. Когато това се случи, трябва да кажем |_+_| да бъде малко по-силно.

Можем да направим това, като попитаме |_+_| вместо това да изпратите сигнала SIGKILL.

Сигналът SIGKILL не може да бъде уловен, блокиран или игнориран – той винаги преминава. SIGKILL не моли учтиво програмата да спре. SIGKILL се крие зад ъгъла с хронометър и кош.

Реклама

Можем да използваме |_+_| (сигнал) опция за казване |_+_| за изпращане на сигнала SIGKILL.

timeout

Този път, щом изминат 10 секунди, |_+_| е спряно.

Първо питайте учтиво

Можем да попитаме |_+_| да опитате да спрете програмата с помощта на SIGTERM и да изпратите SIGKILL само ако SIGTERM не работи.

За да направим това, използваме |_+_| опция (убийте след). |_+_| опцията изисква времева стойност като параметър.

В тази команда ние питаме |_+_| да оставя |_+_| стартирайте за 30 секунди и след това го прекратите със сигнала SIGTERM. Ако |_+_| продължава да работи след 40 секунди, това означава, че дипломатическата SIGTERM е била игнорирана и |_+_| трябва да изпрати SIGKILL, за да завърши работата.

|_+_| е помощна програма, която може следете съобщенията за пръстен буфер на ядрото и ги покажете в прозорец на терминала.

ping

Реклама

|_+_| работи за 30 секунди и спира, когато получи сигнала SIGTERM.

Знаем, че не SIGKILL спря |_+_| защото SIGKILL винаги оставя некролог с една дума в прозореца на терминала: Убит. Това не се случи в случая.

Извличане на изходния код на програмата

Добре работещите програми предават стойност обратно на обвивката, когато завършват. Това е известно като изходен код. Обикновено това се използва, за да се каже на обвивката – или на какъвто и да е процес, стартирал програмата – дали програмата е срещнала проблеми, докато се изпълнява.

|_+_| предоставя свой собствен изходен код, но може да не ни интересува това. Вероятно се интересуваме повече от кода за изход от процеса, който |_+_| контролира.

Тази команда позволява |_+_| бягайте за пет секунди. Той пингува компютър, наречен Nostromo, който е в тестовата мрежа, използвана за изследване на тази статия.

timeout

Командата се изпълнява за пет секунди и |_+_| го прекратява. След това можем да проверим изходния код с помощта на тази команда:

ping

Реклама

Изходният код е 124. Това е стойността |_+_| използва, за да покаже, че програмата е прекратена с помощта на SIGTERM. Ако SIGKILL прекрати програмата, изходният код е 137.

Ако прекъснем програмата с Ctrl+C, изходният код от |_+_| е нула.

ping timeout

Ако изпълнението на програмата приключи преди |_+_| прекратява го, |_+_| може да предаде кода за изход от програмата обратно в обвивката.

За да се случи това, програмата трябва да спре от само себе си (с други думи, така е не завършва с |_+_|), и трябва да използваме |_+_| опция.

Ако използваме |_+_| (брой) опция със стойност пет |_+_| ще задейства само пет заявки. Ако дадем |_+_| продължителност една минута, |_+_| определено ще приключи от само себе си. След това можем да проверим изходната стойност, използвайки |_+_|.

ping timeout

|_+_| завършва своите пет ping заявки и прекратява. Изходният код е нула.

Реклама

За да проверите, че кодът за изход идва от |_+_|, нека принудим |_+_| за генериране на различен код за изход. Ако се опитаме да изпратим ping заявки до несъществуващ IP адрес, |_+_| ще се провали с код за изход за грешка. След това можем да използваме |_+_| за да проверите дали изходният код е различен от нула.

ping timeout

|_+_| командата очевидно не може да достигне до несъществуващо устройство, така че съобщава за грешката и се затваря. Изходният код е два. Това е изходният код |_+_| използва за общи грешки.

Задаване на основни правила

|_+_| е свързано с осигуряване на някои граници на работещите програми. Ако има опасност лог файловете да превземат твърдия ви диск или да забравите, че сте оставили работещ мрежов инструмент, увийте ги в |_+_| и оставете компютъра си да се саморегулира.

Linux команди
Файлове катран · pv · котка · такт · chmod · сцепление · разл · sed · С · човек · pushd · popd · fsck · тестов диск · сек · fd · пандока · CD · $PATH · awk · присъединяване · jq · сгънете · уникален · journalctl · опашка · състояние · ls · fstab · изхвърли · по-малко · chgrp · chown · rev · виж · струни · Тип · преименувайте · цип · разархивирайте · монтиране · umount · Инсталирай · fdisk · mkfs · rm · rmdir · rsync · df · gpg · ние · нано · mkdir · от · вътрешен · кръпка · преобразувам · rclone · накъсайте · SRM
процеси псевдоним · екран · връх · хубаво · renice · напредък · strace · система · tmux · chsh · история · в · партида · Безплатно · който · dmesg · потребителски мод · п.с · chroot · xargs · tty · мизичко · lsof · vmstat · изчакване · стена · да · убиват · сън · sudo · неговата · време · groupadd · потребителски мод · групи · lshw · изключвам · рестартирайте · Спри се · изключване · passwd · lscpu · crontab · дата · bg · fg
Работа в мрежа netstat · пинг · трасиране · ip · ss · кой е · fail2ban · bmon · Вие · пръст на ръката · nmap · ftp · къдрица · wget · Кой · кой съм аз · В · iptables · ssh-keygen · ufw

СВЪРЗАНИ: Най-добрите Linux лаптопи за разработчици и ентусиасти

ПРОЧЕТЕТЕ СЛЕДВАЩО Снимка на профила на Дейв Маккей Дейв Маккей
Дейв Маккей за първи път използва компютри, когато перфорираната хартиена лента беше на мода и оттогава той програмира. След повече от 30 години в ИТ индустрията, той вече е технологичен журналист на пълен работен ден. По време на кариерата си той е работил като програмист на свободна практика, мениджър на международен екип за разработка на софтуер, ръководител на проекти за ИТ услуги и, последно, като служител по защита на данните. Неговото писане е публикувано от howtogeek.com, cloudsavvyit.com, tenterpriser.com и opensource.com. Дейв е евангелист на Linux и привърженик на отворен код.
Прочетете пълната биография

Интересни Статии