Управление процессами и нитями в ОС QNX. Основные принципы управления процессами и нитями в ОС QNX, страница 6

rec2.cпроцесс в пассивном состоянии.

#include <signal.h>

#include <stdlib.h>

#include <sys/types.h>

void action();

main()

{

signal (SIGUSR1, action);

sleep(15);

}

void action()

{

time_t t;

printf(" rec2:\t\t%i\n", time(&t));

exit(0);

}

srecскрипт для демонстрации работы 3 примеров.

#!/bin/ksh

make rec1

make rec2

make send

./send

Пример работы скрипта:

# ./srec

cc     rec1.c   -o rec1

cc     rec2.c   -o rec2

cc     send.c   -o send

send: 1227470044 to rec1

rec1:          1227470044

send: 1227470044 to rec2

rec2:          1227470044

Таким образом время получения процессом адресованного ему сигнала не зависит от состояния процесса.

nicen[inc] command – системная утилита добавляющая значение аргумента inc к значению nice-приоритета вызывающего процесса.

intgetprio(pid_tpid) – команда определяющая приоритеты процессов.

prior.cпрограмма определения приоритета процесса.

#include <signal.h>

#include <stdlib.h>

#include <sys/types.h>

main()

{    

printf(" priority = %i\n", getprio(getpid()));

system("ps -l >>prio_log.txt");    

}

Пример использования:

# make prior

cc     prior.c   -o prior

# ./prior

priority = 10

# nice -n-6 ./prior

priority = 16

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

00010000 -     0   335894       2  -  10   0    -  612K -     ?  00:00:00 login

00000210 -     0   718039  479263  -  10   0    - 2380K -     ?  00:00:02 pfm

00010200 -     0   434203       1  -  10   0    - 2028K -     ?  00:00:13 pwm

00000210 -     0  5718044  479263  -  10   0    - 2160K -     ?  00:00:10 pterm

00000200 -     0   479263       1  -  10   0    - 3032K -     ?  00:01:19 shelf

00000200 -     0   479263       1  -  10   0    - 3032K -     ?  00:01:19 shelf

00000200 -     0   516128       1  -  10   0    - 4392K -     ?  00:00:01 bkgdmgr

00000200 -     0   516129       1  -  10   0    - 1740K -     ?  00:00:03 wmswitch

00000200 -     0   516130       1  -  10   0    - 2016K -     ?  00:00:17 saver

00010200 -     0  5718051 5718044  -  10   0    -  776K -     ?  00:00:00 /bin/sh

00000000 -     0  6807588 5718051  -  16   0    -  600K -     ?  00:00:00 ./prior

00000210 -     0  6492197  479263  -  10   0    - 4904K -     ?  00:00:06 helpviewer

00000200 -     0 6492198 6492197  -  10   0    - 10068K -     ?  00:00:05 vserver.file

00000000 -     0 6815783 6807588  -  16   0    -  744K -     ?   00:00:00 sh

00000000 -     0 6815784 6815783  -  16   0    -  612K -     ?   00:00:00 ps

Изменение приоритета процесса затрагивает и его потомков. Приоритет наследуется.

nohupcommand[argument…] – запуск указанной команды с игнорирование сигналов потери связи(hangup) и увеличением приоритета для планировщика задач на 5; т.о. команда будет продолжать выполняться в фоновом режиме и после того, как пользователь выйдет из системы.

nohup.cпрограмма для иллюстрации работы команды nohup.

#include <stdlib.h>

main()

{    

while(1)

{    

sleep(1);

}

}

Пример работы программы:

# nohup ./nohup&

[1] 7106596

# appending output to nohup.out

# ps -f

UID        PID       PPID  C STIME TTY          TIME CMD

0     335894          2  - Nov23 ?        00:00:00 login

0     434203          1  - Nov23 ?        00:00:14 pwm

0    5718044     479263  - Nov23 ?        00:00:13 pterm

0     479263          1  - Nov23 ?        00:01:23 shelf

0     479263          1  - Nov23 ?        00:01:23 shelf

0     516128          1  - Nov23 ?        00:00:01 bkgdmgr

0     516129          1  - Nov23 ?        00:00:04 wmswitch

0     516130          1  - Nov23 ?        00:00:18 saver

0    5718051    5718044  - Nov23 ?        00:00:00 /bin/sh

0    7106596    5718051  - Nov23 ?        00:00:00 ./nohup

0    6492197     479263  - Nov23 ?        00:00:08 helpviewer