0 6492198 6492197 - Nov23 ? 00:00:05 vserver.file
0 7114791 5718039 - Nov23 ? 00:00:00 ped prio_log.txt
0 7118888 5718051 - 23:59 ? 00:00:00 ps -f
После выхода из системы и повторного захода:
# ps -f
UID PID PPID C STIME TTY TIME CMD
0 335894 2 - Nov23 ? 00:00:00 login
0 7401495 7319583 - Nov24 ? 00:00:00 pterm
0 7401499 7401495 - Nov24 ? 00:00:00 /bin/sh
0 7274524 1 - Nov24 ? 00:00:00 pwm
0 7319583 1 - Nov24 ? 00:00:01 shelf
0 7319583 1 - Nov24 ? 00:00:01 shelf
0 7356448 1 - Nov24 ? 00:00:00 bkgdmgr
0 7356449 1 - Nov24 ? 00:00:00 wmswitch
0 7356450 1 - Nov24 ? 00:00:00 saver
0 7401507 7401499 - 00:00 ? 00:00:00 ps -f
0 7106596 1 - Nov23 ? 00:00:00 ./nohup
Процесс продолжал выполняться. При этом изменился его PPID в всязи с тем, что родительскии процесс /bin/sh был завершен.
2.4. Многонитиевое функционирование.
pthread.c – программа, формирующая несколько нитей.
#include <pthread.h>
void* thread1( void* ptr)
{
int i = 1;
while(i < 3)
{
sleep(5);
printf("thread1:\t\t%i\n", i++);
}
}
void* thread2( void* ptr)
{
int i = 1;
while(i<13)
{
sleep(1);
printf("thread2:\t\t%i\n", i++);
}
}
main()
{
pthread_t t1, t2;
pthread_create(&t1, NULL, thread1, NULL);
pthread_create(&t2, NULL, thread2, NULL);
pthread_join(t1, NULL);
pthread_join(t2, NULL);
}
Пример выполнения программы:
# make pthreads
cc pthreads.c -o pthreads
# ./pthreads
thread2: 1
thread2: 2
thread2: 3
thread2: 4
thread1: 1
thread2: 5
thread2: 6
thread2: 7
thread2: 8
thread2: 9
thread1: 2
thread2: 10
thread2: 11
thread2: 12
При этом в другом терминале можно наблюдать состояние процесса:
# ps -f
UID PID PPID C STIME TTY TIME CMD
0 335894 2 - Nov23 ? 00:00:00 login
0 7401495 7319583 - Nov24 ? 00:00:04 pterm
0 7401499 7401495 - Nov24 ? 00:00:00 /bin/sh
0 7274524 1 - Nov24 ? 00:00:01 pwm
0 7319583 1 - Nov24 ? 00:00:07 shelf
0 7319583 1 - Nov24 ? 00:00:07 shelf
0 7356448 1 - Nov24 ? 00:00:00 bkgdmgr
0 7356449 1 - Nov24 ? 00:00:00 wmswitch
0 7356450 1 - Nov24 ? 00:00:02 saver
0 7409699 7319583 - Nov24 ? 00:00:01 pfm
0 7594020 7319583 - Nov24 ? 00:00:00 pterm
0 7483429 7319583 - Nov24 ? 00:00:02 helpviewer
0 7483430 7483429 - Nov24 ? 00:00:04 vserver.file
0 7594023 7594020 - Nov24 ? 00:00:00 /bin/sh
0 7602216 7401499 - Nov24 ? 00:00:00 ./pthreads
0 7602216 7401499 - Nov24 ? 00:00:00 ./pthreads
0 7602216 7401499 - Nov24 ? 00:00:00 ./pthreads
0 7606313 7594023 - 00:24 ? 00:00:00 ps -f
Нити имеют тот же PID, что и создавший их процесс, а синхронизация посредством pthread_join() позволяет им совместно использовать терминал.
Примеры реакции нитей на получаемый сигнал:
pthread2.c
#include <pthread.h>
#include <signal.h>
pthread_t t1, t2;
void* thread1( void* ptr)
{
int i = 1;
while(i<3)
{
sleep(5);
printf("thread1:\t\t%i\n", i++);
if (i==2) pthread_kill(t2, SIGKILL);
}
}
void* thread2( void* ptr)
{
int i = 1;
while(i<13)
{
sleep(1);
printf("thread2:\t\t%i\n", i++);
}
}
main()
{
pthread_create(&t1, NULL, thread1, NULL);
pthread_create(&t2, NULL, thread2, NULL);
pthread_join(t1, NULL);
pthread_join(t2, NULL);
}
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.