Процесс и способы коммуникации с процессами
Процесс
Процесс в Unix — это экземпляр запущенной программы.
Эту страницу Вы читаете в браузере, который тоже где-то запущен и является процессом (даже если у Вас Windows, Android или MacOs).
Все программы, запускаемые в шелле, являются процессом.
Но в некоторых шеллах бывают команды встроенные в сам шелл и не все из них создают процесс при работе, поэтому и в этом правиле есть исключения!
Например, если ввести в терминале команду
cut -f1 -d: /etc/passwd
и нажать Enter
, указав шеллу, что эту команду нужно исполнить, то будет
запущен процесс, выполняющий код утилиты cut
с аргументами -f1
, -d:
и
/etc/passwd
.
Процесс распечатает список всех пользователей системы.
Способы передачи данных в процесс
Время жизни процесса
Способы передачи данных в процесс
Время жизни процесса
- Создан (Forking): Процесс создаётся с помощью системного вызова
fork()
.
Способы передать данные на этом этапе:- Аргументы и флаги: Передаются процессу при создании.
- Переменные окружения: Наследуются от родительского процесса.
Способы передачи данных в процесс
Время жизни процесса
- Выполняется (Executing): После создания процесс начинает выполняться, часто используя системный вызов
exec()
для запуска программы.
Способы передать данные на этом этапе:- Сигналы: Процессы могут отправлять и получать сигналы.
- Дескрипторы файлов: через них реализована работа с файлами, в т.ч. с каналами (FIFO и пр.) и сокетами.
Способы передачи данных в процесс
Время жизни процесса
- Остановлен (Stopped): Выполняющийся процесс может быть временно остановлен сигналами, такими как
SIGSTOP
.
Взаимодействие с процессом на этом этапе:- Сигналы: Остановленный процесс может быть возобновлен сигналами, такими как
SIGCONT
.
- Сигналы: Остановленный процесс может быть возобновлен сигналами, такими как
Способы передачи данных в процесс
Время жизни процесса
- Зомби (Termination): Когда процесс завершает выполнение, он становится зомби-процессом до тех пор, пока его родительский процесс не прочитает его статус завершения.
Взаимодействие на этом этапе:- Код возврата: Родительскому процессу передаётся код возврата — это такое целое число, которое указывает как завершился процесс (успешно или с ошибками).
Способы передачи данных в процесс
Время жизни процесса
- Завершен (Terminated): Процесс полностью завершается и удаляется из таблицы процессов после того, как родительский процесс прочитает его код возврата, обычно используя
wait()
.