Чтение онлайн

на главную - закладки

Жанры

Разработка приложений в среде Linux. Второе издание

Троан Эрик В.

Шрифт:

686:

687: /* не обращаем внимания на этот сигнал; это просто помеха,

688: не имеющая никакого значения для оболочки */

689: signal(SIGTTOU, SIG_IGN);

690:

691: while (1) {

692: if (!jobList.fg) {

693: /* на переднем плане нет ни одного задания */

694:

695: /* проверяем,
не завершилось выполнение какого-либо фонового задания */

696: checkJobs(&jobList);

697:

698: if (!nextCommand) {

699: if (getCommand(input, command)) break;

700: nextCommand = command;

701: }

702:

703: if (!parseCommand(&nextCommand, &newJob, &inBg) &&

704: newJob.numProgs) {

705: runCommand(newJob, &jobList, inBg);

706: }

707: } else {

708: /* задание выполняется на переднем плане; ожидаем, пока оно завершится */

709: i = 0;

710: while (!jobList:fg->progs[i].pid ||

711: jobList.fg->progs[i].isStopped) i++;

712:

713: waitpid(jobList.fg->progs[i].pid, &status, WUNTRACED);

714:

715: if (WIFSIGNALED(status) &&

716: (WTERMSIG(status) != SIGINT)) {

717: printf("%s\n", strsignal(status));

718: }

719:

720: if (WIFEXITED(status) || WIFSIGNALED(status)) {

721: /* дочерний процесс завершил работу */

722: jobList.fg->runningProgs--;

723: jobList.fg->progs[i].pid = 0;

724:

725: if (!jobList.fg->runningProgs) {

726: /* дочерний процесс завершил работу */

727:

728: removeJob(&jobList, jobList.fg);

729: jobList.fg = NULL;

730:

731: /* переводим оболочку на передний план */

732: if (tcsetpgrp(0, getpid))

733: perror("tcsetpgrp");

734: }

735: } else {

736: /* выполнение дочернего процесса было остановлено */

737: jobList.fg->stoppedProgs++;

738: jobList.fg->progs[i].isStopped = 1;

739:

740: if (jobList.fg->stoppedProgs ==

741: jobList.fg->runningProgs) {

742: printf("\n" JOB_STATUS_FORMAT,

743: jobList.fg->jobId,

744: "Остановлено", jobList.fg->text);

745: jobList.fg = NULL;

746: }

747: }

748:

749: if (!jobList.fg) {

750: /* переводим оболочку на передний план */

751: if (tcsetpgrp(0, getpid))

752: perror("tcsetpgrp");

753: }

754: }

755: }

756:

757: return 0;

758: }

Глоссарий

advisory locking — рекомендательное блокирование. Блокирование, которое не применяется принудительно: все процессы, манипулирующие заблокированными файлами, должны явно проверять наличие блокировки.

anonymous mapping — анонимное отображение. Отображение памяти, которое на связано с inode в файловой системе и ограничено приватным использованием внутри процесса.

ar
. Утилита архивирования, наиболее часто используемая для создания библиотек.

basic regular expression (BRE) — базовое регулярное выражение. Тип выражения для сопоставления строк, используемый утилитой

grep
.

big-endian — обратный порядок байтов. Многобайтное значение, сохраненное с наиболее значащим байтом в младших адресах памяти, за которым следуют остальные байты в порядке значимости.

blocked signals — блокированные сигналы. Сигналы, которые процесс не намерен принимать. Обычно сигналы блокируются на короткий период времени, пока процесс выполняет важную работу. Когда сигнал посылается процессу, блокирующему этот сигнал, последний остается отложенным до тех пор, пока он не будет разблокирован.

break — разрыв. Длинный поток нулевых бит в последовательном интерфейсе.

buffer overflow — переполнение буфера. Запись данных за концом области памяти, выделенной под эти данные, которая обычно приводит к сбою работы программы произвольным образом, а также к появлению уязвимостей безопасности.

buffer underrun — недогрузка буфера. Запись данных перед началом области памяти, выделенной под эти данные.

canonical hostname — каноническое имя хоста. Имя хоста, на которое отображается IP-адрес. В то время как множество имен хостов могут отображаться на единственный IP- адрес, этот адрес отображается обратно только на одно, каноническое, имя хоста.

Поделиться:
Популярные книги

Вперед в прошлое 3

Ратманов Денис
3. Вперёд в прошлое
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Вперед в прошлое 3

Никто и звать никак

Ром Полина
Фантастика:
фэнтези
7.18
рейтинг книги
Никто и звать никак

Мятежник

Прокофьев Роман Юрьевич
4. Стеллар
Фантастика:
боевая фантастика
7.39
рейтинг книги
Мятежник

Пропала, или Как влюбить в себя жену

Юнина Наталья
2. Исцели меня
Любовные романы:
современные любовные романы
6.70
рейтинг книги
Пропала, или Как влюбить в себя жену

Темный Патриарх Светлого Рода 6

Лисицин Евгений
6. Темный Патриарх Светлого Рода
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Темный Патриарх Светлого Рода 6

Случайная мама

Ручей Наталья
4. Случайный
Любовные романы:
современные любовные романы
6.78
рейтинг книги
Случайная мама

На границе империй. Том 8

INDIGO
12. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 8

Сердце Дракона. Том 19. Часть 1

Клеванский Кирилл Сергеевич
19. Сердце дракона
Фантастика:
фэнтези
героическая фантастика
боевая фантастика
7.52
рейтинг книги
Сердце Дракона. Том 19. Часть 1

Кодекс Охотника. Книга V

Винокуров Юрий
5. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
4.50
рейтинг книги
Кодекс Охотника. Книга V

Дракон - не подарок

Суббота Светлана
2. Королевская академия Драко
Фантастика:
фэнтези
6.74
рейтинг книги
Дракон - не подарок

Беглец

Кораблев Родион
15. Другая сторона
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Беглец

Хозяйка старой усадьбы

Скор Элен
Любовные романы:
любовно-фантастические романы
8.07
рейтинг книги
Хозяйка старой усадьбы

Развод и девичья фамилия

Зика Натаэль
Любовные романы:
современные любовные романы
5.25
рейтинг книги
Развод и девичья фамилия

Я еще не князь. Книга XIV

Дрейк Сириус
14. Дорогой барон!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я еще не князь. Книга XIV