Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> सी प्रोग्रामिंग

सी . में कांटा () और निष्पादन () के बीच अंतर

यहां हम सी में फोर्क () और एग्जीक्यूटिव () सिस्टम कॉल का प्रभाव देखेंगे। फोर्क का उपयोग कॉलिंग प्रक्रिया को डुप्लिकेट करके एक नई प्रक्रिया बनाने के लिए किया जाता है। नई प्रक्रिया बाल प्रक्रिया है। निम्नलिखित संपत्ति देखें।

  • चाइल्ड प्रक्रिया की अपनी विशिष्ट प्रक्रिया आईडी होती है।
  • बाल प्रक्रिया की मूल प्रक्रिया आईडी कॉलिंग प्रक्रिया की प्रक्रिया आईडी के समान है।
  • चाइल्ड प्रक्रिया माता-पिता के मेमोरी लॉक और सेमाफोर को इनहेरिट नहीं करती है।

कांटा () चाइल्ड प्रोसेस का PID लौटाता है। यदि मान गैर-शून्य है, तो यह मूल प्रक्रिया की आईडी है, और यदि यह 0 है, तो यह चाइल्ड प्रोसेस की आईडी है।

निष्पादन () सिस्टम कॉल का उपयोग वर्तमान प्रक्रिया छवि को नई प्रक्रिया छवि के साथ बदलने के लिए किया जाता है। यह प्रोग्राम को वर्तमान स्थान में लोड करता है, और इसे प्रवेश बिंदु से चलाता है।

तो कांटा () और निष्पादन () के बीच मुख्य अंतर यह है कि कांटा नई प्रक्रिया शुरू करता है जो मुख्य प्रक्रिया की एक प्रति है। निष्पादन () वर्तमान प्रक्रिया छवि को नए के साथ बदल देता है, माता-पिता और बच्चे दोनों प्रक्रियाओं को एक साथ निष्पादित किया जाता है।

उदाहरण

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <errno.h>
#include <sys/wait.h>
int main() {
   pid_t process_id;
   int return_val = 1;
   int state;
   process_id = fork();
   if (process_id == -1) { //when process id is negative, there is an error, unable to fork
      printf("can't fork, error occured\n");
         exit(EXIT_FAILURE);
   } else if (process_id == 0) { //the child process is created
      printf("The child process is (%u)\n",getpid());
         char * argv_list[] = {"ls","-lart","/home",NULL};
      execv("ls",argv_list); // the execv() only return if error occured.
      exit(0);
   } else { //for the parent process
      printf("The parent process is (%u)\n",getppid());
      if (waitpid(process_id, &state, 0) > 0) { //wait untill the process change its state
         if (WIFEXITED(state) && !WEXITSTATUS(state))
            printf("program is executed successfully\n");
         else if (WIFEXITED(state) && WEXITSTATUS(state)) {
            if (WEXITSTATUS(state) == 127) {
               printf("Execution failed\n");
            } else
               printf("program terminated with non-zero status\n");
         } else
            printf("program didn't terminate normally\n");
      }
      else {
         printf("waitpid() function failed\n");
      }
      exit(0);
   }
   return 0;
}

आउटपुट

The parent process is (8627)
The child process is (8756)
program is executed successfully

  1. MEAN.js और MEAN.io के बीच अंतर?

    MEAN MongoDB, Express, Angular और Node.js का संक्षिप्त रूप है। MEAN.js और MEAN.io अनिवार्य रूप से वही चीजें हैं क्योंकि वे दोनों मचान अनुप्रयोग हैं या उपरोक्त 4 चीजों का उपयोग करने के लिए मूल सेट अप हैं। इन पुस्तकालयों/उपकरणों में ये आपके लिए पहले से ही स्थापित हैं। ये आपको बुनियादी ढांचा स्थापित

  1. CSS डिस्प्ले और विजिबिलिटी के बीच अंतर

    हम HTML दस्तावेज़ में क्रमशः CSS दृश्यता और CSS प्रदर्शन गुणों के साथ किसी तत्व को छिपा या हटा सकते हैं। उपयोगकर्ता के लिए, दोनों गुणों में से किसी एक का उपयोग करने में कोई अंतर नहीं लग सकता है, लेकिन वहाँ है। सीएसएस प्रदर्शन - कोई भी दस्तावेज़ पर तत्व प्रस्तुत नहीं करता है और इस प्रकार इसे कोई स्थ

  1. बश में $$ और $BASHPID के बीच अंतर जानें

    हाल ही में मैं एक शेल स्क्रिप्ट पर काम कर रहा था और मैंने एक महत्वपूर्ण अंतर देखा कि कैसे विशेष चर $ . को बैश किया जाता है और BASHPID व्यवहार करता है। Linux में चलने वाली प्रत्येक प्रक्रिया को एक प्रक्रिया ID . के साथ असाइन किया जाएगा और इसी तरह से ऑपरेटिंग सिस्टम प्रक्रिया को संभालता है। संबंधित पढ