F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
00000210 - 100 438293 380959 - 10 0 - 4676K - ? 00:00:03 helpviewer
…
00000000 - 100 913453 499756 - 10 0 - 636K - ? 00:00:00 father.out
00000000 - 100 917550 913453 - 10 0 - 636K - ? 00:00:00 son.out
00000000 - 100 921647 917552 - 10 0 - 648K - ? 00:00:00 ps
00000000 - 100 917552 913453 - 10 0 - 844K - ? 00:00:00 sh
$
3.1.3. Запустить на выполнение программу father.out в фоновом режиме father &. Получить таблицу процессов, запущенных с вашего терминала (включая отцовский и сыновний процессы).
При запуске процесса, как интерактивного, он монопольно владеет терминалом. Пока такой процесс не завершит свое выполнение, пользователь не сможет работать там. При запуске в фоновом режиме для пользователя остается возможность работы в терминале, можно выполнять там команды и т.п., не ожидая завершения процесса.
В текст father.c и son.c закомментирован вывод.
$ ./father.out &
[1] 1110062
$ ps
PID TTY TIME CMD
438293 ? 00:00:03 helpviewer
…
1110062 ? 00:00:00 father.out
1114159 ? 00:00:00 son.out
1118256 ? 00:00:00 ps
3.2. Взаимодействие родственных процессов.
3.2.1. Изменяя длительности
выполнения процессов и параметры системных вызовов, рассмотреть 3 ситуации и
вывести соответствующие таблицы процессов:
а) процесс-отец запускает процесс-сын и ожидает его завершения;
б) процесс-отец запускает процесс-сын и, не ожидая его завершения, завершает
свое выполнение. Зафиксируйте изменение родительского идентификатора
процесса-сына;
в) процесс-отец запускает процесс-сын и не ожидает его завершения; процесс-сын
завершает свое выполнение. Зафиксируйте появление процесса-зомби.
Текст father.c для всех трех пунктов с комментариями по использованию.
#include <stdio.h>
main ()
{
int pid, ppid,status;
pid=getpid();
ppid=getppid();
printf ("\n\n FATHER PARAM: pid=%i ppid=%i \n", pid, ppid);
if (fork()==0)
execl("son.out","son.out", NULL);
system ("ps -la");
//dlya zombi raskommentirovat
//system("pidin | grep Zombie");
//chtobu ne jdat zaversheniya stroky zakommentirovat
//dlya zombi zakommentirovat
wait(&status);
}
Текст son.c для всех трех пунктов с комментариями по использованию.
#include <stdio.h>
main()
{
int pid, ppid;
pid=getpid();
ppid=getppid();
printf ("\n SON PARAM: pid=%i ppid=%i\n", pid, ppid);
//dlya zombie zakommentirovat
sleep(15);
}
Результаты, пункт А.
Запуск father.out.
$ ./father.out
FATHER PARAM: pid=913453 ppid=499756
SON PARAM: pid=917550 ppid=913453
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
00000210 - 100 438293 380959 - 10 0 - 4676K - ? 00:00:03 helpviewer
…
00000000 - 100 913453 499756 - 10 0 - 636K - ? 00:00:00 father.out
00000000 - 100 917550 913453 - 10 0 - 636K - ? 00:00:00 son.out
00000000 - 100 921647 917552 - 10 0 - 648K - ? 00:00:00 ps
00000000 - 100 917552 913453 - 10 0 - 844K - ? 00:00:00 sh
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.