ডেমন হিসাবে একটি প্রোগ্রাম চালানো এবং '&' এর সাথে ব্যাকগ্রাউন্ডে চাপিয়ে দেওয়ার মধ্যে পার্থক্য কী?


45

ইউনিক্স ভিত্তিক সিস্টেমে পরিষেবা স্থাপনের সময় সিসাদমিন দৃষ্টিভঙ্গি থেকে ব্যবহারিক পার্থক্যগুলি কী কী?

উত্তর:


31

ডিমনাইজেশনের traditionalতিহ্যগত উপায় হ'ল:

fork()
setsid()
close(0) /* and /dev/null as fd 0, 1 and 2 */
close(1)
close(2)
fork()

এটি নিশ্চিত করে যে প্রক্রিয়াটি আর টার্মিনালের মতো একই প্রক্রিয়া গোষ্ঠীতে নেই এবং সুতরাং এটির সাথে একত্রে হত্যা করা হবে না। আইও পুনঃনির্দেশটি হ'ল আউটপুটটি টার্মিনালে প্রদর্শিত না হয়।


5
সুতরাং যদি কোনও টার্মিনাল পশ্চাদপট প্রক্রিয়া (&) বন্ধ করে দেয় তবে পটভূমি প্রক্রিয়াটিও বন্ধ হয়ে যাবে?
ব্যবহারকারীর 1561108

9
টার্মিনালটি প্রস্থান করলে প্রক্রিয়াটি SIGHUP পাবেন, সেই সিগন্যালের জন্য ডিফল্ট হ্যান্ডলারটি প্রক্রিয়াটি শেষ করতে হবে।
ডেনিস কার্সেমেকার

12
দয়া করে &আপনার উত্তরের অংশটি ব্যাখ্যা যুক্ত করুন । এটি অসম্পূর্ণ বলে মনে হচ্ছে .. আপনি যদি আসল প্রশ্নটি পরীক্ষা করেন।
mtk

1
এর কারণ, ব্যাকগ্রাউন্ডে জিনিসগুলি চালানো এবং প্রক্রিয়াটিকে বিশেষ কিছু করে
তোলে

33

ডেমনের জন্য, আপনি যা চান তা হ'ল এমন একটি প্রক্রিয়া যা কোনও কিছুর সাথে কোনও সম্পর্ক নেই। খুব কমপক্ষে, আপনি এটি নিজের অধিবেশনটিতে থাকতে চান, টার্মিনালের সাথে সংযুক্ত না হওয়া, কোনও কিছুর জন্য পিতামাতার কাছ থেকে উত্তরাধিকার সূত্রে প্রাপ্ত কোনও ফাইল বর্ণনাকারী নেই, আপনার কোনও পিতা-মাতার যত্ন নেই (init ছাড়া অন্য) বর্তমান নেই ডিরেক্টরি /যাতে একটি সর্বনাশ প্রতিরোধ না ...

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

যে প্রক্রিয়াটি একটি অধিবেশন নেতা, তাই এটির ঝুঁকি রয়েছে যে এটি যদি কোনও টার্মিনাল ডিভাইসটি কখনও খোলে, এটি সেই টার্মিনালের নিয়ন্ত্রণকারী প্রক্রিয়া হয়ে ওঠে। দ্বিতীয়বার চেষ্টা করা নিশ্চিত করে যে এটি ঘটবে না।

অন্য প্রান্তে, &, ইন্টারেক্টিভ শেলগুলিতে, একটি নতুন প্রক্রিয়া গ্রুপ কাঁটাচামচ করে এবং তৈরি করে (যাতে টার্মিনালের অগ্রভাগ প্রক্রিয়া গোষ্ঠীতে না হয়), এবং অ-ইন্টারেক্টিভ শেলগুলিতে, একটি প্রক্রিয়া কাঁটাচামচ করে এবং এতে সইগিনটি উপেক্ষা করে। এটি টার্মিনাল থেকে বিচ্ছিন্ন হয় না, ফাইল বর্ণনাকারী বন্ধ করে না (যদিও কিছু শেল স্ট্যান্ডিনে আবার খোলা হবে /dev/null) ...


chdir ("/") এর ব্যবহার কী? ফাইল বর্ণনাকারী বন্ধ করতে?
টিমোথি লেউং

টিমোথিলিওং, সম্পাদনা দেখুন।
স্টাফেন চেজেলাস

8

ডেমন হিসাবে প্রোগ্রাম / প্রক্রিয়া চালানো এবং এম্পারস্যান্ড ব্যবহার করে পটভূমিতে কাঁটাচামচ করার পার্থক্যটি মূলত মালিকানার সাথে সম্পর্কিত।

প্রায়শই, ডেমনের পিতামাতার প্রক্রিয়াটি হ'ল init প্রক্রিয়া (কোনও ইউনিক্স সিস্টেমে শুরু হওয়া প্রথম প্রক্রিয়া), ডেমন সেই প্রক্রিয়াটির সন্তান হবার অর্থ এটি কোনও অ-অধিকারযুক্ত ব্যবহারকারী হিসাবে আপনার সরাসরি নিয়ন্ত্রণে নেই । অন্যদিকে, কোনও প্রোগ্রাম / প্রক্রিয়াটিকে পটভূমিতে সংযুক্ত করার অর্থ আপনি যে কোনও সময় একে একে পূর্বের পৃষ্ঠায় ফিরে কল করতে এবং / বা এটি হত্যা করতে পারবেন।


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

7

command &আপনার পিতামাতার মৃত্যুর পরে আপনার প্রক্রিয়াটি একটি SIGHUP সংকেত দ্বারা হত্যা করা হবে।

যদিও সিসাডমিনদের কিছু কাজের সুযোগ রয়েছে।

ব্যাশ সিস্টেমে আপনি ব্যবহার করতে পারেন:

(trap '' HUP; command) &

এটি একটি সাবশেল খোলে, HUPখালি হ্যান্ডলারের সাহায্যে সিগন্যালটি আটকে দেয় এবং এম্পারস্যান্ড / কাঁটাচামচ করে।

আউটপুট এখনও ভুল দিকে পুনঃনির্দেশিত হতে পারে tty। বা হারিয়ে যেতে।
আপনি সমাধান হতে পারে যে সঙ্গে &>command.out, 1>output.outঅথবা2>errors.out

আপনার বেশিরভাগ সিস্টেমে nohupকমান্ডটিতে অ্যাক্সেস থাকতে পারে ।
nohupএই প্রক্রিয়াটি ব্যাপকভাবে সরল করে। এটি বেশ স্ট্যান্ডার্ড, তবে আমি অনেক ব্যস্তবক্স এম্বেড এমআরএমড বিতরণ এটি অনুপস্থিত খুঁজে পেয়েছি। আপনি শুধু লিখুন:

nohup command &

..এবং তুমি করে ফেলেছ. আউটপুট, আইআইআরসি, তে পুনঃনির্দেশিত হয় nohup.outতবে এই ফাইলটির নাম একটি বিকল্পের সাহায্যে পরিবর্তন করা যেতে পারে।


2
কেবলমাত্র লক্ষ করুন যে জেডএসএইচ দিয়ে আপনি command &শেল থেকে পরে ডিকুয়াল করতে পারেন disownযা দিয়ে কোনও পোস্ট-নোহুপ হিসাবে কাজ করে।
গণিত
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.