Процесс и способы коммуникации с процессами


Процесс

Процесс в Unix — это экземпляр запущенной программы.

Эту страницу Вы читаете в браузере, который тоже где-то запущен и является процессом (даже если у Вас Windows, Android или MacOs).

Все программы, запускаемые в шелле, являются процессом.

Но в некоторых шеллах бывают команды встроенные в сам шелл и не все из них создают процесс при работе, поэтому и в этом правиле есть исключения!


Например, если ввести в терминале команду

cut -f1 -d: /etc/passwd

и нажать Enter, указав шеллу, что эту команду нужно исполнить, то будет запущен процесс, выполняющий код утилиты cut с аргументами -f1, -d: и /etc/passwd.

Процесс распечатает список всех пользователей системы.


Способы передачи данных в процесс

Время жизни процесса


Способы передачи данных в процесс

Время жизни процесса

  1. Создан (Forking): Процесс создаётся с помощью системного вызова fork().
    Способы передать данные на этом этапе:
    • Аргументы и флаги: Передаются процессу при создании.
    • Переменные окружения: Наследуются от родительского процесса.

Способы передачи данных в процесс

Время жизни процесса

  1. Выполняется (Executing): После создания процесс начинает выполняться, часто используя системный вызов exec() для запуска программы.
    Способы передать данные на этом этапе:
    • Сигналы: Процессы могут отправлять и получать сигналы.
    • Дескрипторы файлов: через них реализована работа с файлами, в т.ч. с каналами (FIFO и пр.) и сокетами.

Способы передачи данных в процесс

Время жизни процесса

  1. Остановлен (Stopped): Выполняющийся процесс может быть временно остановлен сигналами, такими как SIGSTOP.
    Взаимодействие с процессом на этом этапе:
    • Сигналы: Остановленный процесс может быть возобновлен сигналами, такими как SIGCONT.

Способы передачи данных в процесс

Время жизни процесса

  1. Зомби (Termination): Когда процесс завершает выполнение, он становится зомби-процессом до тех пор, пока его родительский процесс не прочитает его статус завершения.
    Взаимодействие на этом этапе:
    • Код возврата: Родительскому процессу передаётся код возврата — это такое целое число, которое указывает как завершился процесс (успешно или с ошибками).

Способы передачи данных в процесс

Время жизни процесса

  1. Завершен (Terminated): Процесс полностью завершается и удаляется из таблицы процессов после того, как родительский процесс прочитает его код возврата, обычно используя wait().