ইউনিক্স ভিত্তিক সিস্টেমে পরিষেবা স্থাপনের সময় সিসাদমিন দৃষ্টিভঙ্গি থেকে ব্যবহারিক পার্থক্যগুলি কী কী?
ইউনিক্স ভিত্তিক সিস্টেমে পরিষেবা স্থাপনের সময় সিসাদমিন দৃষ্টিভঙ্গি থেকে ব্যবহারিক পার্থক্যগুলি কী কী?
উত্তর:
ডিমনাইজেশনের traditionalতিহ্যগত উপায় হ'ল:
fork()
setsid()
close(0) /* and /dev/null as fd 0, 1 and 2 */
close(1)
close(2)
fork()
এটি নিশ্চিত করে যে প্রক্রিয়াটি আর টার্মিনালের মতো একই প্রক্রিয়া গোষ্ঠীতে নেই এবং সুতরাং এটির সাথে একত্রে হত্যা করা হবে না। আইও পুনঃনির্দেশটি হ'ল আউটপুটটি টার্মিনালে প্রদর্শিত না হয়।
&
আপনার উত্তরের অংশটি ব্যাখ্যা যুক্ত করুন । এটি অসম্পূর্ণ বলে মনে হচ্ছে .. আপনি যদি আসল প্রশ্নটি পরীক্ষা করেন।
ডেমনের জন্য, আপনি যা চান তা হ'ল এমন একটি প্রক্রিয়া যা কোনও কিছুর সাথে কোনও সম্পর্ক নেই। খুব কমপক্ষে, আপনি এটি নিজের অধিবেশনটিতে থাকতে চান, টার্মিনালের সাথে সংযুক্ত না হওয়া, কোনও কিছুর জন্য পিতামাতার কাছ থেকে উত্তরাধিকার সূত্রে প্রাপ্ত কোনও ফাইল বর্ণনাকারী নেই, আপনার কোনও পিতা-মাতার যত্ন নেই (init ছাড়া অন্য) বর্তমান নেই ডিরেক্টরি /
যাতে একটি সর্বনাশ প্রতিরোধ না ...
টার্মিনাল থেকে বিচ্ছিন্ন করার জন্য, আপনি একটি নতুন অধিবেশন তৈরি করুন, তবে একটি সেশন তৈরি করার জন্য আপনার অবশ্যই কোনও গ্রুপ (বা সেশন) নেতা হওয়া উচিত নয়, তাই নতুন প্রক্রিয়াটি কাঁটাচালাই ভাল। পিতামাতাকে বহির্গমন হিসাবে ধরে নিয়ে যাওয়া, এর অর্থ এইও হয় যে প্রক্রিয়াটির আর কোনও পিতা-মাতা থাকবে না এবং দীক্ষা দিয়ে তা গ্রহণ করা হবে। তারপরে, সমস্ত সম্ভাব্য ফাইল বর্ণনাকারী বন্ধ করুন, আপনি chdir("/")
( ফাইলের বর্ণনাকারীদের মতো রিসোর্সটি রিলিজ করতে বর্তমান ওয়ার্কিং ডিরেক্টরিটি বন্ধ করতে পারবেন না , /
বর্তমান ওয়ার্কিং ডিরেক্টরিগুলি অন্তত আনমাউন্টিং ডিরেক্টরিগুলি রোধ করতে পারে না)।
যে প্রক্রিয়াটি একটি অধিবেশন নেতা, তাই এটির ঝুঁকি রয়েছে যে এটি যদি কোনও টার্মিনাল ডিভাইসটি কখনও খোলে, এটি সেই টার্মিনালের নিয়ন্ত্রণকারী প্রক্রিয়া হয়ে ওঠে। দ্বিতীয়বার চেষ্টা করা নিশ্চিত করে যে এটি ঘটবে না।
অন্য প্রান্তে, &, ইন্টারেক্টিভ শেলগুলিতে, একটি নতুন প্রক্রিয়া গ্রুপ কাঁটাচামচ করে এবং তৈরি করে (যাতে টার্মিনালের অগ্রভাগ প্রক্রিয়া গোষ্ঠীতে না হয়), এবং অ-ইন্টারেক্টিভ শেলগুলিতে, একটি প্রক্রিয়া কাঁটাচামচ করে এবং এতে সইগিনটি উপেক্ষা করে। এটি টার্মিনাল থেকে বিচ্ছিন্ন হয় না, ফাইল বর্ণনাকারী বন্ধ করে না (যদিও কিছু শেল স্ট্যান্ডিনে আবার খোলা হবে /dev/null
) ...
ডেমন হিসাবে প্রোগ্রাম / প্রক্রিয়া চালানো এবং এম্পারস্যান্ড ব্যবহার করে পটভূমিতে কাঁটাচামচ করার পার্থক্যটি মূলত মালিকানার সাথে সম্পর্কিত।
প্রায়শই, ডেমনের পিতামাতার প্রক্রিয়াটি হ'ল init প্রক্রিয়া (কোনও ইউনিক্স সিস্টেমে শুরু হওয়া প্রথম প্রক্রিয়া), ডেমন সেই প্রক্রিয়াটির সন্তান হবার অর্থ এটি কোনও অ-অধিকারযুক্ত ব্যবহারকারী হিসাবে আপনার সরাসরি নিয়ন্ত্রণে নেই । অন্যদিকে, কোনও প্রোগ্রাম / প্রক্রিয়াটিকে পটভূমিতে সংযুক্ত করার অর্থ আপনি যে কোনও সময় একে একে পূর্বের পৃষ্ঠায় ফিরে কল করতে এবং / বা এটি হত্যা করতে পারবেন।
command &
আপনার পিতামাতার মৃত্যুর পরে আপনার প্রক্রিয়াটি একটি SIGHUP সংকেত দ্বারা হত্যা করা হবে।
যদিও সিসাডমিনদের কিছু কাজের সুযোগ রয়েছে।
ব্যাশ সিস্টেমে আপনি ব্যবহার করতে পারেন:
(trap '' HUP; command) &
এটি একটি সাবশেল খোলে, HUP
খালি হ্যান্ডলারের সাহায্যে সিগন্যালটি আটকে দেয় এবং এম্পারস্যান্ড / কাঁটাচামচ করে।
আউটপুট এখনও ভুল দিকে পুনঃনির্দেশিত হতে পারে tty
। বা হারিয়ে যেতে।
আপনি সমাধান হতে পারে যে সঙ্গে &>command.out
, 1>output.out
অথবা2>errors.out
আপনার বেশিরভাগ সিস্টেমে nohup
কমান্ডটিতে অ্যাক্সেস থাকতে পারে ।
nohup
এই প্রক্রিয়াটি ব্যাপকভাবে সরল করে। এটি বেশ স্ট্যান্ডার্ড, তবে আমি অনেক ব্যস্তবক্স এম্বেড এমআরএমড বিতরণ এটি অনুপস্থিত খুঁজে পেয়েছি। আপনি শুধু লিখুন:
nohup command &
..এবং তুমি করে ফেলেছ. আউটপুট, আইআইআরসি, তে পুনঃনির্দেশিত হয় nohup.out
তবে এই ফাইলটির নাম একটি বিকল্পের সাহায্যে পরিবর্তন করা যেতে পারে।
command &
শেল থেকে পরে ডিকুয়াল করতে পারেন disown
যা দিয়ে কোনও পোস্ট-নোহুপ হিসাবে কাজ করে।