মোড়ক স্ক্রিপ্টগুলিতে নির্বাহের কারণ


27

আমি র‍্যাপার স্ক্রিপ্টের উদাহরণগুলি দেখেছি যা সংক্ষেপে নিম্নলিখিত:

#!/bin/bash

myprog=sleep
echo "This is the wrapper script, it will exec "$myprog""

exec "$myprog" "$@"

উপরে যেমন দেখা গেছে, তারা execনতুন তৈরি শেলটিকে প্রায় সঙ্গে সঙ্গে প্রতিস্থাপন করতে ব্যবহার করে $myprog। কেউ এটি ছাড়া এটি অর্জন করতে পারে exec:

#!/bin/bash

myprog=sleep
echo "This is the wrapper script, it will exec "$myprog""

"$myprog" "$@"

এই শেষ উদাহরণে, একটি নতুন ব্যাশ উদাহরণ শুরু হয়েছে এবং তারপরে $myprogব্যাশের উদাহরণের শিশু প্রক্রিয়া হিসাবে শুরু করা হবে।

প্রথম পদ্ধতির সুবিধা কী কী?


উদাহরণস্বরূপ দেখুন স্ট্যাকওভারফ্লো.com
টমাস ডিকি

উত্তর:


31

execব্যবহারটি মোড়কে আরও স্বচ্ছ করে তোলে, অর্থাৎ এটি ব্যবহারকারী বা অ্যাপ্লিকেশন जसले স্ক্রিপ্টটিকে কল করে তা সচেতন হওয়া দরকার যে এটি রিলে ঘুরে দেখা যায় যে "রিয়েল" প্রোগ্রাম চালু করে।

বিশেষত, যদি কলার প্রোগ্রামটি হত্যা করতে চায়, তবে তারা সবেমাত্র চালু করা প্রক্রিয়াটি মেরে ফেলবে। যদি মোড়ক স্ক্রিপ্ট একটি শিশু প্রক্রিয়া চালায়, কলকারীকে তাদের জেনে রাখা উচিত যে তাদের মোড়কের সন্তানের সন্ধান করা উচিত এবং পরিবর্তে এটি হত্যা করা উচিত। মোড়ক স্ক্রিপ্ট কিছু সংকেত রিলে করতে একটি ফাঁদ সেট করতে পারে তবে এটি সিগস্টপ বা সিগ্কিলের সাথে কাজ করবে না যা ধরা যায় না।

কলিং execকিছুটা মেমোরি (এবং অন্যান্য সংস্থান যেমন পিআইডি ইত্যাদি) সংরক্ষণ করে কারণ এটি করার কিছুই নেই বলে অতিরিক্ত শেল রাখার দরকার নেই।

যদি একাধিক মোড়ক থাকে তবে সমস্যাগুলি যুক্ত হয় (হত্যা করার সঠিক প্রক্রিয়া খুঁজে পেতে অসুবিধা, স্মৃতি ওভারহেড ইত্যাদি) etc.

কিছু শেল (যেমন কর্ন শেল) স্বয়ংক্রিয়ভাবে সনাক্ত করে যখন কোনও কমান্ড সর্বশেষ হয় এবং কোনও সক্রিয় ফাঁদ নেই এবং একটি অন্তর্নিহিত রাখে exec, তবে সবগুলি হয় না (যেমন বাশ নয়)।


10

কোনও সদৃশ খুঁজে পাওয়া যাচ্ছে না ... ফ্রিবিএসডি হ্যান্ডবুকটি দেখুন , যা যথেষ্ট যথেষ্ট কারণ দেয়:

execবিবৃতি নিদিষ্ট প্রোগ্রামের সাথে শেল প্রক্রিয়া প্রতিস্থাপন করে। যদি execবাদ দেওয়া হয়, প্রোগ্রামটি সঞ্চালনের সময় শেল প্রক্রিয়া স্মৃতিতে থেকে যায় এবং অকারণে সিস্টেম সংস্থানগুলি গ্রাস করে।

যা মূলত কারণটি আমাকে বেশ কিছুক্ষন আগে (পোর্টারদের একজন দ্বারা) ব্যাখ্যা করেছিল এবং এটি বেশ সুপরিচিত।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.