рефераты конспекты курсовые дипломные лекции шпоры

Реферат Курсовая Конспект

Создание процессов

Создание процессов - раздел Компьютеры, Процессы в ОС Linux (I) Способ 1. Использование System...

Способ 1. Использование system.

При помощи функции system из стандартной библиотеки языка С stdlib можно выполнить команду изнутри программы, как если бы эта команда выла введена в оболочке. Команда system возвращает код возврата команды оболочки. При неудачном запуске оболочки код возврата равен 127, если произошли другие ошибки, то код возврата равен -1.

Задание 3. Выполните программу pr3.c, в которой запускается команда "ls -l /":

 

/* pr3.c */

#include <stdio.h>

#include <stdlib.h>

int main()

{

int ret_val;

ret_val = system("ls -l /");

printf("Return code is %dn", ret_val);

return ret_val;

}

Запишите в отчет код возврата функции systemпри успешном и неуспешном (задайте для ls несуществующий каталог) выполнении. Выведите код завершения программы pr3.c также и из оболочки, пользуясь соответствующей переменной оболочки (см. лабораторную работу 1).

Создание нового процесса при помощи system не следует использовать в программах, т.к. он может вести себя по-разному в разных версиях Linux.

Способ 2. Использование fork.

Основной способ создания процессов - системный вызов fork, который создает дочерний процесс, являющийся копией своего родительского процесса. При неудаче fork возвращает -1. При успешном выполнении fork возвращает 0 в созданный дочерний процесс и возвращает PID дочернего процесса в родительский процесс.

Задание 4.

4.1. Выполните следующую программу:

#include <stdio.h>

#include <unistd.h>

int main()

{

fork(); printf("An");

fork(); printf("Bn");

return 0;

}

Сколько процессов будет выполнено? Сколько сообщений будет напечатано? Нарисуйте дерево процессов. Почему приглашение оболочки $ появляется раньше, чем программа завершает работу?

4.2. Выполните программу pr4.c:

/* pr4.c */

#include <stdio.h>

#include <sys/types.h>

#include <unistd.h>

int main()

{

pid_t child_pid;

printf("The main program process ID is %dn", getpid());

child_pid = fork();

if (child_pid !=0) {

printf ("This is the parent process, with ID %dn", getpid());

printf ("the child's process ID is %dn", child_pid);

}

else

printf ("This is the child process, with ID %dn", getpid());

return 0;

}

а) Запишите в отчет выходные данные, выведенные программой.

б) Распечатайте в дочернем процессе PID его родителя и выполните программу. Модифицируйте программу: после fork задержите выполнение родительского процесса на 3 единицы времени (при помощи библиотечной функции sleep), а дочернего - на 10 единиц. Распечатайте в дочернем процессе PID его родителя дважды: до и после sleep. Объясните в отчете полученные результаты.

– Конец работы –

Эта тема принадлежит разделу:

Процессы в ОС Linux (I)

На сайте allrefs.net читайте: "Процессы в ОС Linux"

Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Создание процессов

Что будем делать с полученным материалом:

Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:

Все темы данного раздела:

Идентификаторы процессов
Процессы в ОС Linux имеют уникальные номера - идентификаторы процессов (PID), являющиеся целыми числами, назначаемыми процессам при их создания. В программах, написанных на С/С++, предпочтительнее

Просмотр активных процессов
Для просмотра активных процессов предназначены следующие команды: - ps (Process Status). Введенная без опций, команда ps показывает только те процессы, ко

Код завершения процесса
В нормальной ситуации процесс завершается либо системным вызовом exitлибо возвратом из функции main. Код завершения - это двухбайтное целое число, возвращаемое про

Переключение процесса на выполнение другой программы
Семейство функций exec содержит набор функций, которые переключают процесс на выполнение другой программы, т.е. изменяют образ процесса. При этом прекращается выполнение текущей пр

Совместный доступ к файлам родительского и дочернего процессов
Каждый дочерний процесс наследует от своего родительского процесса все файлы, открытые родителем до вызова fork. Это означает, что любой дочерний процесс может использовать соответ

Вопросы
1. Что такое процесс? 2. Какие команды предназначены для вывода списка активных процессов? 3. Каково назначение системных вызовов getpid, getppid

Источники информации
1. Митчел М., Оулдем Дж., Самьюэл А. Программирование для Linux. Профессиональный подход. - М.: Издательский дом "Вильямс", 2003. (Глава 3) (The original book (2001) is available at http:

Хотите получать на электронную почту самые свежие новости?
Education Insider Sample
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Реклама
Соответствующий теме материал
  • Похожее
  • Популярное
  • Облако тегов
  • Здесь
  • Временно
  • Пусто
Теги