কিছু কমান্ড কেন শেষ না হওয়া অবধি টার্মিনালটিকে 'স্তব্ধ' করে?


22

কখনও কখনও আপনি টার্মিনাল থেকে একটি প্রোগ্রাম চালান, বলুন, lxpanel । টার্মিনাল আপনাকে প্রম্পটে ফিরিয়ে দেবে না, এটি স্তব্ধ হয়ে যাবে। প্রম্পটে ফিরে পেতে আপনি Ctrl+ টিপতে পারেন C, তবে এটি হ'ল lxpanel। যাইহোক, Alt+ টিপুন F2(যা একটি কমান্ড নিতে উইন্ডোটিকে পপ আপ করে) এবং চলমান lxpanelকরুণভাবে কাজ করে।

কেন? টার্মিনাল থেকে কমান্ড চালানো এবং 'চাপুন' উইন্ডো যেটি আপনি Alt+ টিপে প্রদর্শিত হবে তার মধ্যে কী আলাদা F2?

এখানে lxpanel শুধু একটি উদাহরণ হিসাবে ব্যবহৃত হয়। আমি একাধিক প্রোগ্রাম সহ এটি অভিজ্ঞতা আছে


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

উত্তর:


28

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

$ lxpanel &

বা যদি এটি ইতিমধ্যে চলমান থাকে তবে আপনি এটি Ctrl+ এর সাথে স্থগিত করতে পারেন Zএবং তারপরে bgপটভূমিতে স্থানান্তরিত করতে দৌড়াতে পারেন। যে কোনও উপায়ে আপনি একটি নতুন শেল প্রম্পট দিয়ে শেষ করবেন, তবে প্রোগ্রামটি এখনও চলছে এবং এর আউটপুটটি টার্মিনালে প্রদর্শিত হবে (যাতে আপনি টাইপিংয়ের মাঝামাঝি সময়ে হঠাৎ এটি প্রদর্শিত হতে পারে)

কিছু প্রোগ্রাম (সাধারণত ডেমোনস) শুরু হওয়ার সাথে সাথে একটি পৃথক প্রক্রিয়া তৈরি করে এবং তারপরে মূল প্রক্রিয়াটি অবিলম্বে প্রস্থান করতে দেয়। এটি আপনার শেলটি ব্লক না করেই প্রোগ্রামটি চলতে দেয়


সুতরাং আপনি যখন Alt + f2 চেপে 'রান' উইন্ডো দিয়ে প্রোগ্রামটি চালাবেন তখন সিস্টেমটি আসলে কী করছে? (কমপক্ষে জিনোম এবং ওপেনবক্সে, Alt + f2 এটি করে)। আমি জিজ্ঞাসা করছি কারণ আপনি কমান্ডটি টাইপ করার সাথে সাথে প্রোগ্রামটি শুরু হয়ে যায় এবং বাক্সটি চলে যায়। এটি কি এটিতে একটি & যুক্ত করছে?
স্কর্ম

2
@ লাইরা: ডিফল্টরূপে, শেলটি শেল সেশন চালিয়ে যাওয়ার আগে প্রোগ্রামটি শেষ হওয়ার জন্য অপেক্ষা করে, এটি "স্তব্ধ" নয়, "হ্যাং" এর কোনও সংজ্ঞা অনুসারে; Alt + f2 প্রোগ্রামটির জন্য অপেক্ষা করে না। প্রোগ্রামটি সম্পূর্ণ হওয়ার জন্য শেলটির অপেক্ষার কারণ হ'ল ব্যবহারকারী শেলটিতে যা টাইপ করেছেন তা প্রোগ্রামের স্ট্যান্ডার্ড ইনপুট এবং / অথবা প্রদর্শন প্রোগ্রামের স্ট্যান্ডার্ড আউটপুটে পুনর্নির্দেশ করতে পারে। যেহেতু Alt + f2 প্রাথমিকভাবে জিইউআই প্রোগ্রাম শুরু করার জন্য ব্যবহৃত হয়, তাই Alt + f2 স্ট্যান্ডার্ড ইনপুট / আউটপুট ব্যবহার করার সম্ভাবনা সরবরাহ করে না এবং তাই এটি অপেক্ষা করার দরকার নেই।
মিথ্যা রায়ান

1
@lyrae: alt + f2 ব্যাকগ্রাউন্ডে প্রোগ্রাম শুরু করার জন্য বিশেষ কিছু করে না; এটি শেল যা বিশেষ কিছু করছে, '&' যুক্ত করা শেলের কার্যকারিতা। একটি '&' ছাড়াই কমান্ড শুরু করার সময় , শেল প্রোগ্রামটির স্ট্যান্ডার্ড ইনপুটটিকে তার নিজস্ব স্ট্যান্ডার্ড ইনপুট এবং প্রোগ্রামের স্ট্যান্ডার্ড আউটপুটটিকে তার নিজস্ব স্ট্যান্ডার্ড আউটপুটে পুনর্নির্দেশ করে (কিছুটা স্বীকৃত, যেহেতু শেল এছাড়াও অন্যান্য অনেক পরিষেবা সরবরাহ করে যেমন সিটিআরএলকে থামানো) -সি, অগ্রভাগ প্রোগ্রামে একটি সংকেত সিগন্যাল কমান্ড প্রেরণ করতে)। '&' শেলটিকে সেগুলি না করতে এবং কেবল প্রোগ্রাম শুরু করতে (যা স্বীকৃত) তা বলে।
মিথ্যা রায়ান

1
@ লিরিয়ান যা বলছেন তার কিছু শেল আসলে কর্নেলের টার্মিনাল ড্রাইভার দ্বারা পরিচালিত হয় এবং শেল কল অপেক্ষা () ছাড়া অন্যটি "ছাড়া &" এর চেয়ে সাধারণত "&" বেশি "বিশেষ" হয় [বা [ ওয়েটপিড বা সমতুল্য] যা alt-f2 দ্বারা সম্পন্ন হয় না।
র্যান্ডম 832

6

আপনি যখন কোনও টার্মিনালে একটি প্রোগ্রাম শুরু করবেন, আপনার প্রোগ্রামটি বন্ধ না হওয়া অবধি টার্মিনালটি "স্তব্ধ" থাকবে। Ctrl+ টিপে cআপনি আপনার প্রোগ্রামটি বন্ধ করে দিচ্ছেন এবং এইভাবে প্রম্পটে ফিরে আসুন। আপনি এটি সমস্ত জিইউআই অ্যাপ্লিকেশন সহ দেখতে পাবেন, উদাহরণস্বরূপ ফায়ারফক্স চেষ্টা করুন।

আপনি যখন অন্য কোনও পদ্ধতি ব্যবহার করেন যেমন Alt + F2 বা মেনুগুলির মাধ্যমে ক্লিক করার পরে, আপনার প্রোগ্রামটি পটভূমিতে শুরু হয় যাতে কোনও অদ্ভুত কিছুই ঘটে না (এবং যাইহোক কোনও কমান্ড প্রম্পট নেই)।

আপনি যদি এখনও টার্মিনাল থেকে জিইউআই অ্যাপ্লিকেশন চালু করতে চান তবে &আপনার কমান্ডের শেষে যুক্ত করুন like

lxpanel &

এটি টার্মিনালটিকে lxpanelপটভূমিতে চালনা করতে এবং অবিলম্বে আপনাকে আরও একটি প্রম্পট দেওয়ার জন্য বলে ।


3

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


2

& ব্যাকগ্রাউন্ডগুলি পরে যে কনসোল ইন্টারঅ্যাকশন প্রয়োজন পরে ফিরে আসে (উদাহরণস্বরূপ, একটি "অ্যাপ্লিকেশন আপডেট &" যা শেষ পর্যন্ত স্টপ রাজ্যে প্রবেশ করে কারণ এটি ব্যবহারকারীকে "সত্যই বলপূর্বক?" প্রশ্ন জিজ্ঞাসা করতে চায়) .... যখন আর কেউ দেখছে না)।

এই গর্তটি প্লাগ করতে এবং প্রক্রিয়াটি অবহিত করার জন্য কোনও টার্মিনাল সত্যই এটি কখনই উপলভ্য হবে না, আমি আমার কয়েকটি কমান্ডের সাথে একটি <& - যুক্ত করি, সক্রিয় টার্মিনাল থেকে সম্পূর্ণরূপে বিচ্ছিন্ন করে বলছি যে এসটিডিআইএন আর সম্ভব নয়। আপনি যদি এটি ব্যবহার করেন তবে / বিন / বাশ আপনার শেল এটি নিশ্চিত করুন। স্ক্রিপ্টটি কোনও সিউডোটার্মিনাল সম্পর্কিত কোনও ত্রুটি লগ করতে চলেছে যার উপর কোনও প্রম্পট কাস্ট করা যায়।

উদাহরণ স্বরূপ:

`./runme.sh &> runme.log <&- & disown`

বর্তমান টার্মিনাল সেশন থেকে বিচ্ছিন্ন করার আমার চূড়ান্ত উপায় way STDOUT এবং STDERR উভয়ই runme.log- এ লগইন করে, আপনার কনসোল বা শেল শিগগিরই শেষ হয়ে যায় বা আপনি কোনও আলাদা অ্যাকাউন্টে লগআউট / সুম করে (রানমে কোনও টার্মিনাল আবর্জনা নেই) তাতে কিছু যায় আসে না, এমনকি পিতামাতাকে সন্তুষ্ট করার জন্য ধন্যবাদ পিআইডি সম্পর্ক সরানো হয়েছে।

আপডেট: এমনকি এর সাথেও আমি পূর্ব পিতামাতার নামের সাথে সামুদ্রিক অংশটি যুক্ত করতে সমস্যায় পড়েছি, সুতরাং এখন পরিবর্তে আমি সুপারিশ করছি:

at now <<< "(cmd1; cmd2; etc.) &> logfile.log"

অবশ্যই, আপনি সিআরএন থেকে আউটপুট ইমেল করতে চাইলে &> সরিয়ে ফেলুন, বা ফাইলের পরিবর্তে এটিকে সমস্ত কিছু / dev / null এ পুনঃনির্দেশ করুন।


আমি যে ব্যবহারটি শুরু করেছিলাম তা অর্জনের জন্য একটু কম বিভ্রান্তিকর উপায় হ'লat now <<< "(cmd1; cmd2; etc.) &> logfile.log"
মার্কোস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.