Популярний 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. Ідентифікація завдань