से बाल प्रक्रियाओं का उपयोग करना मेरे पास एक स्क्रिप्ट है जो बच्चों के एक समूह को जन्म देती है। माता-पिता को प्रत्येक बच्चे को खत्म करने की प्रतीक्षा करनी चाहिए।पर्ल
मेरे स्क्रिप्ट निम्नलिखित पर्ल स्क्रिप्ट के लिए इसी तरह करता है:
#! /usr/bin/perl
use strict;
use warnings;
print "I am the only process.\n";
my @children_pids;
for my $count (1..10){
my $child_pid = fork();
if ($child_pid) { # If I have a child PID, then I must be the parent
push @children_pids, $child_pid;
}
else { # I am the child
my $wait_time = int(rand(30));
sleep $wait_time;
my $localtime = localtime;
print "Child: Some child exited at $localtime\n";
exit 0; # Exit the child
}
}
foreach my $child (@children_pids) {
print "Parent: Waiting on $child\n";
waitpid($child, 0);
my $localtime = localtime;
print "Parent: Child $child was reaped - $localtime.\n";
}
print "All done.\n";
कोड मैं ऊपर प्रदान की है की तरह, प्रत्येक बच्चे को एक अलग समय लग सकता है समाप्त करने के लिए।
समस्या यह है कि जब मैं बच्चों को पीआईडी पर लूप करके बच्चों को काटने की कोशिश करता हूं, उस अंतिम foreach
ब्लॉक में, माता-पिता बच्चों के आदेश के क्रम में इंतजार कर रहे हैं।
स्पष्ट रूप से बच्चे जो क्रमशः उत्पन्न होते हैं, वे खत्म नहीं होते हैं और इसलिए मुझे जल्दी खत्म होने वाले बच्चों के लिए ज़ोंबी प्रक्रियाओं का एक गुच्छा छोड़ दिया जाता है।
मेरे वास्तविक कोड में, ये बच्चे एक दूसरे से पहले दिन खत्म कर सकते हैं और सैकड़ों में चारों ओर तैरने वाली ज़ोंबी प्रक्रियाओं की संख्या बढ़ सकती है।
क्या बच्चों के एक समूह काटने के लिए मेरे लिए एक बेहतर तरीका है?
सूचित करने का प्राथमिक कारण: यह देखने के लिए कि वे सफल थे या नहीं। – ikegami
हे बोरोडिन, चेक आउट करें [सिंटेक्स :: फ़ीचर :: लूप] (http://search.cpan.org/perldoc?Syntax:: फीचर :: लूप) – ikegami
@ikegami: हाँ मैं कभी-कभी इसका उपयोग करता हूं। मैं ज्यादातर 'जबकि (1) ',' जबकि() 'और' {... फिर से उपयोग करने के बीच में फिसल जाता हूं; } '। कोई भी वास्तव में संतोषजनक नहीं है। – Borodin