নোহপ, অস্বীকার করা এবং এর মধ্যে পার্থক্য


579

মধ্যে পার্থক্য কি

$ nohup foo

এবং

$ foo &

এবং

$ foo & 
$ disown

50
অপেক্ষা করুন, আপনি কোনও পিআইডি উল্লেখ না করে অস্বীকার করতে পারবেন? গ্রেট!
রিপার 234

34
এছাড়াও রয়েছে foo &!যা একদম শুরু থেকে এটা বর্জন সমান হওয়া উচিত।
ব্যবহারকারী 4514

26
বাশ সমর্থন করে না!
জোনাস কোঙ্গস্লুন্ড

20
foo & disownঅবিলম্বে অস্বীকার করা।
ctrl-alt-delor

9
আমি একটি উল্লেখ দেখতে ভালোবাসতাম setsid, এবং কিভাবে এটা সম্পর্কিত disownএবংnohup
YoungFrog

উত্তর:


558

আসুন প্রথমে দেখে নেওয়া যাক যদি কোনও প্রোগ্রাম কোনও ইন্টারেক্টিভ শেল থেকে শুরু হয় (কোনও টার্মিনালের সাথে সংযুক্ত) ছাড়া &(এবং কোনও পুনর্নির্দেশ ছাড়াই)। সুতরাং ধরে নেওয়া যাক আপনি সবেমাত্র টাইপ করেছেন foo:

  • প্রক্রিয়া চলমান fooতৈরি করা হয়।
  • প্রক্রিয়াটি শেল থেকে স্ট্ডিন, স্টডআউট এবং স্ট্ডারকে উত্তরাধিকার সূত্রে প্রাপ্ত হয়। সুতরাং এটি একই টার্মিনালের সাথেও সংযুক্ত is
  • শেলটি যদি একটি পায় তবে SIGHUPএটি SIGHUPপ্রক্রিয়াতে একটি প্রেরণ করে (যা সাধারণত প্রক্রিয়াটি শেষ করে দেয়)।
  • অন্যথায় প্রক্রিয়াটি শেষ না হওয়া পর্যন্ত শেলটি অপেক্ষা করে (অবরুদ্ধ)।

এখন, আসুন আমরা কীভাবে প্রক্রিয়াটিকে ব্যাকগ্রাউন্ডে রাখি তা হল দেখুন foo &:

  • প্রক্রিয়া চলমান fooতৈরি করা হয়।
  • প্রক্রিয়াটি শেল থেকে স্টাডাউট / স্টডারার উত্তরাধিকার সূত্রে প্রাপ্ত হয় (সুতরাং এটি এখনও টার্মিনালে লিখেছে)।
  • নীতিগতভাবে প্রক্রিয়াটি স্ট্ডিনের উত্তরাধিকার সূত্রে প্রাপ্ত হয়, তবে এটি স্টিডিনের কাছ থেকে পড়ার চেষ্টা করার সাথে সাথে এটি বন্ধ হয়ে যায়।
  • এটি শেল পরিচালনা করে এমন ব্যাকগ্রাউন্ড কাজের তালিকায় রাখে, যার অর্থ বিশেষত:
    • এটি তালিকাভুক্ত jobsএবং ব্যবহার করে অ্যাক্সেস করা যায় %n( nকাজের নম্বরটি কোথায় )।
    • এটি ব্যবহার করে অগ্রভাগের জবতে রূপান্তর করা যেতে পারে fg, এটির ক্ষেত্রে এটি এমনভাবে চলতে থাকে যেন আপনি &এটি ব্যবহার না করেন (এবং যদি স্ট্যান্ডার্ড ইনপুট থেকে পড়ার চেষ্টা করার কারণে এটি বন্ধ হয়ে যায় তবে এটি এখন টার্মিনাল থেকে পড়তে পারে)।
    • শেলটি যদি SIGHUPএকটি SIGHUPপেয়ে থাকে তবে এটি প্রক্রিয়াতে একটি প্রেরণ করে। শেলের উপর নির্ভর করে এবং সম্ভবত শেলের জন্য নির্ধারিত বিকল্পগুলির উপর নির্ভর করে, শেলটি শেষ SIGHUPকরার সময় এটি প্রক্রিয়াতে একটি প্রেরণও প্রেরণ করবে ।

এখন disownশেলের কাজের তালিকা থেকে কাজটি সরিয়ে দেয়, সুতরাং উপরের সমস্ত উপ-পয়েন্টগুলি আর প্রয়োগ করে না ( SIGHUPশেল দ্বারা প্রক্রিয়াটি প্রেরণ করা সহ )। তবে মনে রাখবেন যে এখনও টার্মিনাল সাথে সংযুক্ত করা হয়, তাই যদি টার্মিনাল ধ্বংস করা হয় (যদি এটি একটি Pty ছিল, দ্বারা নির্মিত মত যা ঘটতে পারে xtermবা ssh, এবং নিয়ন্ত্রণকারী প্রোগ্রাম সমাপ্ত করা হয়ে থাকে xterm ক্লোজিং বা সসীম দ্বারা, , SSH সংযোগ) , প্রোগ্রামটি স্ট্যান্ডার্ড ইনপুট থেকে পড়ার বা স্ট্যান্ডার্ড আউটপুটে লেখার চেষ্টা করার সাথে সাথে ব্যর্থ হবে।

কি nohupকরে, অন্য দিকে, কার্যকরভাবে টার্মিনাল থেকে প্রক্রিয়া আলাদা করা:

  • এটি স্ট্যান্ডার্ড ইনপুটটি বন্ধ করে দেয় (প্রোগ্রামটি কোনও অগ্রভাগে চালিত হওয়া সত্ত্বেও কোনও ইনপুট পড়তে সক্ষম হবে না it এটি থামানো হয়নি, তবে একটি ত্রুটি কোড গ্রহণ করবে বা EOF)।
  • এটি স্ট্যান্ডার্ড আউটপুট এবং ফাইলে স্ট্যান্ডার্ড ত্রুটি পুনর্নির্দেশ করে nohup.out, সুতরাং প্রোগ্রামটি স্ট্যান্ডার্ড আউটপুটটিতে লেখার জন্য ব্যর্থ হবে না যদি টার্মিনাল ব্যর্থ হয়, তাই প্রক্রিয়াটি যা লিখবে তা হারিয়ে যায় নি।
  • এটি প্রক্রিয়াটিকে SIGHUP(যেমন নাম) পেতে বাধা দেয় ।

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

সুতরাং সংক্ষেপে:

  • & কাজটিকে পটভূমিতে রাখে, এটি ইনপুটটি পড়ার চেষ্টা করতে বাধা দেয় এবং শেলটি এর সমাপ্তির জন্য অপেক্ষা না করে তোলে।
  • disownশেলের কাজ নিয়ন্ত্রণ থেকে প্রক্রিয়াটি সরিয়ে দেয়, তবে এটি এখনও টার্মিনালের সাথে সংযুক্ত রাখে। ফলাফলগুলির মধ্যে একটি শেল এটি প্রেরণ করবে না SIGHUP। স্পষ্টতই, এটি কেবল ব্যাকগ্রাউন্ড জবগুলিতে প্রয়োগ করা যেতে পারে, কারণ যখন কোনও পূর্বের কাজ চলছে তখন আপনি এটি প্রবেশ করতে পারবেন না।
  • nohupটার্মিনাল থেকে প্রক্রিয়া সংযোগ বিচ্ছিন্ন, তার আউটপুট পুননির্দেশনা nohup.outএবং এ থেকেই ঢাল SIGHUP। এর মধ্যে একটি প্রভাব (নামকরণ) এটি প্রক্রিয়াটি কোনও প্রেরিতকে গ্রহণ করবে না SIGHUP। এটি চাকরি নিয়ন্ত্রণ থেকে সম্পূর্ণ স্বাধীন এবং নীতিগতভাবে অগ্রভাগের কাজের জন্যও ব্যবহার করা যেতে পারে (যদিও এটি খুব কার্যকর নয়)।

8
+1 ধন্যবাদ তখন অস্বীকার, নোপআপ এবং & একসাথে ব্যবহার করার পরে কী ঘটে?
টিম

15
যদি আপনি তিনটি একসাথে ব্যবহার করেন, প্রক্রিয়াটি পটভূমিতে চলমান থাকে, শেলের কাজ নিয়ন্ত্রণ থেকে সরানো হয় এবং টার্মিনাল থেকে কার্যকরভাবে সংযোগ বিচ্ছিন্ন হয়ে যায়।
celtschk


1
disown %1এবং মধ্যে পার্থক্য কি disown -h %1? দ্বিতীয়টি টার্মিনালটি প্রস্থান না হওয়া অবধি নিয়মিত কাজ হিসাবে রাখবে (তবে এইচইউপি সিগন্যাল উপেক্ষা করবে)?
স্কিমে্যাকস

4
হয়তো সহ মূল্য (foo&)subshell
jiggunjer

169

ব্যবহারের &ফলে ব্যাকগ্রাউন্ডে প্রোগ্রামটি চালিত হয়, সুতরাং আপনি প্রোগ্রামটি শেষ না হওয়া অবধি ব্লক করার পরিবর্তে একটি নতুন শেল প্রম্পট পাবেন। nohupএবং disownমূলত সম্পর্কিত নয়; তারা SIGHUP (হ্যাঙ্গআপ) সংকেতগুলিকে দমন করে যাতে কন্ট্রোলিং টার্মিনালটি বন্ধ হয়ে গেলে প্রোগ্রামটি স্বয়ংক্রিয়ভাবে মারা যায় না। nohupকাজটি প্রথম শুরু হওয়ার পরে এটি করে। nohupএটি শুরু হওয়ার পরে আপনি যদি কোনও কাজ না করেন তবে আপনি disownএকটি চলমান কাজ সংশোধন করতে ব্যবহার করতে পারেন ; কোনও যুক্তি ছাড়াই এটি বর্তমান কাজটি পরিবর্তন করে, যা কেবলমাত্র পশ্চাদপটে ছিল


10
নোহপ এবং অস্বীকারের মধ্যে সামান্য পার্থক্য: অস্বীকৃত আদেশটি এটি আপনার কাজের তালিকা থেকে সরিয়ে ফেলবে; নোহুপ করবে না।
শন জে গফ

191
nohupএবং disownউভয়ই দমন করতে বলা যেতে পারে SIGHUP, তবে বিভিন্ন উপায়ে। nohupপ্রোগ্রামটিকে প্রাথমিকভাবে সিগন্যাল উপেক্ষা করে তোলে (প্রোগ্রামটি এটি পরিবর্তন করতে পারে)। nohupপ্রোগ্রামটি নিয়ন্ত্রণকারী টার্মিনাল না রাখার ব্যবস্থা করার চেষ্টাও করে, যাতে SIGHUPটার্মিনালটি বন্ধ হয়ে গেলে কার্নেল দ্বারা এটি প্রেরণ করা যায় না। disownখোলসের সাথে খাঁটিভাবে অভ্যন্তরীণ; এটি বন্ধ হয়ে গেলে শেলটি না পাঠানোর কারণ হয় SIGHUP
গিলস

27
@ গিলস, আপনার মন্তব্য নিজেই একটি উত্তর মূল্য।
লেসমানা

5
disownচাকরি তালিকা থেকে চাকরী সরিয়ে দেওয়ার বিষয়ে @ শনজেজেফের মন্তব্য সম্পর্কে কেবল একটি স্পষ্টতা । আপনি যদি কোনও বিকল্প নির্দিষ্ট না করে থাকেন তবে তা এটি কাজের তালিকা থেকে সরিয়ে ফেলবে। তবে , আপনি যদি -hবিকল্পটি নির্দিষ্ট করেন তবে প্রতিটি কাজের স্পেস টেবিল থেকে সরানো হবে না । পরিবর্তে, এটি এটি তৈরি করে যাতে SIGHUPশেলটি যদি একটি প্রাপ্ত হয় তবে সেই কাজের জন্য প্রেরণ করা হবে না SIGHUP
tacot মঙ্গলবার

4
কেবল স্পষ্ট করে &বলতে stdinগেলে , আপনাকে কোনও টার্মিনাল দেয় না, এটি প্রক্রিয়া থেকে বিচ্ছিন্ন হয় এবং এটি ব্যাকগ্রাউন্ডে চালিত করে, তবে উভয়ই stdoutএবং stderrএখনও বর্তমান টিটিটির সাথে সংযুক্ত। এর অর্থ হ'ল আপনি বিভিন্ন প্রোগ্রামের একসাথে মিশ্রিত পাঠ্য পেতে পারেন যা আপনি যদি খুব বেশি বিরক্তিকর হয়ে উঠতে পারেন gimp &এবং অন্য কোনও কিছুর জন্য এই টিটিটি ব্যবহার করার চেষ্টা করার সময় প্রচুর জিটিকে + ত্রুটি পান।
ফ্রাঙ্ক

8

নন-টার্মিনেটিং কমান্ড (উদাঃ tail) অনুসরণ করে আমার ব্যাকগ্রাউন্ডে কড়া চালানোর চেষ্টা করার অভিজ্ঞতাটি এখানে । এই উদাহরণের জন্য আমি ব্যবহার করব sleep 100

&

#!/bin/bash
/opt/libreoffice4.4/program/soffice -invisible -nofirststartwizard &
sleep 100

আমি কফির লগগুলি দেখতে পাচ্ছি / টিপে - কফির স্টপস বন্ধ করে দেয়CtrlC

নোহপ .. ও

#!/bin/bash
nohup /opt/libreoffice4.4/program/soffice -invisible -nofirststartwizard &
sleep 100

আমি কফির লগগুলি দেখতে পাচ্ছি না / টিপে - কফফিল স্টপসCtrlC

& প্রত্যাখ্যান

#!/bin/bash
/opt/libreoffice4.4/program/soffice -invisible -nofirststartwizard & disown
sleep 100

আমি কফির লগগুলি দেখতে পাচ্ছি / টিপে - কফির স্টপস বন্ধ করে দেয়CtrlC

সেট .. এবং

#!/bin/bash
setsid /opt/libreoffice4.4/program/soffice -invisible -nofirststartwizard &
sleep 100

আমি কফির লগগুলি / চাপ দিয়ে দেখি - কড়া না থামায় নাCtrlC

স্থান বাঁচাতে::
nohup setsid ..লগ / কফফত প্রদর্শন করে না - শেষের সাথে থামছে নাCtrlC : লগগুলি দেখায় না / কফির উপর থামছে -
nohup& disownCtrlC


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

1
@ ইউংফ্রোগ আমি এতে একমত হব!
মেরিনোস আন

আমার জন্য, nohup ⟨command⟩ & disownতৈরি প্রক্রিয়াটি বন্ধ হয় না Ctrl+C
k.stm

@ k.stm আপনি কি চেষ্টা করেছেন soffice? sofficeকমান্ডের মনে হয় কিছু আলাদা আছে। সুতরাং আমি এখানে একটি নিয়ম ব্যতিক্রম হিসাবে এটি যুক্ত বিবেচনা। যেমন ব্যবহার করার সময় nohup .. &:, Ctrl-cসাধারণত চাপলে কমান্ডটি থামানো হয় না, তবে sofficeএটি দিয়েই হয়। কেউ অপেক্ষা না করা পর্যন্ত আমি অপেক্ষা করে থাকি এবং কেন এই পদক্ষেপের সাথে ঘটে তা ব্যাখ্যা করে :)
মেরিনোস আন

@ মেরিনোস হ্যাঁ, আমি করেছি I আমি দৌড়ে গিয়ে nohup soffice &টিপলাম Ctrl+C। আশানুরূপ কিছুই হয়নি।
k.stm
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.