Мне дали этот код и сказали запустить его.После некоторых исследований, я думаю, что это fork
бомба, и в конечном итоге здесь произойдет сбой вилки.
По моему мнению, это происходит в основном по причинам, связанным с памятью, согласно [EAGAIN]
x2 и [ENOMEM]
на странице руководства.
Однако у меня есть вопрос, возможно ли, если
a), возможно ли, чтобы этот код не имел сбоя ветки на LINUX
b) теоретически есть личто-то, что я могу сделать с ОС, чтобы остановить остановку ветвления, сохраняя семантику fork()
.
Мой текущий ответ на этот вопрос, возможно, заключается в том, чтобы найти способ утилизировать pids для предоставления неограниченной памяти, но я не уверен в своем ответе.Кто-нибудь может мне помочь?
#include <unistd.h>
#include <stdio.h>
#define D 10000
double delay(unsigned long loops)
{
unsigned long i;
double z = i, y;
z = i;
for (i = loops; i >= 1 ; i--) {
y = ((double) loops)/((double) (loops - i + 1));
z = (y*y + z)*i/((double) loops);
}
return z;
}
int main(int argc, char *argv[])
{
int child;
while (1) {
if ((child=fork()) > 0)
fprintf(stderr, "[%d] ", getpid());
else if (child == -1)
fprintf(stderr, "FAIL ");
else delay(D); // Pick some large D to start with
}
}