UID PID PPID C STIME TTY TIME CMD
0 335894 2 - Nov23 ? 00:00:00 login
0 561175 479263 - Nov23 ? 00:00:27 pterm
0 434203 1 - Nov23 ? 00:00:09 pwm
0 561180 561175 - Nov23 ? 00:00:00 /bin/sh
0 479263 1 - Nov23 ? 00:00:35 shelf
0 479263 1 - Nov23 ? 00:00:35 shelf
0 516128 1 - Nov23 ? 00:00:01 bkgdmgr
0 516129 1 - Nov23 ? 00:00:02 wmswitch
0 516130 1 - Nov23 ? 00:00:12 saver
0 561187 561180 - Nov23 ? 00:00:07 pfm
0 3493924 561187 - Nov23 ? 00:00:01 ped proc_log.txt
0 3498021 561180 - 05:27 ? 00:00:00 ./father
0 3117094 479263 - Nov23 ? 00:00:03 helpviewer
0 3117095 3117094 - Nov23 ? 00:00:02 vserver.file
0 3502120 3498021 - 05:27 ? 00:00:00 son
0 3506217 3502122 - 05:27 ? 00:00:00 ps -f
0 3502122 3498021 - 05:27 ? 00:00:00 sh -c sh
[2] + Done (40) ./father
2.2. Взаимодействие родственных процессов
1). Родительский процесс запускает процесс-потомок и ожидает его завершение.
father1.c
#include <sys/types.h>
#include <stdlib.h>
#include <process.h>
main()
{
int status;
printf("\nfather: PID=%i\tPPID=%i\n", getpid(), getppid());
if(fork()==0) execl("./son1","son1", NULL);
wait(&status);
system("ps -f | tee -a fs_log.txt");
}
son1.c
#include <process.h>
#include <stdlib.h>
#include <sys/types.h>
main()
{
printf("\nson: PID=%i\tPPID=%i\n",getpid(), getppid());
system("ps -f | tee -a fs_log.txt");
exit(0);}
2). Родительский процесс запускает процесс-потомок и, не ожидая его завершения, завершает свое выполнение.
father2.c
#include <sys/types.h>
#include <stdlib.h>
#include <process.h>
main()
{
int status;
printf("\nfather: PID=%i\tPPID=%i\n", getpid(), getppid());
if(fork()==0) execl("./son2","son2", NULL);
system("ps -f | tee -a fs_log.txt");
}
son2.c
#include <process.h>
#include <stdlib.h>
#include <sys/types.h>
main()
{
printf("\nson: PID=%i\tPPID=%i\n",getpid(), getppid());
sleep(5);
system("ps -f | tee -a fs_log.txt");
exit(0);
}
3). Родительский процесс запускает процесс-потомок и не ожидает его завершения;
процесс-потомок завершает свое выполнение.
father3.c
#include <sys/types.h>
#include <stdlib.h>
#include <process.h>
main()
{
int status;
printf("\nfather: PID=%i\tPPID=%i\n", getpid(), getppid());
if(fork()==0) execl("./son3","son3", NULL);
sleep(10);
system("pidin | grep Zombie | tee -a fs_log.txt");
}
son3.c
#include <process.h>
#include <stdlib.h>
#include <sys/types.h>
main()
{
printf("\nson: PID=%i\tPPID=%i\n",getpid(), getppid());
system("ps -f | tee -a fs_log.txt");
exit(0);}
auto.c
#include <sys/types.h>
#include <stdlib.h>
#include <process.h>
main()
{
int status;
if(fork()==0) execl("./father1","father1", NULL);
wait(&status);
if(fork()==0) execl("./father2","father2", NULL);
wait(&status);
if(fork()==0) execl("./father3","father3", NULL);
wait(&status);
}
Пример выполнения программы:
# make father1
cc father1.c -o father1
# make son1
cc son1.c -o son1
# make father2
cc father2.c -o father2
# make son2
cc son2.c -o son2
# make father3
cc father3.c -o father3
# make son3
cc son3.c -o son3
# make auto
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.