Популярний Linux

Нові записи у блогах

Популярне

За останній час:

11.1. Команди управління завданнями

Деякі з наведених нижче команд приймають, як аргумент, "ідентифікатор завдання" . таблицю в кінці розділу.

Виводить список завдань, що виконуються на тлі. Командаps більш інформативна.

Завдання та процеси легко сплутати. Деякі внутрішні команди, такі якkill,disown іwait приймають як параметр або номер завдання, або номер процесу. Командиfg,bg таjobs приймають лише номер завдання.

"1" - це номер завдання (управління завданнями здійснює поточний командний інтерпретатор), а "1384" - номер процесу (управління процесами здійснюється системою). Завершити завдання/процес ("прикрити") можна або командоюkill %1, абоkill 1384.

Видаляє завдання з таблиці активних завдань командної оболонки.

fg,bg

Командаfg переводить завдання із фону на передній план. Командаbg перезапускає призупинене завдання у фоновому режимі. Якщо ці команди були викликані без вказівки номера завдання, вони впливають на поточне завдання.

wait

Зупиняє роботу сценарію, доки не будуть завершені всі фонові завдання або поки не буде завершено завдання/процес із зазначеним номером завдання/PID процесу. Повертає код завершення зазначеного завдання/процесу.

Ви можете використовувати командуwait для запобігання передчасному завершенню сценарію до завершення роботи фонового завдання.

Приклад 11-23. Очікування завершення процесу перед тим, як продовжити роботу

Командаwait може приймати необов'язковий параметр - номерзавдання/процесу, наприклад,wait %1 абоwait $PPID. Див. таблицю ідентифікації завдань.

При запуску команди у фоні зі сценарію може виникнути ситуація, коли сценарій припиняє свою роботу доти, доки не буде натиснуто клавішуENTER. Це, здається, відбувається з командами, які роблять висновок на stdout. Така поведінка може викликати роздратування у користувача.

Розмістивши командуwait, після запуску фонового завдання, можна запобігти такій поведінці сценарію.

Перенаправлення виводу на файл або навіть на пристрій /dev/null також знімає цю проблему.

Діє аналогічно натискання на комбінацію клавішControl+ -Z, за винятком того, що вона припиняє роботу командної оболонки.

logout

Завершує сеанс роботи командної оболонки, можна зазначити необов'язковий код завершення.

times

Видає статистику виконання команд в одиницях системного часу, у такому вигляді:

Має дуже обмежену сферу застосування, так як сценарії дуже рідко піддаються профілюванню.

kill

Примусове завершення процесу шляхом передачі відповідного сигналу (див. Приклад 13-5).

Приклад 11-24. Сценарій, що завершує себе сам за допомогою команди kill

Командаkill-l виведе список усіх сигналів. Командаkill -9 - це "жорсткий kill", вона використовується, як правило, для завершення завислих процесів, які завзято відмовляються "вмирати", відкидаючи простийkill. Іноді достатньо подати командуkill -15. " Процеси-зомбі " , тобто. процеси, "батьки" яких вже завершили роботу, не можуть бути "вбиті" у такий спосіб (неможливо "вбити" "мертвого"), рано чи пізно з ними "розправиться" процесinit.

Директиваcommand COMMAND забороняє використання псевдонімів та функцій під назвою "COMMAND" .

Це одна із трьох директив командного інтерпретатора, яка впливає на обробку команд. Інші дві — builtin та enable.

Конструкціяbuiltin BUILTIN_COMMAND запускає внутрішню команду "BUILTIN_COMMAND" , тимчасово забороняючи використання функцій та зовнішніх системних команд з тим самим ім'ям.

enable

Або забороняє, або дозволяє виклик внутрішніх команд. Наприклад,enable -n kill забороняє використання внутрішньої команди kill, у результаті, коли інтерпретатор зустріне командуkill, він викличе зовнішню командуkill, тобто. /bin/kill.

Команда enable -a виведе список усіх внутрішніх команд, вказуючи на кожну — чи справді вона дозволена. Команда enable -f filename завантажить внутрішні команди як бібліотеку (DLL), що розділяється, із зазначеного об'єктного файлу. [26].

autoload

Перенесена в Bash із ksh . Якщо функція оголошена якautoload, вона буде завантажена із зовнішнього файла в момент першого виклику. [27] Такий прийом допомагає заощаджувати системні ресурси.

Зверніть увагу:autoload не є частиною ядра Bash. Її необхідно завантажити за допомогою командиenable -f (див. вище).

Таблиця 11-1. Ідентифікація завдань