একটি লিনাক্স কমান্ডের শেষে "&" এর অর্থ কী?


99

আমি একজন সিস্টেম অ্যাডমিনিস্ট্রেটর এবং সিস্টেম পরিষ্কার করার জন্য আমাকে একটি লিনাক্স স্ক্রিপ্ট চালানোর জন্য বলা হয়েছে।

আদেশটি হ'ল:

perl script.pl > output.log &

সুতরাং এই আদেশটি একটি &চিহ্ন দিয়ে শেষ হচ্ছে, এর কোনও বিশেষ তাত্পর্য আছে কি?

আমার শেলের প্রাথমিক জ্ঞান আছে তবে আমি এর আগে কখনও দেখিনি।


দুঃখিত আমার খারাপ, আমি এই জাতীয় প্রাথমিক জিনিসগুলি সম্পর্কে জানতাম
ডড

4
আপনি এই পৃষ্ঠার মধ্যে পার্থক্য খুঁজছেন করছেন, তাহলে &এবং &&: &পটভূমিতে প্রথম কমান্ড executes; &&প্রথম কমান্ড কার্যকর করে এবং শর্তসাপেক্ষে দ্বিতীয়টিতে এগিয়ে যায় যদি এটি সাফল্যের সাথে প্রস্থান করে।
ডেভিড বোডো 8'19

উত্তর:


151

&কমান্ড ব্যাকগ্রাউন্ডে রান তোলে।

থেকে man bash:

যদি কন্ট্রোল অপারেটর & এর দ্বারা কোনও কমান্ড সমাপ্ত হয় , শেলটি একটি সাব-শেলের পটভূমিতে কমান্ডটি কার্যকর করে। শেলটি কমান্ডটি শেষ হওয়ার জন্য অপেক্ষা করে না, এবং ফেরতের স্থিতি 0 হয়।


13

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


***** আমি কেবল বুঝতে পেরেছি যে "&" এর মধ্য দিয়ে চলমান এই প্রক্রিয়াগুলি ssh অধিবেশন বন্ধ হওয়ার পরে "জীবিত" থাকবে! সার্ভারের সাথে আপনার সংযোগ বিঘ্নিত হয়ে থাকলে খুব ঝরঝরে এবং দরকারী **


nohupপ্রক্রিয়াগুলিও জীবিত রাখবে।
জেরি চিন

4
& এর সাথে আমরা পিআইডি পেতে পারি তাই আমরা চাইলে প্রক্রিয়াটি শেষ করতে পারি এবং আমরা সেই প্রক্রিয়াটির
স্থিতিও

13

যখন না বলা হয় অন্যথায় কমান্ডগুলি অগ্রভাগটি গ্রহণ করে। আপনার একমাত্র শেল সেশনে একটি "অগ্রভাগ" প্রক্রিয়া চলছে in & চিহ্নটি একটি পটভূমি প্রক্রিয়া চালানোর জন্য আদেশগুলি নির্দেশ দেয় এবং তত্ক্ষণাত অতিরিক্ত কমান্ডের জন্য কমান্ড লাইনে ফিরে আসে।

sh my_script.sh &

শেল সেশনটি বন্ধ হওয়ার পরে একটি পটভূমি প্রক্রিয়া বেঁচে থাকবে নাSIGHUP সমস্ত চলমান প্রক্রিয়া বন্ধ করে দেয়। ডিফল্টভাবে যাইহোক। যদি আপনার কমান্ড দীর্ঘ-চলমান হয় বা অনির্দিষ্টকালের জন্য চলতে থাকে (অর্থাত্: মাইক্রোসার্চিস) আপনার এটির নোহুপ দিয়ে প্র-পেন্ডিং করা দরকার যাতে আপনি সেশন থেকে সংযোগ বিচ্ছিন্ন হওয়ার পরে এটি চলমান থাকে:

nohup sh my_script.sh &

সম্পাদনা: যখন ও ব্যবহৃত হয় তখন ব্যাকগ্রাউন্ড প্রক্রিয়া বন্ধ হওয়ার বিষয়ে ধূসর অঞ্চল বলে মনে হয়। শুধু সচেতন শেল যে হতে পারে : আপনার অপারেটিং সিস্টেম এবং স্থানীয় কনফিগারেশনের (বিশেষত CentOS / rhel দিকে) উপর নির্ভর করে আপনার প্রক্রিয়া বন্ধ https://serverfault.com/a/117157


3

আমি নিশ্চিতভাবে জানি না তবে আমি এখনই একটি বই পড়ছি এবং আমি যা পাচ্ছি তা হ'ল কোনও প্রোগ্রামটির সিগন্যাল হ্যান্ডেল করা দরকার (যখন আমি টিপছি তখন CTRL-C)। এখন কোনও প্রোগ্রাম SIG_IGNসমস্ত সিগন্যাল উপেক্ষা করতে বা SIG_DFLডিফল্ট ক্রিয়াটি পুনরুদ্ধার করতে ব্যবহার করতে পারে ।

এখন আপনি যদি তা করেন $ command &তবে ব্যাকগ্রাউন্ড প্রক্রিয়া হিসাবে চলমান এই প্রক্রিয়াটি ঘটে যাওয়া সমস্ত সংকেতকে কেবল উপেক্ষা করে। অগ্রভূমি প্রক্রিয়াগুলির জন্য এই সংকেতগুলি এড়ানো হবে না।

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