0 5754919 5750821 - 07:39 ? 00:00:00 son3
0 5759016 5754919 - 07:39 ? 00:00:00 sh -c sh
0 5759017 5759016 - 07:39 ? 00:00:00 ps -f
0 5759018 5759016 - 07:39 ? 00:00:00 tee -a fs_log.txt
# 3 example:
UID PID PPID C STIME TTY TIME CMD
0 335894 2 - Nov23 ? 00:00:00 login
0 561175 479263 - Nov23 ? 00:01:00 pterm
0 434203 1 - Nov23 ? 00:00:14 pwm
0 561180 561175 - Nov23 ? 00:00:01 /bin/sh
0 479263 1 - Nov23 ? 00:01:10 shelf
0 479263 1 - Nov23 ? 00:01:10 shelf
0 516128 1 - Nov23 ? 00:00:01 bkgdmgr
0 516129 1 - Nov23 ? 00:00:04 wmswitch
0 516130 1 - Nov23 ? 00:00:20 saver
0 561187 561180 - Nov23 ? 00:00:11 pfm
0 5656612 561180 - Nov23 ? 00:00:00 ./auto
0 5750821 5656612 - Nov23 ? 00:00:00 father3
0 5722150 1 - Nov23 ? 00:00:00 son2
0 5779496 5722150 - Nov23 ? 00:00:00 sh -c sh
0 5779497 5779496 - Nov23 ? 00:00:00 ps -f
0 5779498 5779496 - Nov23 ? 00:00:00 tee -a fs_log.txt
5754919 (Zombie)
Пояснение:
# 2 example:
Родительский процесс, не ожидая завершения работы процесса-потомка, завершает свое выполнение, таким образом после уничтожения родительского процесса, у процесса-потомка появляется новый родительский процесс – процесс procnto (pid =1).
# 3 example:
Завершение процесса выполняется в две стадии.
- на первой стадии происходит “физическое” уничтожение процесса (закрываются открытые файлы, освобождается оперативная память и т.д.);
- на второй стадии уничтожается структура данных о процессе, хранящаяся в операционной системе.
Таким образом, после окончания первой стадии уничтожения процесса и до того, как родительский процесс вызвал функцию wait(), Администратор процессов не заканчивает вторую стадию уничтожения, а завершаемый процесс находится в состоянии “зомби”.
“Зомби” – процесс, который физически уже не существует, но его код завершения еще хранится в Администраторе процессов.
2.3. Управление процессами посредством сигналов.
intkill(pid_tpid, intsig) – системный вызов, используемый для того, чтобы послать любой сигнал любому процессу или группе процессов.
Если pid больше 0, то сигнал sig посылается процессу pid.
Если pid равен 0, то сигнал sig посылается всем процессам текущей группы.
Если pid равен -1, то сигнал sig посылается всем процессам, кроме процесса 1 (init).
Если pid меньше -1, то сигнал sig посылается всем процессам группы -pid.
Если sig равен 0, то сигнал не посылается, но выполняется проверка на возникновение ошибок в процессе.
sighandler_tsignal(intsignum,sighandler_thandler) – системный вызов устанавливает новый обработчик сигнала с номером signum в соотвествии с sighandler, который может быть быть функцией пользователя, SIG_IGN или SIG_DFL. Использование функции-обработчика сигнала называется “перехватом сигнала”. Сигналы SIGKILL и SIGSTOP не могут быть перехвачены или игнорированы.
Примеры реакции процесса на посылаемый ему сигнал:
father.c
#include <sys/types.h>
#include <stdlib.h>
#include <process.h>
main()
{
int i;
int pid[3];
if((pid[0]=fork())==0) execl("./son1","son1", NULL);
if((pid[1]=fork())==0) execl("./son2","son2", NULL);
if((pid[2]=fork())==0) execl("./son3","son3", NULL);
system("ps -f > ./sig_log.txt");
for ( i=0;i<3;i++)
{
kill(pid[i], SIGUSR1);
}
system("ps -f >> ./sig_log.txt");
}
son1.c – выполнение действия по умолчанию на полученный сигнал( завершение).
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.