что будет если exec внутри потока pthread

Модератор: Модераторы разделов

igsilya
Сообщения: 80
ОС: Debian squeeze 6.0

что будет если exec внутри потока pthread

Сообщение igsilya »

ну собственно весь вопрос в названии:

я хочу создать процесс-нить pthread, а внутри него запустить другую программу с помощью exec.
Как это может повлиять на другие потоки моего процесса?
Спасибо.
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: что будет если exec внутри потока pthread

Сообщение serzh-z »

igsilya писал(а):
12.03.2011 14:31
я хочу создать процесс-нить pthread, а внутри него запустить другую программу с помощью exec.
Как это может повлиять на другие потоки моего процесса?
Тело текущего процесса будет заменёно новым кодом. Все ресурсы старого, включая потоки, будут освобождены.
Спасибо сказали:
igsilya
Сообщения: 80
ОС: Debian squeeze 6.0

Re: что будет если exec внутри потока pthread

Сообщение igsilya »

serzh-z писал(а):
12.03.2011 15:21
igsilya писал(а):
12.03.2011 14:31
я хочу создать процесс-нить pthread, а внутри него запустить другую программу с помощью exec.
Как это может повлиять на другие потоки моего процесса?
Тело текущего процесса будет заменёно новым кодом. Все ресурсы старого, включая потоки, будут освобождены.


то есть я правильно понимаю, что использование exec в одном потоке приведет к краху всего процесса?
Спасибо сказали:
frp
Сообщения: 1445
ОС: Debian Squeeze

Re: что будет если exec внутри потока pthread

Сообщение frp »

igsilya писал(а):
12.03.2011 15:28
то есть я правильно понимаю, что использование exec в одном потоке приведет к краху всего процесса?

Да.
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5489
ОС: Gentoo

Re: что будет если exec внутри потока pthread

Сообщение /dev/random »

igsilya писал(а):
12.03.2011 15:28
то есть я правильно понимаю, что использование exec в одном потоке приведет к краху всего процесса?

Не краху, а прекращению выполнения и замещению новым процессом. Это именно то, для чего и предназначен exec. Впрочем, это лишь вопрос терминологии.

А можно поинтересоваться, в чём смысл сего действа?
Спасибо сказали:
igsilya
Сообщения: 80
ОС: Debian squeeze 6.0

Re: что будет если exec внутри потока pthread

Сообщение igsilya »

/dev/random писал(а):
12.03.2011 15:44
igsilya писал(а):
12.03.2011 15:28
то есть я правильно понимаю, что использование exec в одном потоке приведет к краху всего процесса?

Не краху, а прекращению выполнения и замещению новым процессом. Это именно то, для чего и предназначен exec. Впрочем, это лишь вопрос терминологии.

А можно поинтересоваться, в чём смысл сего действа?


Нужно организовать некое подобие http сервера.
при этом он должен поддерживать cgi-программы.
=> их нужно запускать в отдельных процессах. fork исспользовать как-то не хотелось, но теперь , по-видимому, без него не получится.

если у вас есть другие предложения, я буду рад их услышать.
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: что будет если exec внутри потока pthread

Сообщение serzh-z »

igsilya писал(а):
12.03.2011 15:50
=> их нужно запускать в отдельных процессах. fork исспользовать как-то не хотелось, но теперь , по-видимому, без него не получится.
fork для создания нового процесса и предназначен. Собственно, это единственный способ создать новый процесс в POSIX.
Спасибо сказали:
igsilya
Сообщения: 80
ОС: Debian squeeze 6.0

Re: что будет если exec внутри потока pthread

Сообщение igsilya »

serzh-z писал(а):
12.03.2011 15:50
igsilya писал(а):
12.03.2011 15:50
=> их нужно запускать в отдельных процессах. fork исспользовать как-то не хотелось, но теперь , по-видимому, без него не получится.
fork для создания нового процесса и предназначен. Собственно, это единственный способ создать новый процесс в POSIX.


просто для http сервера создание полновесного процесса - очень затратная операция.
просто если несколько тысяч пользователей захотят запустить cgi программу, сервер не сможет создавать столько процессов в короткие интервалы времени и попросту завалится, в конце-концов существует ограничение на кол-во процессов в системе.
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5489
ОС: Gentoo

Re: что будет если exec внутри потока pthread

Сообщение /dev/random »

igsilya писал(а):
12.03.2011 15:50
=> их нужно запускать в отдельных процессах. fork исспользовать как-то не хотелось, но теперь , по-видимому, без него не получится.

Почему не хотелось? Если вы думаете, что это затратный вызов, то заблуждаетесь. Память не копируется, на неё лишь ставится пометка "copy on write" (скопировать при первой же попытке туда что-то записать). Создание процесса и потока практически не отличаются по затратности.

Вот exec - да, это затратный вызов.

Upd: когда начинал писать, предыдущего поста ещё не было. Теперь вижу, что угадал.
Спасибо сказали:
igsilya
Сообщения: 80
ОС: Debian squeeze 6.0

Re: что будет если exec внутри потока pthread

Сообщение igsilya »

/dev/random писал(а):
12.03.2011 15:57
igsilya писал(а):
12.03.2011 15:50
=> их нужно запускать в отдельных процессах. fork исспользовать как-то не хотелось, но теперь , по-видимому, без него не получится.

Почему не хотелось? Если вы думаете, что это затратный вызов, то заблуждаетесь. Память не копируется, на неё лишь ставится пометка "copy on write" (скопировать при первой же попытке туда что-то записать). Создание процесса и потока практически не отличаются по затратности.


но копирование все равно произойдет.
я же собираюсь exec делать => произойдет копирование сегмента кода и сегмента данных все равно.
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5489
ОС: Gentoo

Re: что будет если exec внутри потока pthread

Сообщение /dev/random »

igsilya писал(а):
12.03.2011 16:00
но копирование все равно произойдет.
я же собираюсь exec делать => произойдет копирование сегмента кода и сегмента данных все равно.

Скопируется пара страниц, не более. Вот exec, как я уже сказал, потребует большого количества времени. Независимо от того, был ли перед этим fork. Нужно полностью освободить адресное пространство и многие другие ресурсы, а затем подгрузить новый исполнимый файл, создав для него новый стек, новую кучу и т.д.
Спасибо сказали:
igsilya
Сообщения: 80
ОС: Debian squeeze 6.0

Re: что будет если exec внутри потока pthread

Сообщение igsilya »

а что делать с ограничениями на кол-во процессов в системе?
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: что будет если exec внутри потока pthread

Сообщение serzh-z »

igsilya писал(а):
12.03.2011 15:55
просто если несколько тысяч пользователей захотят запустить cgi программу, сервер не сможет создавать столько процессов в короткие интервалы времени и попросту завалится
Нужно держать пул процессов, как это делает, например, один из модулей (prefork) MPM Apache.
Спасибо сказали:
igsilya
Сообщения: 80
ОС: Debian squeeze 6.0

Re: что будет если exec внутри потока pthread

Сообщение igsilya »

serzh-z писал(а):
12.03.2011 16:06
igsilya писал(а):
12.03.2011 15:55
просто если несколько тысяч пользователей захотят запустить cgi программу, сервер не сможет создавать столько процессов в короткие интервалы времени и попросту завалится
Нужно держать пул процессов, как это делает, например, один из модулей (prefork) MPM Apache.


а можно по-подробнее? как это реализовать?
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5489
ОС: Gentoo

Re: что будет если exec внутри потока pthread

Сообщение /dev/random »

igsilya писал(а):
12.03.2011 16:05
а что делать с ограничениями на кол-во процессов в системе?

Потоки тоже учитываются в этом ограничении.
Спасибо сказали:
Аватара пользователя
Portnov
Модератор
Сообщения: 1786
Статус: Матёрый линуксоид
ОС: Debian testing/unstable

Re: что будет если exec внутри потока pthread

Сообщение Portnov »

В linux и большинстве других современных unix-like систем потоки — это разновидность процессов. Поток отличается от процесса только тем, что не имеет своего выделенного адресного пространства (использует адресное пространство, общее с другими потоками).
Работа: Ubuntu 9.10
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
Спасибо сказали: