Як використовувати трасування для моніторингу системних викликів Linux

Jun 23, 2025
Linux,
Fatmawati Achmad Zaenuri / Shutterstock.com

Програми Linux запитують ядро робити деякі речі для них. Точний штрих Команда показує ці системні дзвінки. Ви можете використовувати їх, щоб зрозуміти, як програми працюють і чому, іноді, вони цього не роблять.

Джерело та системні дзвінки

Як розумні, як вони можуть бути, комп'ютерні програми не можуть робити все для себе. Вони повинні робити запити, щоб мати певні функції для них. Ці запити йдуть до ядра Linux. Як правило, існує бібліотека або інший інтерфейс програмного забезпечення, який викликає програму, а бібліотека потім робить відповідний запит, який називається системним викликом до ядра.

Можливість перегляду системи закликає, що програма зробила, і які відповіді можуть допомогти вам зрозуміти внутрішню роботу програм, які вас цікавлять, або що ви написали. Це що штрих робити . Це може допомогти усунути проблеми та шукати вузькі місця.

Це не те ж саме, як налагодження програми з таким інструментом грн . Програма налагодження дозволяє досліджувати внутрішню роботу програми, як це працює. Він дозволяє вийти через логіку вашої програми та перевіряти пам'ять та змінні значення. Порівняно, що штрих Чи є захоплення інформацією про систему, оскільки програма працює. Коли простежується програма, закінчується, штрих Перераховує інформацію про систему до вікна терміналу.

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

Пов'язані: Налагодження з GDB: Початок роботи

Встановлення нитки

Якщо штрих На вашому комп'ютері ще не встановлено, ви можете легко встановити його.

На Ubuntu використовуйте цю команду:

 sudo apt install strid 

На Fedora введіть цю команду:

 sudo dnf встановлює нитку 

На Manjaro команда:

 Sudo Pacman-STRACE 

Перші кроки зі строком

Ми будемо використовувати невелику програму для демонстрації штрих . Це не робить багато: він відкриває файл і записує до нього лінію тексту, і він не має жодної помилки. Це просто швидкий хак, щоб у нас є щось для використання штрих .

 #include & lt; stdio.h & gt;

int main (int argc, char argv []) {

  // файлова ручка
  Файл * filegeek;

  // Відкрити файл під назвою "stray_demo.txt", або створити його
  FileGeek = Fopen ("stray_demo.txt", "w");

  // написати текст до файлу
  fprintf (filegeek, "Напишіть це до файлу");

  // закрити файл
  fclose (filegeek);

  // Вихід з програми
  повернення (0);

} // кінець головної 

Ми врятували це у файл під назвою "file-io.c" і склав його гнучкий в виконуваний виклик стекс , названий за " вул гонка колишній достатньо.

 GCC -o stex file-io.c 

Ми зателефонуємо штрих З командного рядка і передайте ім'я нашого нового виконуваного до нього, як процес, який ми хочемо простежити. Ми могли б так само легко простежити будь-який з команд Linux або будь-який інший бінарний виконуваний. Ми використовуємо нашу крихітну програму з двох причин.

Перша причина штрих verlose. Там може бути багато випуску. Це здорово, коли ви використовуєте штрих У гніві, але спочатку це може бути переважним. Є обмежені штрих випуск для нашої крихітної програми. Друга причина полягає в тому, що наша програма має обмежену функціональність, а вихідний код короткий і простий. Це полегшує визначення того, які розділи виходу відносяться до різних частин внутрішньої роботи програми.

 Склад ./stex

Ми можемо чітко бачити писати Системний виклик Надсилання тексту "Напишіть це у файл" до нашого відкритого файлу та Exit_Group системний дзвінок. Це припиняє всі теми в заявці та надсилає зворотне значення назад до оболонки.

Фільтрування виходу

Навіть з нашою простим демонстраційною програмою, досить багато випуску. Ми можемо використовувати (вираз) варіант. Ми перейдемо в ім'я системного виклику, що ми хочемо бачити.

 Strace - писати ./stex

Ви можете повідомити про кілька системних дзвінків, додавши їх як список, розділений комами. Не включайте будь-який пробіл у списку системних дзвінків.

 Страс - Закрити, пишіть ./stex

Відправка вихід до файлу

Перевага фільтрації виходу також є проблемою з фільтрацією виходу. Ви бачите, що ви попросили побачити, але ви не бачите нічого іншого. І деякі з них інші вихід можуть бути більш корисними для вас, ніж речі, які ви попросили побачити.

Іноді зручніше захопити все і шукати і прокручувати весь набір результатів. Таким чином, ви не випадково не виключаєте нічого важливого. Точний (вихідний) параметр дозволяє відправляти вихід з a штрих сеанс до текстового файлу.

 Strace -o trace-vection.txt ./stex

Потім ви можете використовувати менш командування щоб прокрутити перелік та пошук системних дзвінків або що-небудь інше-за назвою.

 Менше трас-висновок.txt 

Тепер ви можете використовувати все менш Можливості пошуку для вивчення вибуху.

Пов'язані: Як використовувати меншу команду на Linux

Додавання міток

Ви можете додати кілька різних мітків до виходу. Точний -r (Відносний міністр) варіант додає часові терміни, які показують різницю часу між початком кожного послідовного дзвінка системи. Зверніть увагу, що ці значення часу включатимуть час, витрачений у попередній системній дзвінку та що-небудь ще, що програма робила до наступного системного дзвінка.

 Strace -r ./stex

Часові мітки відображаються на початку кожного рядка виходу.

Щоб побачити кількість часу, витраченого в кожному системному дзвінку, використовуйте (Syscall-times) варіант. Це показує тривалість часу, витраченого всередині кожного системного дзвінка.

 Strace -t ./stex

Час тривоги відображаються в кінці кожної лінії системи виклику.

Щоб побачити час, коли кожен системний дзвінок був названий, використовуйте -tt (Абсолютні часові завдання). Це показує час "настінного годинника", з мікросекундним дозволом.

 Strace -tt ./stex

Час відображаються на початку кожного рядка.

Відстеження бігового процесу

Якщо процес, який ви хочете відстежувати, вже працює, ви все ще можете прикріпити штрих до цього. Для цього потрібно знати ідентифікатор процесу. Ти можеш використання псувати з грунт щоб знайти це. У нас працює Firefox. Щоб дізнатися ідентифікатор пожежник процес, ми можемо використовувати псувати і через грунт .

 PS -E | Grep Firefox 

Ми бачимо, що ідентифікатор процесу 8483. ми будемо використовувати -п (Ідентифікатор процесу), щоб розповісти штрих який процес прикріплюється. Зауважте, що вам потрібно буде використовувати судно :

 Sudo Strace -P 8483 

Ви побачите це повідомлення штрих Додав себе до процесу, а потім телефонні сліди виклики будуть відображатися у вікні терміналу, як завжди.

Створення звіту

Точний "" "" ") (Тільки підсумки) варіанти причини штрих надрукувати звіт. Він генерує таблицю для отримання інформації про системні дзвінки, зроблені простеженою програмою.

 Strime -c ./stex

Колони:

  • % часу : Відсоток часу виконання, який був витрачений у кожному системному виклику.
  • секунд : Загальний час, виражений у секундах та мікросекундах, витрачених у кожному системному дзвінку.
  • usecs / call : Середній час у мікросекундах, витрачений у кожному системному виклику.
  • дзвінки : Кількість разів, коли кожен системний дзвінок був виконаний.
  • помилки : Кількість несправностей для кожного системного дзвінка.
  • сидіти : Назва системного дзвінка.

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

Глибокі уявлення, легко

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

З допомогою штрих , ви бачите повну картину.


Linux, - Найпопулярніші статті

The Best Дистрибутиви Linux без Systemd

Linux, Feb 24, 2025

BMJ / Shutterstock.com Коли приймаються домінуючі дистрибутиви систематичний , Розкольник..


Як заблокувати Mac Використання терміналу

Linux, Feb 16, 2025

Одним з перших правил кібербезпеки є завжди заблокувати комп'ютер, перш ніж вийти від нього. Хоча це м�..


Як використовувати "тут документи" у Баші на Linux

Linux, Mar 31, 2025

Fatmawati Achmad Zaenuri / Shutterstock Дивно, названі «тут документи» дозволяють використовувати вхід /..


How to Update Arch Linux

Linux, Jul 30, 2025

Проект Ubuntu Має час, щоб оновити систему Arch Linux? Незалежно від того, чи ви на чисту арку а..


Як вийти з вашого Mac за допомогою терміналу

Linux, Aug 8, 2025

Apple дозволяє легко вийти з вашого Mac за допомогою опції в панелі меню робочого столу. Але є також пара к..


Що таке Unix Epoch, і як Unix Час роботи?

Linux, Nov 10, 2024

Михайло Леонов / Shutterstock Unix зберігає час як кількість секунд, що пройшли з 1 січня 1970 року..


Як знайти PID процесу Linux за допомогою PIDOF або PGREP

Linux, Nov 15, 2024

Робота з процесом Linux часто означає знати його ідентифікатор процесу або PID. Це унікальний номер, що надає�..


5 функцій Ubuntu Linux, які ви повинні використовувати

Linux, Dec 6, 2024

Ubuntu Linux є багатим і постачається з кураторним вибором попередньо встановленого програмного забезпечення..


Категорії