Группы процессов, сеансы и управление заданиями

В этой главе мы познакомимся с группами процессов, сессиями и управлением заданиями.

Группа процессов - Группа процессов - это совокупность одного или нескольких процессов. Группа процессов состоит из одного или нескольких процессов, совместно использующих один и тот же идентификатор группы процессов (PGID). Идентификатор группы процессов (PGID) того же типа (pid_t), что и идентификатор процесса. У группы процессов есть лидер группы процессов, который является процессом, который создает группу, и чей идентификатор процесса становится идентификатором группы процессов группы.

Сессии - это набор различных групп процессов.

Управление заданиями - это позволяет пользователю оболочки одновременно выполнять несколько команд (или заданий), одну на переднем плане и все остальные на заднем плане. Также возможно переместить задания с переднего плана на задний план и наоборот.

Давайте разберемся с этим на примере программ / с использованием оболочки (BASH).

  • Сценарий оболочки (в BASH) для выполнения основных команд (date, echo, sleep и cal) с именем basic_commands.sh

  • Сценарий оболочки (в BASH) для выполнения основных команд (ps, echo)

#!/bin/bash
#basic_commands.sh

date
echo "Now sleeping for 250 seconds, so that testing job control functionality is smooth"
sleep 250
cal

#!/bin/bash
#process_status.sh

ps
echo "Now sleeping for 200 seconds, so that testing job control functionality is smooth"
sleep 200
ps

Используйте команду chmod, чтобы дать файлу права на выполнение. По умолчанию обычный файл получит только разрешения на чтение и запись, а не разрешения на выполнение.

Чтобы остановить текущий запущенный процесс, вам нужно нажать CTRL + Z. Это дает вам номер работы. Работа может быть возобновлена либо на переднем плане, либо на заднем плане. Если необходимо, чтобы возобновить работу на переднем плане, используйте команду «fg». Если необходимо, чтобы возобновить работу в фоновом режиме, используйте команду «bg». Используя это, он будет запускать только последний остановленный процесс. Что делать, если вы хотите запустить другой, чем последний остановленный процесс? Просто используйте номер задания после fg или bg (скажем, bg% 2 или bg% 3 и т. Д.). Если запущенное задание находится в фоновом режиме, вы можете запускать любые другие задачи на переднем плане. Чтобы получить список вакансий, используйте команду, jobs. Также можно завершить процесс с помощью комбинации клавиш CTRL + C или kill. Вы можете передать номер задания, используя команду kill.

Проверьте следующий вывод, который демонстрирует остановку заданий, перемещение заданий с переднего плана на задний план и наоборот, завершение заданий и т. Д.

chmod u+x basic_commands.sh
chmod u+x process_status.sh

./basic_commands.sh
Wed Jul 5 18:30:27 IST 2017
Now sleeping for 250 seconds, so that testing job control functionality is smooth
^Z
[1]+ Stopped ./basic_commands.sh
./process_status.sh
PID   TTY   TIME     CMD
2295  pts/1 00:00:00 bash
4222  pts/1 00:00:00 basic_commands.
4224  pts/1 00:00:00 sleep
4225  pts/1 00:00:00 process_status.
4226  pts/1 00:00:00 ps
Now sleeping for 200 seconds, so that testing job control functionality is smooth
^Z
[2]+ Stopped      ./process_status.sh
jobs
[1]- Stopped      ./basic_commands.sh
[2]+ Stopped      ./process_status.sh
fg
./process_status.sh
^Z
[2]+ Stopped      ./process_status.sh
fg %2
./process_status.sh
^Z
[2]+ Stopped      ./process_status.sh
fg %1
./basic_commands.sh
^Z
[1]+ Stopped      ./basic_commands.sh

jobs
[1]+ Stopped      ./basic_commands.sh
[2]- Stopped      ./process_status.sh

bg %2
[2]- ./process_status.sh &
fg
./basic_commands.sh
^Z
[1]+ Stopped      ./basic_commands.sh
jobs
[1]+ Stopped      ./basic_commands.sh
[2]- Running      ./process_status.sh &
fg %2
./process_status.sh
^Z
[2]+ Stopped      ./process_status.sh
jobs
[1]- Stopped      ./basic_commands.sh
[2]+ Stopped      ./process_status.sh
kill %1 %2
[1]- Stopped      ./basic_commands.sh
[2]+ Stopped      ./process_status.sh

[1]- Terminated   ./basic_commands.sh
[2]+ Terminated   ./process_status.sh