私は「フォーク」爆弾を作成しました。しかし、私はそれを私のコンピュータ上で実行すると、それは私のコンピュータ上のすべてを殺し、黒い画面に移動して復元します。私の友人のコンピュータで非確定的なCの振る舞い? "フォーク爆弾"
まったく同じコードを実行している、彼は実際にフォーク爆弾を行いますが、決してキルループにそれを行うものではありません。
何らかの理由がありますか?
#include <unistd.h>
#include <stdio.h>
#include <signal.h>
#include <stdlib.h>
int main(){
int pc = 0;
int* pids = calloc(1025,sizeof(int));
L1:
while(1){
int pid = fork();
if(pid != 0)
{
pc++;
pids[pc] = pid;
}
if(pc == 1024)
{
goto L2;
break;
}
}
L2:
while(1){
if(pids[pc] != 0) {
kill(pids[pc],SIGKILL);
}
if(pc == 0)
{
goto L1;
break;
}
pc--;
}
free(pids);
}
このコードは単なるファンキーのためのものです。
更新:
パットPC++。 if文の外側でカーネルパニックが発生しました。誰かがなぜ私に説明することができますか?
理論的には、このコードは機能しません。
'ulimit -u'は同じ値を報告しますか? – DaBler
私のulimitは実際にはかなり小さいので、これは問題かもしれませんか? – CabDude
@DaBler Mac OS Sierraでulimit -uを変更する方法を知っていますか?私はこれを行う方法についてどこにも見当たりません。 – CabDude