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

পাইথনে fork() ব্যবহার করে চাইল্ড প্রসেস তৈরি


fork() কী?

os.fork() করেন্ট প্রসেসের একটি কপি (চাইল্ড প্রসেস) তৈরি করে। यুনিক্স/লিনাক্স-এ প্রসেস তৈরির মূল পদ্ধতি। উইন্ডোজে সাপোর্ট নেই (পাইথন ৩.৮+ এ os.fork() উইন্ডোজেও কাজ করে কিছু শর্তে, কিন্তু সাধারণত নন-পোর্টেবল)।

রিটার্ন ভ্যালু

  • > 0 (পারেন্ট-এ): চাইল্ড প্রসেসের PID
  • = 0 (চাইল্ড-এ): ০
  • < 0: এরর

উদাহরণ: os.fork()


import os

def parent_child():
    pid = os.fork()
    
    if pid > 0:
        # প্যারেন্ট প্রসেস
        print(f"Parent process: PID = {os.getpid()}, Child PID = {pid}")
    elif pid == 0:
        # চাইল্ড প্রসেস
        print(f"Child process: PID = {os.getpid()}, Parent PID = {os.getppid()}")
    else:
        print("Fork failed!")

if __name__ == "__main__":
    parent_child()

আউটপুট নমুনা

Parent process: PID = 8023, Child PID = 8024
Child process: PID = 8024, Parent PID = 8023

pty মডিউল (Pseudo-Terminal)

pty.fork() একটি প্রসেস তৈরি করে যার একটি পseudo-টার্মিনাল থাকে। ইন্টারঅ্যাক্টিভ প্রোগ্রাম চালাতে ব্যবহৃত হয়।


import pty, os

pid, fd = pty.fork()

if pid == 0:
    # চাইল্ড: কমান্ড এক্সিকিউট
    os.execvp('ls', ['ls', '-la'])
else:
    # প্যারেন্ট: fd দিয়ে I/O করতে পারে
    print(f"Child PID: {pid}")
    os.waitpid(pid, 0)

গুরুত্বপূর্ণ নোট

  • Windows-এ fork() নেই। ক্রস-প্ল্যাটফর্মের জন্য multiprocessing.Process ব্যবহার করুন।
  • ফর্ক করার পর exec() ফ্যামিলি (execvp, execl ইত্যাদি) কল করে নতুন প্রোগ্রাম চালানো হয়।
  • চাইল্ড প্রসেস প্যারেন্টের মেমরি কপি পায় (Copy-on-Write)।
  • জোম্বি প্রসেস এড়াতে প্যারেন্ট wait() বা waitpid() কল করবেন।

multiprocessing এ কনভার্সন


# fork()-এর বদলে (ক্রস-প্ল্যাটফর্ম)
from multiprocessing import Process

def child():
    print(f"Child PID: {os.getpid()}")

if __name__ == '__main__':
    p = Process(target=child)
    p.start()
    p.join()
  1. পাইথনে Tkinter ব্যবহার করে বাটন তৈরি

  2. পাইথন ব্যবহার করে স্টপওয়াচ তৈরি করা

  3. পাইথনে WhatsApp অটোমেশন (WhatsApp using Python)

  4. পাইথনে cx_Freeze ব্যবহার করে এক্সিকিউটেবল বানানো