LINUX.ORG.RU

Вопрос по fork()


0

0

Народ,подскажите пожалуйста в чем тут дело?
У меня примерно такой код
pid1=fork();
execl(...);
kill(pid1,SIGTERM);
wait(,,,);
pid2=fork();
Так вот pid2>pid1,хотя сам процесс убивается.Похоже не освобождается ячейка в таблице процессов.Почему?
Спасибо.

anonymous

if(fork())
{
/*это для родителя*/
}
{
/*это для сына*/
execl(.....);
}

fork создает новый процесс со своим адресным пространством,
поэтому два процесса идентичны, а execl заменяет сегменты на свои,
родителю идет pid сына, сыну нуль.

А вообще код у тебя бредовый, напиши что хотел.
А если уж на то пошло и ты хочешь грохнуть родителя, то
в сыне getppid и kill в папу ;-)

anonymous
()

Pid'ы идут инкрементом, а не забирается первый свободный. По крайней мере в Линуксе.

anonymous
()

Да,лучше напишу что я хочу сделать.
Моя прога должна динамически создавать и убивать процессы.
И т.к. pid каждый раз становится все больше и больше я боюсь
как бы таблица процессов не переполнилась.Или мои опасения напрасны?
Спасибо.

anonymous
()

Предыдущий анонимоус был прав, что пиды образуютс инкрементами. По-моему максимальный номер pida 2^16 (65535) хотя, может быть и 2^32, т.е. вообще немерянное число. Когда же таблица pidов "переполнится", т.е. не свободные старшие номера закончатся, начнутся генериться pidы начиная с самого меньшего свободного номера и вверх, до тех пор, пока не переполнится, а потом опять произойдет сброс номеров pidов и начнется все заново... Старался достпупно изложить, если что не понятно - прошу прощения...

Akan
()

Автор вопроса.
Я пробовал запустить,скажем, терминал,с gnoma, потом закрыть его и снава запустить,в этом случае pid оставался таким же как при первом запуски терминала,т.е.таблица процессов освобождалась.В моем же случае этого непроисходит,такое чувство что у меня остаются зомби процессы.Может всетаки с ними надо бороться?
Спасибо.

anonymous
()

А ps что говорит? Есть zombi или нет? Если нет, то и тревожиться не о чем.

nobody ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.