मैं एक मैप्रिडस प्रोग्राम लिख रहा हूं जो कुछ अंतिम परिणाम प्राप्त करने के लिए एकाधिक I/O पाइप (प्रति पाइप एक प्रक्रिया) का उपयोग करता है। मुझे प्रक्रियाओं को बनाने में समस्या है। विशेष रूप से, मैं निम्नलिखित त्रुटि हो रही है:कांटा() - एकाधिक प्रक्रियाओं और सिस्टम कॉल
while (values[inc]!=NULL) //provided array of text lines
{
if ((pid = fork()) == -1) {
perror("fork error");
exit(EXIT_FAILURE);
}
else if (pid == 0) { /* start of child process */
printf("Child process...\n");
/* pipes[inc][1] is a file descriptor to which myMap writes some data
using the write() system call
mr is a struct that holds other function pointers */
mr->myMap(pipes[inc][1],values[inc]);
exit(0);
}
else { /* start of parent process */
printf("Parent process...\n");
if ((wpid = wait(&status)) == -1)
/* Wait for child process. */
perror("wait error");
else { /* Check status. */
if (WIFSIGNALED(status) != 0)
printf("Child process ended because of signal %d\n",
WTERMSIG(status));
else if (WIFEXITED(status) != 0)
printf("Child process ended normally; status = %d\n",
WEXITSTATUS(status));
else
printf("Child process did not end normally\n");
}
//close(fd[1]);
printf("Parent process ended\n");
}
inc++;
}
इस के बाद मैं एक धागा
pthread_t newThread;
pthread_create(&newThread,NULL,threadFunction,values);
pthread_join(newThread,NULL);
बनाने रहा threadFunction चयन का उपयोग करता है (:
wait error: Interrupted system call
यह मेरा कोड है कि प्रक्रियाओं spawns है) यह पता लगाने के लिए कि कौन सी फाइल डिस्क्रिप्टर पढ़ने के लिए तैयार है और इसे पढ़ता है और डेटा को एक शब्दकोश में रखता है।
जब प्रपत्र gdb डीबगर, कार्यक्रम उत्पादन चल रहा है:
Parent process...
Child process...
wait error: Interrupted system call
Parent process ended
Parent process...
Child process ended normally; status = 0
Parent process ended
Parent process...
Child process...
Child process...
wait error: Interrupted system call
Parent process ended
मैं कैसे इस मुद्दे को हल करने के लिए पता नहीं है। कोई सुझाव?
धन्यवाद!
मुझे यकीन है कि तुम क्या मतलब है नहीं कर रहा हूँ। कृपया विस्तार से बताएं। – Krzysiek
@Rafcio मैंने अपना जवाब अपडेट किया है। – trojanfoe
धन्यवाद। यह समझ में आता है! :) – Krzysiek