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

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: }

<p>Глоссарий</p>

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

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

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

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

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

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных