LINUX.ORG.RU
ФорумTalks

Ошибка в вызове fork

 


1

2

!Ъ: http://rachelbythebay.com/w/2014/08/19/fork/

Ъ: если fork выполнится неудачно, он вернет -1 и это нужно проверять, потому что иначе есть шанс вызвать kill(-1), что убьет все процессы, которые можно убить.

Вот такое вот решето. В неумелых руках, конечно.

Любопытно было бы знать, что скажет царь по этому поводу, но тема слишком флеймогонная, чтобы постить в Development.

★★★★★

Последнее исправление: buddhist (всего исправлений: 1)

По мотивам Как вы относитесь к новостям об уязвимостях в открытых проектах, связанных с безопасностью (OpenSSL, OpenVZ)? - безопасность это заблуждение и эта ошибка является индусокодом и была добавлена спецслужбами

goingUp ★★★★★
()
Последнее исправление: goingUp (всего исправлений: 1)

Это не решето, а хорошо документированная фича.

x3al ★★★★★
()
Ответ на: комментарий от Stahl

Неудачный malloc грозит сегфолтом. Неудачный форк грозит убиванием всего, что позволено, а от рута так вообще всего, кроме инита.

cvs-255 ★★★★★
()
Последнее исправление: cvs-255 (всего исправлений: 1)
Ответ на: комментарий от Stahl
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/sysinfo.h>

int main(void)
{
        struct sysinfo si;

        sysinfo(&si);

        int size = si.freeram-10000000UL;
        char *m = malloc(size);
        printf("m = %p\n", m);

        memset(m, 0, size);

        int fid = fork();

        if (fid == 0)
        {
                printf("I'm a child\n");
                while(1);
        }
        else
        {
                printf("I'm a parent\nchild pid = %i\n", fid);
                usleep(100000UL);
//              if (fid > 0)
                        kill(fid, 9);
        }
        free(m);

        return 0;
}

Запускай от рута

cvs-255 ★★★★★
()
Последнее исправление: cvs-255 (всего исправлений: 1)
Ответ на: комментарий от cvs-255

Ну тогда и kill(-1) записать в решето, потому что он грозит убиванием всего, что позволено, а от рута так вообще всего, кроме инита.

goingUp ★★★★★
()

если fork выполнится неудачно, он вернет -1 и это нужно проверять, потому что иначе есть шанс вызвать kill(-1), что убьет все процессы, которые можно убить.

вот_это_поворот.жпг

А тот, кто считает это ошибкой в fork, имеет ошибку в ДНК.

tailgunner ★★★★★
()
Ответ на: комментарий от cvs-255

Нет, я пошёл смотреть как я демонизирую свои демоны... Хрень это, а не демоны. Чёртики, не более того... А если вспомнить недавний разговор про двойной форк, так вообще пора уже думать о повышении квалификации:(

Stahl ★★☆
()
Ответ на: комментарий от tailgunner

Это ошибка в конкретных местах использования fork. К самой функции претензий нет, это действительно лучший вариант ее реализации. Претензии к людям типа царя, которые считают, что подобными ситуациями можно пренебречь, и приучают к этому других.

buddhist ★★★★★
() автор топика
Ответ на: комментарий от buddhist

Претензии к людям типа царя

Царь больной, какие к нему могут быть претензии...

tailgunner ★★★★★
()
Ответ на: комментарий от cvs-255

Он - объект обсуждения в том треде

buddhist ★★★★★
() автор топика

то, что результат fork-а надо проверять на -1, - этому учат в детском садике, нормальные люди всегда проверяют ;)

qrck ★★
()

fork не нужен. Надо либо pthread_create, либо posix_spawn.

proud_anon ★★★★★
()
Ответ на: комментарий от Lincor

Лол, не замечал раньше, что царя там слили вторым комментарием, а срач разгорелся на 22 страницы.

buddhist ★★★★★
() автор топика

Исправил в своей программе.

vi0
()

И таки что? В мане про это написано.

Или это из серии "ой, а я man memcpy не читал"?

Eddy_Em ☆☆☆☆☆
()

И вообще, это великолепно! А проверять не надо!! Наоборот же: очень классно сделать kill(-1), если fork() вернул ошибку — освободишь место в PID'ах...

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