अगर मैं शास्त्रीय बैश को forkbomb चलाएँ:क्यों सी-फोर्कबॉम्ब बैश वाले की तरह काम नहीं करते हैं?
:(){ :&:&};:
अपने सिस्टम रुक जाता है कुछ सेकंड के बाद।
मैं सी में एक को forkbomb लिखने का प्रयास किया है, यहाँ कोड है:
#include <unistd.h>
int main()
{
while(1) {
fork();
}
return 0;
}
जब मैं इसे चलाने प्रणाली कम जिम्मेदार हो जाता है, लेकिन मुझे लगता है कि इस प्रक्रिया को मार सकता है (मिनट के बाद भी) सिर्फ ^C
दबाने।
ऊपर कोड मूल बैश को forkbomb मैं पोस्ट से अलग है: इसे और अधिक की तरह कुछ है:
:()
{
while true
do
:
done
}
(मैं यह परीक्षण नहीं किया था, यदि यह लटका चाहते पता नहीं है सिस्टम)।
इसलिए मैंने मूल संस्करण को लागू करने का भी प्रयास किया; यहां कोड:
#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;
}
लेकिन अभी भी कुछ नहीं: मैं इसे चला सकता हूं और फिर इसे आसानी से मार सकता हूं। यह लटका नहीं है मेरी प्रणाली।
क्यों?
बैश फोर्कबॉम्ब के बारे में इतना खास क्या है? क्या ऐसा इसलिए है क्योंकि बैश बहुत अधिक मेमोरी/सीपीयू का उपयोग करता है? चूंकि बैश प्रक्रियाएं मेरी तुलना में बहुत अधिक सिस्टम कॉल (उदाहरण के लिए, फाइल सिस्टम तक पहुंचने के लिए) कहती हैं?
जैसा कह रहा है, वैज्ञानिक सफलता शायद ही कभी "यूरेका!" के साथ होती है, आमतौर पर "हम्म, यह अजीब है।" –