Wenn ich laufen die klassische bash forkbomb:Warum funktionieren C-Forkbombs nicht wie Bashs?
:(){ :&:&};:
mein System hängt nach wenigen Sekunden.
Ich versuchte, ein forkbomb in C zu schreiben, hier ist der Code:
#include <unistd.h>
int main()
{
while(1) {
fork();
}
return 0;
}
Als ich es das System laufen wird weniger reagieren, aber ich kann diesen Prozess töten (auch nach Minuten) drückt ^C
einfach.
Der obige Code unterscheidet sich von der ursprünglichen bash forkbomb ich geschrieben: es ist etwas mehr wie:
:()
{
while true
do
:
done
}
(ich habe es nicht testen, weiß nicht, ob es würde hängen das System).
Also habe ich auch versucht, die ursprüngliche Version zu implementieren; Hier ist der Code:
#include <unistd.h>
inline void colon(const char *path)
{
pid_t pid = fork();
if(pid == 0) {
execl(path, path, 0);
}
}
int main(int argc, char **argv)
{
colon(argv[0]);
colon(argv[0]);
return 0;
}
aber noch nichts: ich es laufen kann und dann ist es leicht zu töten. Es ist nicht hängen mein System.
Warum?
Was ist das Besondere an bash forbombombs? Weil bash viel mehr Speicher/CPU benötigt? Weil bash-Prozesse viel mehr Systemaufrufe aufrufen (zB um auf das Dateisystem zuzugreifen) als meins?
Wie das Sprichwort sagt, wissenschaftliche Durchbrüche werden selten von "Eureka!" Begleitet, häufig begleitet von "Hmm, das ist seltsam." –