Изучение основных принципов управления процессами и нитями в ОС LINUX, страница 4

$

Результаты, пункт Б.

$ ./father.out &

[1] 1368110

$

 FATHER PARAM: pid=1368110 ppid=499756

 SON PARAM: pid=1372207 ppid=1368110

       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

...

00000200 -   100    1368110     499756  -  10   0    -  636K -     ?        00:00:00 father.out

00000200 -   100    1372207    1368110  -  10   0    -  636K -     ?        00:00:00 son.out

00000200 -   100    1376304    1372209  -  10   0    -  648K -     ?        00:00:00 ps

00000200 -   100    1372209    1368110  -  10   0    -  844K -     ?        00:00:00 sh

ps -la

       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    1392686     499756  -  10   0    -  648K -     ?        00:00:00 ps

00000200 -   100    1372207          1  -  10   0    -  636K -     ?        00:00:00 son.out

Результаты, пункт В.

$ ./father.out

 FATHER PARAM: pid=2707502 ppid=499756

 SON PARAM: pid=2711599 ppid=2707502

       F S   UID        PID       PPID  C PRI  NI ADDR    SZ WCHAN TTY          TIME CMD

00000210 -   100     438293     380959  -  10   0    - 4676K -     ?        00:00:04 helpviewer

00000000 -   100    2707502     499756  -  10   0    -  636K -     ?        00:00:00 father.out

00000000 -   100    2715696    2711601  -  10   0    -  648K -     ?        00:00:00 ps

00000000 -   100    2711601    2707502  -  10   0    -  844K -     ?        00:00:00 sh

 2711599     (Zombie)

$

3.3. Управление процессами посредством сигналов.

3.3.1. С помощью команды kill -l ознакомьтесь с перечнем сигналов, поддерживаемых процессами. Ознакомьтесь с системными вызовами kill(2), signal(2).
Подготовьте программы следующего содержания:
а) процесс father порождает процессы son1, son2, son3 и запускает на исполнение программные коды из соответствующих исполнительных файлов;
б) далее родительский процесс осуществляет управление потомками, для этого он генерирует сигнал каждому пользовательскому процессу;
в) в пользовательских процессах-потомках необходимо обеспечить:
для son1 - реакцию на сигнал по умолчанию;
для son2 - реакцию игнорирования;
для son3 - перехватывание и обработку сигнала.

Int kill (pid_t pid, int sig)

Системный вызов kill посылает сигналы указанным процессам. По умолчанию (если не указано имя или номер сигнала) посылается сигнал SIGTERM. Идентификатор процесса является аргументом для этой утилиты: если он больше нуля, то сигнал посылается процессу с указанным pid, если он равен нулю, то сигнал посылается всем процессам, принадлежащим пользователю, если он меньше нуля, то он воспринимается как идентификатор группы процессов, и тогда сигнал посылается всей группе.

Утилита kill c ключом –l позволяет узнать, какие сигналы можно послать процессу.

$ kill -l

 1    HUP Hangup                        29   PROF Profiling timer expired

 2    INT Interrupt                     30   XCPU CPU time limit exceeded

 3   QUIT Quit                          31   XFSZ File size limit exceeded

 4    ILL Illegal instruction           32     32 signal 32

 5   TRAP Trace trap                    33     33 signal 33

 6   ABRT Abort                         34     34 signal 34

 7    EMT EMT trap                      35     35 signal 35

 8    FPE Floating point exception      36     36 signal 36

 9   KILL Killed                        37     37 signal 37