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


242

উভয় nohup myprocess.out &বা myprocess.out &myprocess.out সেট করে পটভূমিতে চালানোর জন্য। আমি টার্মিনালটি বন্ধ করার পরে, প্রক্রিয়াটি এখনও চলছে। তাদের মধ্যে পার্থক্য কী?


আপনি কোন শেল ব্যবহার করছেন? আচরণ শাঁস জুড়ে পরিবর্তিত হয়
shx2

1
ব্যাশ। এবং কেন জানি এখন @ নেমোর উত্তর অনুসারে।
ইয়ার্কি

@ ইয়ার্কি যদি উত্তরটি আপনার সমস্যার জন্য উপযুক্ত হয় তবে দয়া করে প্রশ্নটিকে স্বীকৃত হিসাবে চিহ্নিত করুন (উত্তরের ভোটের নীচে চেকবক্স) যাতে এটি উত্তরহীন হিসাবে ঘোরাফেরা করে না। আপনার সমস্ত প্রশ্নের জন্য আপনার এটি করা উচিত :)
নিমো

1
shutdownএকটি নির্দিষ্ট লিনাক্স অর্থ সঙ্গে একটি শব্দ হিসাবে এড়ানো উচিত। এবং দ্বারা প্রতিস্থাপন করা exit
প্যাট্রিজিও বার্তোনি

উত্তর:


316

nohupঅ্যাম্পারস্যান্ড না হ্যাঙ্গআপ সিগন্যালটি দেখুন (দেখুন man 7 signal) (শেলটি সেভাবে কনফিউজড করা বা কিছুতেই প্রেরণ SIGHUPকরা ব্যতীত)।

সাধারণত &শেলটি ব্যবহার করে কমান্ড চালাওয়ার পরে শেলটি প্রস্থান করার পরে, শেলটি হ্যাঙ্গআপ সিগন্যাল ( kill -SIGHUP <pid>) দ্বারা সাব-কমান্ডটি সমাপ্ত করে দেয় । এটি ব্যবহারকে আটকানো যেতে পারে nohup, কারণ এটি সিগন্যালটি ধরে এবং এটিকে উপেক্ষা করে যাতে এটি কখনই আসল প্রয়োগে পৌঁছায় না।

আপনি বাশ ব্যবহার করছেন এমন ক্ষেত্রে, shopt | grep huponআপনার শেলটি তার শিশু প্রক্রিয়াগুলিতে SIGHUP প্রেরণ করে কিনা তা অনুসন্ধান করতে আপনি কমান্ডটি ব্যবহার করতে পারেন । যদি এটি বন্ধ থাকে তবে প্রক্রিয়াগুলি শেষ করা হবে না, কারণ এটি আপনার ক্ষেত্রে মনে হচ্ছে। ব্যাশ কীভাবে অ্যাপ্লিকেশন বন্ধ করে দেয় সে সম্পর্কে আরও তথ্য এখানে পাওয়া যাবে

এমন কিছু মামলা রয়েছে যেখানে nohupকাজ হয় না, উদাহরণস্বরূপ, আপনি যখন প্রক্রিয়া শুরু করেন তখন SIGHUPসংকেতটি পুনরায় সংযুক্ত করে , যেমন এটি এখানে রয়েছে


এটি লক্ষ্য করার মতো বিষয় যে কেবলমাত্র &সাবকম্যান্ডের কিছু সংকেত (উদাহরণস্বরূপ সাইন ইন) না পাওয়ার কারণ ঘটায়। nohupমূলত SIGHUPপ্রচারিত হয় না এমন সংকেতগুলির তালিকায় যুক্ত হয়।
স্টুডিজ

46

myprocess.out &একটি সাব-শেল ব্যবহার করে পটভূমিতে প্রক্রিয়াটি চালাবে। যদি বর্তমান শেলটি সমাপ্ত হয় (লগআউট দ্বারা বলুন), সমস্ত সাব-হেলগুলিও সমাপ্ত করা হয় যাতে পটভূমি প্রক্রিয়াটিও বন্ধ হয়ে যায়। Nohup কমান্ড উপেক্ষা করে HUPসংকেত এবং এইভাবে এমনকি যদি বর্তমান শেল সমাপন হয়, তখন subshell এবং myprocess.outব্যাকগ্রাউন্ডে রান অব্যাহত রাখবে। আর একটি পার্থক্য হ'ল &একা stdout / stderr কে পুনঃনির্দেশ দেয় না তাই যদি কোনও আউটপুট বা ত্রুটি থাকে তবে সেগুলি টার্মিনালে প্রদর্শিত হয়। অন্যদিকে নোহুপ স্টাডাউট / স্টার্ডারকে nohup.outবা পুনঃনির্দেশ করুন $HOME/nohup.out


6
আমি দৌড়ে myprocess.out &গিয়ে শেল থেকে বেরিয়ে আসি । যাইহোক, আমি যখন ps aux | grep myprocess.outঅন্য শেল ব্যবহার করি তখনও আমি "মাইপ্রোসেসিআউট" খুঁজে পেতে পারি। এর অর্থ প্রক্রিয়াটি এখনও চলছে, শেষ করা হবে না।
ইয়ার্কি

1
@amit_g kill -9সেখানে প্যারেন্ট শেলটি মারার সময় একটি সাইনআপ হবে না কারণ এর জন্য সিগ্কিল হ্যান্ডেল করতে প্যারেন্ট শেল লাগবে যা এটি পারে না।
নিমো

2
চেক শপ | অন্যান্য উত্তরে বর্ণিত গ্রেপ হুপন।
amit_g

31

বেশিরভাগ সময় আমরা ssh ব্যবহার করে রিমোট সার্ভারে লগইন করি। আপনি যদি একটি শেল স্ক্রিপ্ট শুরু করেন এবং আপনি লগআউট করেন তবে প্রক্রিয়াটি মারা যায়। নোহপ আপনি শেল থেকে লগ আউট করার পরেও পটভূমিতে স্ক্রিপ্টটি চালিয়ে যেতে সহায়তা করে।

Nohup command name &
eg: nohup sh script.sh &

নোহুপ এইচইউপি সংকেত ধরেছে ches নোহুপ ব্যাকগ্রাউন্ডে স্বয়ংক্রিয়ভাবে কাজটি রাখবে না। আমাদের তা স্পষ্টভাবে ব্যবহার করে বলতে হবে এবং


ধন্যবাদ। আপনার উত্তরের প্রত্যাশা ছিল না তবে এটি এখানে রয়েছে তা দুর্দান্ত। এটি যে প্রশ্নটি আমি জিজ্ঞাসা করি না তার উত্তর দেয়: ডি
বৈভব কাউশাল

26

অ্যাম্পারস্যান্ড (&) ব্যবহার করে একটি শিশু প্রক্রিয়াতে কমান্ডটি চালানো হবে (বর্তমান বাশ সেশন থেকে শিশু)। তবে, আপনি যখন সেশনটি থেকে বেরিয়ে যাবেন তখন সমস্ত শিশু প্রক্রিয়া মারা যাবে।

nohup + অ্যাম্পারস্যান্ড (&) ব্যবহার করে একই কাজ করা হবে, ব্যতীত যখন অধিবেশনটি শেষ হয়, তখন শিশু প্রক্রিয়াটির পিতামাতাকে "1" হিসাবে পরিবর্তন করা হবে যা "আর্ট" প্রক্রিয়া হয়, সুতরাং এইভাবে শিশুটিকে হত্যা থেকে রক্ষা করা হয়।


7

আমি ভুল হলে শুধরে

  nohup myprocess.out &

নোহুপ হ্যাঙ্গআপ সিগন্যালটি ধরে, যার অর্থ টার্মিনাল বন্ধ হয়ে গেলে এটি কোনও প্রক্রিয়া প্রেরণ করবে।

 myprocess.out &

প্রক্রিয়া চলতে পারে তবে টার্মিনালটি বন্ধ হয়ে গেলে তা বন্ধ হয়ে যায়।

nohup myprocess.out

প্রক্রিয়া এমনকি টার্মিনাল বন্ধ চালাতে সক্ষম, তবে আপনি টার্মিনালে ctrl+ টিপে প্রক্রিয়াটি থামাতে সক্ষম zCrt+ বিদ্যমান zথাকলে কাজ করছে না &


2

নোহপ কমান্ডটি একটি সিগন্যাল মাস্কিং ইউটিলিটি এবং হ্যাঙ্গআপ সংকেতটি ধরে ches যেখানে অ্যাম্পারস্যান্ড হ্যাং আপ সংকেতগুলি ধরেনি। শেলটি ব্যবহার করে এবং শেলটি প্রস্থান করার সময় হ্যান্ড আপ সিগন্যাল সহ সাব কমান্ডটি সমাপ্ত হবে। এটি সংকেত ধরার সাথে সাথে নোহপ ব্যবহার করে এটি প্রতিরোধ করা যেতে পারে। Nohup কমান্ড হ্যাঙ্গ আপ সিগন্যাল গ্রহণ করে যা কার্নেল দ্বারা কোনও প্রক্রিয়াতে প্রেরণ করা যেতে পারে এবং সেগুলি ব্লক করে। কোনও ব্যবহারকারী দীর্ঘায়িত অ্যাপ্লিকেশন লগ আউট বা প্রক্রিয়াটি শুরু হওয়া উইন্ডোটি বন্ধ করতে চাইলে নোহপ কমান্ড সহায়ক। এগুলির যে কোনও ক্রিয়াকলাপটি সাধারণত কার্নেলটিকে অ্যাপ্লিকেশনটিতে স্তব্ধ হয়ে যাওয়ার অনুরোধ জানায়, তবে কোনও নোহাপ মোড়ক প্রক্রিয়াটি চালিয়ে যাওয়ার অনুমতি দেবে। অ্যাম্পারস্যান্ড ব্যবহার করে একটি শিশু প্রক্রিয়া এবং বর্তমান বাশ সেশনের এই শিশুটি কমান্ডটি চালাবে। আপনি যখন অধিবেশন থেকে প্রস্থান করবেন, এই প্রক্রিয়াটির সমস্ত শিশু প্রক্রিয়া মেরে ফেলা হবে। অ্যাম্পারস্যান্ড সক্রিয় শেলের জন্য কাজের নিয়ন্ত্রণের সাথে সম্পর্কিত। এটি ব্যাকগ্রাউন্ডে একটি সেশনে একটি প্রক্রিয়া চালানোর জন্য দরকারী।


0

অনেকগুলি ক্ষেত্রে রয়েছে যখন পরিবেশের মধ্যে ছোট পার্থক্য আপনাকে দংশিত করতে পারে। এটি একটি যেখানে আমি সম্প্রতি দৌড়েছি। এই দুটি কমান্ডের মধ্যে পার্থক্য কি?

1 ~ $ nohup myprocess.out &
2 ~ $ myprocess.out &

উত্তরটি যথারীতি একই - এটি নির্ভর করে।

অ্যাম্পারস্যান্ড না থাকায় নোহুপ হ্যাঙ্গআপ সিগন্যালটি ধরে।

হ্যাঙ্গআপ সিগন্যাল কী?

সাইনআপ - নিয়ন্ত্রণের প্রক্রিয়াটির টার্মিনাল বা মৃত্যুতে হ্যাঙ্গআপ সনাক্ত হয়েছে (মান: 1)।

সাধারণত, শেলটি ব্যবহার করে & এরপরে প্রস্থান করার সময় কোনও কমান্ড চালানোর সময়, শেলটি হ্যাঙ্গআপ সিগন্যাল (যেমন-কিল -SIGHUP $ PID) সহ সাব-কমান্ডটি সমাপ্ত করে দেয়। এটি নোহুপ ব্যবহার করা আটকাতে পারে, কারণ এটি সিগন্যালটি ধরে এবং এটিকে উপেক্ষা করে যাতে এটি কখনই আসল প্রয়োগে পৌঁছায় না।

ভাল, তবে এই ক্ষেত্রে এখানে সর্বদা 'বুট' থাকে। শেলটি এমনভাবে কনফিগার করা হয় যেখানে এটি সাইনআপ কখনই প্রেরণ করে না।

আপনি যদি ব্যাশ ব্যবহার করছেন তবে আপনার শেলটি তার শিশু প্রক্রিয়াগুলিতে SIGHUP প্রেরণ করে কিনা তা জানতে আপনি নীচের বর্ণিত আদেশটি ব্যবহার করতে পারেন:

~ $ shopt | grep hupon

এবং তদ্ব্যতীত - এমন কেস রয়েছে যেখানে নোহুপ কাজ করে না। উদাহরণস্বরূপ, আপনি যখন প্রক্রিয়া শুরু করেন তখন NOHUP সিগন্যালটিকে পুনরায় সংযুক্ত করে (এটি অভ্যন্তরীণভাবে করা হয়, অ্যাপ্লিকেশন কোডের স্তরে)।

বর্ণিত ক্ষেত্রে, পার্থক্যের অভাব যখন আমাকে কাস্টম সার্ভিস চালু করার স্ক্রিপ্টের অভ্যন্তরে দ্বিতীয় স্ক্রিপ্টে কল আসে যা কোনও নোহাপ কমান্ড ছাড়াই সঠিক অ্যাপ্লিকেশন সেট আপ করে এবং প্রবর্তন করে bit

একটি লিনাক্স পরিবেশে সবকিছু সুষ্ঠুভাবে কাজ করে, দ্বিতীয়টিতে অ্যাপ্লিকেশনটি দ্বিতীয় স্ক্রিপ্টটি বের হওয়ার সাথে সাথেই বন্ধ হয়ে যায় (সেই ক্ষেত্রে সনাক্তকরণ অবশ্যই আমাকে আরও অনেক বেশি সময় নিয়েছিল তবে আপনি ভাবতে পারেন: আটকা_ আউট_ টংগ :)।

দ্বিতীয় স্ক্রিপ্টে একটি প্রবর্তন পদ্ধতি হিসাবে নোহুপ যুক্ত করার পরে, স্ক্রিপ্টগুলি প্রস্থান করা হবে এমনকি যদি অ্যাপ্লিকেশন চলতে থাকে এবং এই আচরণটি উভয় পরিবেশের সাথে সামঞ্জস্য হয়ে যায়।

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