কাঁটাচামচ () এবং এক্সিকিউটিভ () কে কখন কল করবেন?


9

আমি কাঁটাচামচ () এবং এক্সিকিউট () কমান্ড সম্পর্কে শিখছি। দেখে মনে হচ্ছে কাঁটাচামচ () এবং এক্সিকিউট () সাধারণত একসাথে ডাকা হয়। (কাঁটাচামচ () একটি নতুন শিশু প্রক্রিয়া তৈরি করে এবং এক্সিকিউটিভ () বর্তমান প্রক্রিয়া চিত্রটি নতুনের সাথে প্রতিস্থাপন করে) এর মতো পরিস্থিতি কি আছে?


2
Ditionতিহ্যবাহী কাঁটাচামচ: যখন (1) কাঁটাচামচ (); হোগ সিস্টেম সংস্থানসমূহ।
জোশুয়া 21

উত্তর:


22

নিশ্চিত! "মোড়ক" প্রোগ্রামগুলিতে একটি সাধারণ প্যাটার্ন হ'ল বিভিন্ন কাজ করা এবং তারপরে কেবল একটি execকল দিয়ে কোনও অন্য প্রোগ্রামের সাথে নিজেকে প্রতিস্থাপন করা (কোনও কাঁটাচামচ নয়) to

#!/bin/sh
export BLAH_API_KEY=blub
...
exec /the/thus/wrapped/program "$@"

এর বাস্তব জীবনের উদাহরণটি GIT_SSH(যদিও আপনি উপরের র‌্যাপার প্রোগ্রাম পদ্ধতিটি না করতে চান তবে git(1)তাও দেয় GIT_SSH_COMMAND)।

কেবলমাত্র কর্মী প্রক্রিয়াগুলির গুচ্ছ তৈরি করার সময় কেবলমাত্র কাঁটাচামচ ব্যবহার করা হয় (যেমন httpdকাঁটাচামচ মোডে অ্যাপাচি (যদিও কাঁটাচামচ কেবলমাত্র আরও ভাল স্যুট প্রক্রিয়া যা সিপিইউ বার্ন করতে হবে এবং নেটওয়ার্ক I / O হওয়ার অপেক্ষায় তাদের থাম্বগুলি পিছনে ফেলে না) ) বা ওপেনবিএসডি তে এবং অন্যান্য প্রোগ্রাম দ্বারা ব্যবহৃত সুবিধার্থে পৃথকীকরণের জন্য sshd(কোনও নির্বাহী নয়)

$ doas pkg_add pstree
...
$ pstree | grep sshd
 |-+= 70995 root /usr/sbin/sshd
 | \-+= 28571 root sshd: jhqdoe [priv] (sshd)
 |   \-+- 14625 jhqdoe sshd: jhqdoe@ttyp6 (sshd)

rootSshd কমান্ড ক্লায়েন্টের নিজেই একটি অনুলিপি (28571) এবং তারপর বিশেষাধিকার বিচ্ছেদ জন্য আরেকটি অনুলিপি (14625) বন্ধ করা forked সংযোগ করেছে।


14

প্রচুর আছে.

যে প্রোগ্রামগুলি fork()ব্যতীত কলগুলি হয় exec()সেগুলি সাধারণত পৃথক প্রক্রিয়াগুলিতে মূল কার্যক্রমে বিভিন্ন কাজ সম্পাদনের জন্য শিশু কর্মী প্রক্রিয়াগুলির এক ধরণ অনুসরণ করে । , এবং dhclient, হিসাবে বিচিত্র হিসাবে প্রোগ্রামগুলিতে এটি পাবেন ।php-fpmurxvtd

একটি প্রোগ্রাম যা কল exec()ছাড়াই কল করে তা fork()হল চেইন লোডিং , এটির প্রক্রিয়াটি একটি ভিন্ন প্রোগ্রামের চিত্রের সাথে ওভারলেল করে। চেইন লোডিং ইউটিলিটিগুলির একটি পুরো উপকৃষ্টি রয়েছে যা রাষ্ট্র প্রক্রিয়াজাতকরণের জন্য নির্দিষ্ট কাজ করে এবং তারপরে সেই সংশোধিত প্রক্রিয়া রাষ্ট্রের সাথে চালানোর জন্য অন্য প্রোগ্রাম চালায়। পরিষেবা এবং সিস্টেম পরিচালনার সরঞ্জামসেটগুলির ডেমনটোল পরিবারগুলিতে এই জাতীয় ইউটিলিটিগুলি সাধারণ , তবে সেগুলির মধ্যে সীমাবদ্ধ নয়। কয়েকটি উদাহরণ:

Daemontools পরিবার toolsets আছে অনেক থেকে, এই ধরনের টুলস machineenvমাধ্যমে find-matching-jvmকরতে runtool


2

অন্যান্য উত্তর, debuggers, ব্যবহারের ক্ষেত্রে ptrace, সাধারণত মধ্যে ফাঁক ব্যবহার করতে forkএবং exec। কোনও ডিবাগির সাথে এটি চিহ্নিত করা উচিত PTRACE_TRACEMEযে এটির মূল প্রক্রিয়া - ডিবাগার দ্বারা এটি সনাক্ত করা হচ্ছে। এটি ডিবাগারকে প্রয়োজনীয় অনুমতি দেওয়া।

সুতরাং একটি ডিবাগার নিজেই কাঁটাচামচ হবে। বাচ্চাটি ফোন করে ptraceসাথে PTRACE_TRACEMEডাকত exec। বাচ্চা নির্বাহকের যে কোনও প্রোগ্রাম এখন পিতামাতার দ্বারা সনাক্তযোগ্য হবে।


কাঁটাচামচ এবং এক্সেকিউটের মধ্যে কাজ করার অনেকগুলি উদাহরণ রয়েছে, সর্বাধিক সাধারণ I / O কে পুনঃনির্দেশ করা হয় (উদাহরণস্বরূপ পাইপ স্থাপন করা)। তবে প্রশ্নটি কোনও এক্সিকিউট ছাড়াই কাঁটাচামচ করা সম্পর্কে।
বার্মার 18

0

কাঁটাচামচ ছাড়া এক্স

কমপক্ষে দুটি কারণ রয়েছে যে আপনি কেন এই জাতীয় কাজটি করতে চান:

  1. চেইন লোড হচ্ছে। বর্তমান প্রক্রিয়া চিত্রটি আলাদা কিছু দিয়ে প্রতিস্থাপিত হয়েছে।
  2. বর্তমানে চলমান প্রোগ্রামটি পুনরায় চালু করা (উদাহরণস্বরূপ আপনি যখন সাইনআপ করেন বা এই জাতীয় সার্ভার প্রক্রিয়া ঘটে থাকে, সমস্ত কিছু পুনরায় লোড করা হয় এবং পুরোপুরি নতুন করে শুরু করা হয়)। কিছু উপায়ে, কেউ যুক্তি দিতে পারে এটি চেইন লোডিং, কেবল একই প্রোগ্রামের সাথে একযোগে।

এক্সিকিউট ছাড়া কাঁটাচামচ

প্রতিটি ডেমোন প্রতিটি বার এটি শুরু করার পরে (দুবার, প্রকৃতপক্ষে) করে। এটি বেশ কয়েকটি কাজ করে, এর মধ্যে শেলটি ঝুলবে না (যেহেতু শেলটি শেষ হওয়ার অপেক্ষায় মূল প্রক্রিয়া) এবং ডেমোনটি আর টার্মিনাল দ্বারা নিয়ন্ত্রণ করা যায় না, সুতরাং শেল উইন্ডোটি বন্ধ করা ডিমনকে হত্যা করে না।

আর একটি প্রচলিত ব্যবহার হ'ল শ্রমিক শিশুদের কাঁটাচামচ করা, যা প্রায় 25 বছর আগে আপাচি ওয়েব সার্ভার দ্বারা বিখ্যাত করা হয়েছিল (আজকাল বজ্রপালনের ঝাঁকুনির ঝুঁকির ঝুঁকির কারণে এটি আর্টের অবস্থা হিসাবে বিবেচিত হয় না, তবে এটি নিশ্চিত করে যে এটি সরবরাহ করে সহজতম, সবচেয়ে শক্তিশালী সার্ভার সম্ভব)।

তবুও অন্য একটি সাধারণ ব্যবহার হ'ল ধারাবাহিক স্ন্যাপশট তৈরি করা। forkএটি কেবল একটি প্রক্রিয়া তৈরি করে না, এটি ঠিকানার অনুলিপি করে (তাত্ত্বিকভাবে বাস্তবে এটি কেবল পৃষ্ঠাগুলিকে অনুলিপি করে অনুলিপি চিহ্নিত করে) ঠিকানার স্থান। এটি (পারমাণবিকভাবে) সম্পূর্ণ প্রোগ্রামের ডেটার একটি স্ন্যাপশট তৈরি করে যা পিতামাতারা আর সংশোধন করতে পারবেন না।
কিছু প্রোগ্রাম এর সুবিধা নেয়। উদাহরণস্বরূপ redis একই সাথে ডেটা সেট করে একই সময়ে সংশোধন করার সময় ডিস্কে (সামঞ্জস্যপূর্ণ অবস্থায়) সংরক্ষণ করে । এটি কেবলমাত্র কাজ করে কারণ forkএকটি সামঞ্জস্যপূর্ণ স্ন্যাপশট তৈরি করেছে যা পিতামাতার প্রক্রিয়া দ্বারা সম্পাদিত পরিবর্তনগুলি দেখতে পায় না।


আজকাল এটি আসলে খুব কম দামান, বেশিরভাগ এটি স্ট্যান্ডার্ড হিসাবে না করে বা সাধারণভাবে ব্যবহৃত মোডটি না করায়। এটা তোলে কাঁটাচামচ করার জন্য একটি ভুল নেতৃস্থানীয় প্রস্তুতি মেলেনি এবং আতঙ্ক , এবং ভুল অন্যতম dæmonization ভ্রান্ত ধারণা । এই ভুলটি শেষ পর্যন্ত ব্যাপকভাবে পক্ষপাতী হয়ে পড়েছে।
JdeBP
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.