Как тестировщикам программного обеспечения, нам иногда необходимо знать, как выглядит зомби-процесс в нашей системе. Мы можем проводить различные тесты на нем, если знаем, какая программа и идентификатор процесса связаны с этим зомби-процессом.
Что такое зомби-процесс?
Зомби или неработающий процесс в Linux - это процесс, который был завершен, но его запись все еще остается в таблице процессов из-за отсутствия соответствия между родительским и дочерним процессами.
Обычно родительский процесс следит за состоянием своих дочерних процессов с помощью функции wait(). Когда дочерний процесс завершает свою работу, функция wait сигнализирует родительскому процессу о полном выходе процесса из памяти. Однако если родительский процесс не вызывает функцию ожидания для любого из своих дочерних процессов, то дочерний процесс остается живым в системе как мертвый или зомби-процесс. Эти зомби-процессы могут накапливаться в большом количестве в вашей системе и влиять на ее производительность.
Если в вашей системе нет запущенного зомби-процесса, вы можете создать фиктивный процесс для целей тестирования, как описано в этой статье.
Создание зомби-процесса
В этом разделе мы напишем программу на языке C для запуска зомби-процесса в нашей системе.
1 | nano zombie.c |
Откройте текстовый редактор и введите следующий код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #include <stdlib.h> #include <sys/types.h> #include <unistd.h> int main () { pid_t child_pid;child_pid = fork (); if (child_pid > 0) { sleep (60); } else { exit (0); } return 0; } |
Сохраните этот файл под именем zombie.c
Зомби-процесс, созданный с помощью этого кода, будет работать в течение 60 секунд. Вы можете увеличить продолжительность времени, указав время (в секундах) в функции sleep().
Откройте терминал и выполните следующую команду для компиляции этой программы:
1 | cc zombie.c -o zombie |
Теперь будет создан исполняемый файл с именем zombie.
Обратите внимание, что вам нужно установить компилятор GNU C, если он еще не установлен в вашей системе, выполните следующую команду:
1 | sudo apt-get install build-essential |
Теперь запустите программу zombie с помощью следующей команды:
1 | ./zombie |
Вы можете использовать ID родительского процесса (PPID) и ID дочернего процесса (PID) во время тестирования; например, убив этот зомби-процесс с помощью команды kill.
Пока этот процесс запущен, вы можете просмотреть производительность системы в другом окне терминала с помощью команды top. Вы сможете увидеть 1 зомби-процесс во второй строке вывода.
Команда ps теперь также покажет этот неработающий процесс и зомби-программу, ответственную за него:
1 | ps axo stat,ppid,pid,comm | grep -w defunct |
Эта команда покажет вам
- Cостояние
- ParentID процесса
- ID процесса
- Программу, которая запускает зомби-процесс (программа-зомби, которую мы запускали в этом уроке).
Теперь вы узнали, как создать простой фиктивный зомби-процесс. Это даст вам представление о том, как он выглядит в вашей системе и как его можно использовать в целях тестирования.