Реферат Курсовая Конспект
Создание процессов - раздел Компьютеры, Процессы в ОС 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. Объясните в отчете полученные результаты.
– Конец работы –
Эта тема принадлежит разделу:
На сайте allrefs.net читайте: "Процессы в ОС Linux"
Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Создание процессов
Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:
Твитнуть |
Новости и инфо для студентов