`অস্বীকার -হ` এবং` নহুপ` কার্যকরভাবে একইভাবে কাজ করে?


18

disown

  • যখন শেলটি সমাপ্ত হয় তখন শেলটিকে তার অস্বীকৃত কাজের কাছে SIGHUP না প্রেরণ করে এবং

  • শেলের জব নিয়ন্ত্রণ থেকে অস্বীকৃত কাজ সরিয়ে দেয়।

প্রথমটি কি দ্বিতীয়টির ফলাফল? অন্য কথায়, শেল থেকে শুরু হওয়া কোনও প্রক্রিয়া যদি কোনও উপায়ে শেলের কাজ নিয়ন্ত্রণ থেকে সরিয়ে ফেলা হয়, শেলটি শেষ হয়ে যায় তখন শেলটি প্রক্রিয়াটিতে সাইনগআপ প্রেরণ করবে না?

disown -h এখনও একটি প্রক্রিয়া শেলের কাজের নিয়ন্ত্রণে রাখে। এর অর্থ কি এই যে disown -hকোনও প্রক্রিয়াটি এখনও শেল থেকে প্রেরিত সিগহুপ গ্রহণ করে, কিন্তু প্রক্রিয়াটি "উপেক্ষা" হিসাবে সাইনআপের ক্রিয়া সেট করে? এর মতোই শোনাচ্ছে nohup

$ sleep 123 & disown -h
[1] 26103
$ jobs
[1]+  Running                 sleep 123 &
$ fg 1
sleep 123
$ ^Z
[1]+  Stopped                 sleep 125
$ bg 1
[1]+ sleep 123 &
$ exit

$ ps aux | grep sleep
t        26103  0.0  0.0  14584   824 ?        S    15:19   0:00 sleep 123

কি disown -hএবং nohupকাজ কার্যকরভাবে একই, যদি আমরা একটি টার্মিনাল ব্যবহার করে তাদের পার্থক্য উপেক্ষা?

ধন্যবাদ।


এখানে আর আলোচিত নয় এমন একটি পার্থক্য হ'ল আপনি যদি এটি ব্যবহার না করে থাকেন তবে আপনাকে nohupস্টিডিন / স্ট্ডআউট / স্টডারকে টিটিওয়াই থেকে দূরে সরিয়ে নিতে হবে (আপনার মূল শেলটি একটির সাথে সংযুক্ত হওয়া উচিত)। (ওটো, আমি প্রকৃতপক্ষে একটি হার্ড হার্ডকোডড ডিফল্টের উপর নির্ভর করার চেয়ে ভাল অনুশীলনটিকে বিবেচনা করি ./nohup.out)।
চার্লস ডাফি

উত্তর:


21

nohupএবং disown -hনয় ঠিক একই জিনিস।

এর সাথে disown, বর্তমান ইন্টারেক্টিভ শেলের কাজের তালিকা থেকে একটি প্রক্রিয়া সরানো হবে। চলমান jobsএকটি ব্যাকগ্রাউন্ড প্রক্রিয়া শুরু এবং চলমান পরে disownশেল চাকরি যেমন যে প্রক্রিয়া দেখাবে না। অস্বীকার করা চাকরিটি HUPশেলটি থেকে বেরিয়ে আসার পরে তা পাবেন না (তবে শেষে নোট দেখুন)।

এর সাথে disown -h, চাকরির তালিকা থেকে HUPচাকরীটি সরানো হবে না, তবে শেলটি যদি এটি থেকে বেরিয়ে আসে তবে এটিতে একটি সংকেত প্রেরণ করবে না (তবে শেষে নোটটি দেখুন)।

nohupউপযোগ উপেক্ষা করে HUPসংকেত এবং প্রদত্ত ইউটিলিটি শুরু হয়। ইউটিলিটি সিগন্যাল মাস্ককে উত্তরাধিকার সূত্রে প্রাপ্ত nohupএবং তাই HUPসিগন্যালটিকে এড়িয়ে যাবে । শেলটি শেষ হয়ে গেলে, প্রক্রিয়াটি শিশু প্রক্রিয়া হিসাবে থাকে nohup(এবং এতে nohupপুনরায় প্যারেন্টেন্ট হয় init)।

পার্থক্যটি হ'ল প্রক্রিয়াটি কে সংকেত পাঠায় তা বিবেচনা ছাড়াই nohupউপেক্ষা করে শুরু হয়েছিল HUP। অস্বীকৃত প্রক্রিয়াগুলি কেবল শেল দ্বারা একটি সংকেত প্রেরণ করা হয় না , তবে এখনও উদাহরণ থেকে সিগন্যাল প্রেরণ করা যেতে পারে এবং এটি এড়ানো হবে না।HUPkill -s HUP <pid>

নোটটি HUPকেবল শেলের কাজগুলিতে যদি প্রেরণ করা হয় তবে

  • শেলটি একটি লগইন শেল এবং huponexitশেল বিকল্প সেট করা হয়, বা
  • শেল নিজেই একটি HUPসংকেত গ্রহণ করে।

bashম্যানুয়াল থেকে প্রাসঙ্গিক বিট (আমার জোর):

সংকেত

[...]

শেলটি একটি প্রাপ্তির পরেSIGHUP ডিফল্টরূপে প্রস্থান হয় । প্রস্থান করার আগে, একটি ইন্টারেক্টিভ শেল SIGHUPচলমান বা বন্ধ হয়ে সমস্ত কাজগুলিতে পুনরায় পাঠায় । থামানো চাকরিগুলি SIGCONTযাতে তারা তা গ্রহণ করে তা নিশ্চিত করার জন্য প্রেরণ করা হয় SIGHUP। একটি নির্দিষ্ট কাজ সংকেত পাঠানো শেল প্রতিরোধ করার জন্য, এটা দিয়ে কাজ টেবিল থেকে অপসারণ করা উচিত disownbuiltin (দেখুন SHELL BUILTIN COMMANDSনীচে) বা গ্রহণ না করার চিহ্নিত SIGHUP ব্যবহার disown -h

যদি huponexitশেল বিকল্পটি সেট করা থাকে shopt, একটি ইন্টারেক্টিভ লগইন শেলটি প্রস্থান করা হলে সমস্ত কাজের জন্য bashএকটি পাঠায় SIGHUP

disown [-ar] [-h] [jobspec ... | pid ... ]

বিকল্পগুলি ছাড়াই, প্রতিটি jobspecসক্রিয় কাজের টেবিল থেকে সরান । [...] যদি -hবিকল্পটি দেওয়া হয়, প্রত্যেকটি টেবিল থেকে সরানোjobspec হয় না , তবে চিহ্নিত করা হয় যাতে SIGHUPশেলটি যদি একটি পায় তবে এটি চাকরিতে প্রেরণ করা হবে নাSIGHUP । [...]

সম্পর্কিত:


আমি পেতে bash: disown: nohup: no such jobএবং একই জন্য sleepএবং 5থেকে disown nohup sleep 5 &। আপনি দ্বিতীয় বাক্যটি শেষ বাক্য থেকে কী বোঝাতে চেয়েছিলেন?
রুসলান

@Ruslan হ্যাঁ আমি অনুপস্থিত করছি &সেখানে (এবং ক্রম nohupএবং disownএছাড়াও ভুল ছিল)। ধন্যবাদ। এখন আপডেট হবে।
কুসালানন্দ


@ টিম উত্তরের অতিরিক্ত সম্পাদনার জন্য দুঃখিত। আমার মাথাটি পেতে এটি কিছুটা সময় নিয়েছে। আমি এখন সম্পন্ন।
কুসালানন্দ

ধন্যবাদ। disownশেলটির কাজের তালিকা থেকে শিশুটিকে সরিয়ে শেল কোনও সন্তানের কাছে سگুপ প্রেরণ না করে makes disown -hএকই অর্জন কিভাবে ?
টিম

4

তারা ভিন্ন ধরনের:

  • সক্রিয় কাজের টেবিল থেকে অস্বীকার কাজ সরিয়ে দেয়। তারপরে বর্তমান কাজ দিয়ে চালিয়ে যান। -এর সাথে প্রসেসকে সাইনআপ পাঠানো হয় না । পরিবর্তে যখন এটি একটি সাইনআপ গ্রহণ করে, এতে থাকা শেলটি দিয়ে এটি মারা যায়।

  • নোহাপ এইচইউপিকে উপেক্ষা করে। তারপরে প্রসেস বন্ধ হয়ে টার্মিনালে যা যা হত তার পরিবর্তে কোনও ফাইলে যায় nohup.out

    নোহপ POSIX দ্বারা সংজ্ঞায়িত করা হয় যখন অস্বীকার করা হয় না।


আপনার অর্থ কী, "এতে থাকা শেলটি দিয়ে মারা যান"? পিতামাতার প্রক্রিয়া হত্যা কোনও শিশুকেই হত্যা করে না। যে প্রোগ্রামগুলির টার্মিনালগুলি বন্ধ থাকে সেগুলি সাধারণত টার্মিনালের পিটিওয়াইয়ের সাথে সংযুক্ত কোনও ফাইল হ্যান্ডেলের সাথে যোগাযোগের চেষ্টা সম্পর্কিত ব্যর্থতার কারণে মারা যায়, তবে স্টিডিন / স্টডআউট / স্টার্ডার যদি অন্য কোথাও পুনঃনির্দেশিত হয়, তবে তা ঘটবে না।
চার্লস ডাফি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.