কম্পিউটার টিউটোরিয়াল

C-এ fork() এবং exec() এর পার্থক্য


fork(): কলিং প্রসেস কপি করে নতুন প্রসেস (child) তৈরি করে।

  • Child-এর ইউনিক PID থাকে
  • Parent PID child-এর parent PID হয়
  • Child parent-এর মেমরি লক ও সেমাফোর ইনহেরিট করে না

fork() child-এর PID রিটার্ন করে। Parent-এ non-zero (child PID), Child-এ ০ রিটার্ন করে।

exec(): করেন্ট প্রসেস ইমেজকে নতুন প্রসেস ইমেজ দিয়ে রিপ্লেস করে। প্রোগ্রাম কারেন্ট স্পেসে লোড হয়ে এন্ট্রি পয়েন্ট থেকে চালু হয়।

মূল পার্থক্য: fork() নতুন প্রসেস তৈরি করে (parent ও child একসাথে চলে), exec() করেন্ট প্রসেসকে রিপ্লেস করে।

উদাহরণ

#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, state;
    process_id = fork();
    if (process_id == -1) {
        printf("can't fork, error occured\n");
        exit(EXIT_FAILURE);
    } else if (process_id == 0) {
        printf("The child process is (%u)\n", getpid());
        char *argv_list[] = {"ls", "-lart", "/home", NULL};
        execv("ls", argv_list);
        exit(0);
    } else {
        printf("The parent process is (%u)\n", getppid());
        if (waitpid(process_id, &state, 0) > 0) {
            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-এর পার্থক্য

  2. CSS Display এবং Visibility-এর পার্থক্য

  3. Go এবং Java-এর পার্থক্য

  4. Bash-এ $$ vs $BASHPID: প্রসেস আইডি ভেরিয়েবল পার্থক্য ব্যাখ্যা