আমাকে অপেক্ষা না করে একটি কমান্ড চালান


145

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

আমি অপেক্ষা করতে চাই না এমন সিআইএলিকে বলার সর্বাধিক সাধারণ (বা ব্যবহারকারী-বান্ধব উপায়) কী, দয়া করে আমাকে তাড়াতাড়ি আমার প্রম্পটটি ফিরিয়ে দিন। এবং যদি এটি আমাকে একটি অগ্রগতি বার বা কেবল ব্যস্ত-স্পিনার দিতে পারে তবে তা দুর্দান্ত হবে!


3
আরও দেখুন কীভাবে আপনি সরাসরি পটভূমিতে কমান্ড লাইন অ্যাপ্লিকেশন প্রেরণ করবেন? আপনি যদি ইতিমধ্যে কমান্ডটি শুরু করে থাকেন এবং ব্যাকগ্রাউন্ডে প্রেরণ করতে চান।
গিলস

উত্তর:


153

কমান্ডটি চালানোর আগে, আপনি &পটভূমিতে চালানোর জন্য কমান্ড লাইনে যুক্ত করতে পারেন :

long-running-command &

কমান্ড শুরু করার পরে, আপনি CtrlZএটিকে স্থগিত bgকরার জন্য এবং তারপরে পশ্চাদপটে রেখে দিতে টিপতে পারেন :

long-running-command
[Ctrl+Z]
bg

আমি "Find ~ / a.java &" কমান্ডটি ব্যবহার করেছি তবে আমি ব্যাকগ্রাউন্ডে যাইনি? এছাড়াও, আমি সেন্টিমিডি + জেড (ম্যাকের জন্য) চেষ্টা করেছি .... এটি কাজ করছে না
অভিমন্যু আর্য

1
@ অভিমন্যু আর্যান, সম্ভবত আপনি find ...প্রথমে আপনার আদেশটি ডিবাগ করতে চান , তারপরে পটভূমিতে এটি চালান run এই ক্ষেত্রে আপনি -nameবিকল্পটি হারিয়েছেন ।
অ্যালেক্সিস উইল্ক

113

প্রবন্ধটি প্রক্রিয়াটিকে ব্যাকগ্রাউন্ডে প্রেরণ করা ছাড়াও আপনার টার্মিনালটি নষ্ট করার জন্য আপনাকে পাঠ্য আউটপুটটি নিয়ে উদ্বিগ্ন হওয়ার দরকার নেই বলে এটি সবার প্রিয়:

nohup command &

এটি কেবল ব্যাকগ্রাউন্ডে প্রক্রিয়া চালায় না, একটি লগ তৈরি করে ( nohup.outবর্তমান ডিরেক্টরিতে বলা হয়, যদি এটি সম্ভব না হয় তবে আপনার হোম ডিরেক্টরি) এবং আপনি যদি বর্তমান শেলটি বন্ধ / লগআউট করেন তবে শিশু প্রসেসটি পুনরুদ্ধার থেকে বাঁচিয়ে প্রক্রিয়াটি মারা যায় না মারা গেলে পিতামাত্ত সংকেতগুলি (যেমন, পিতামাতার কাছে সাইনআপ দ্বারা লগ আউট করা বা বর্তমান শেলটি বন্ধ করে দেওয়া)।

অন্য বলা আছে disownকিন্তু এটি অন্য উত্তরের পরিবর্তে বরং এটি নিজের মধ্যে একটি পদ্ধতি:

command & # our program is in background
disown # now it detached itself of the shell, you can do whatever you want

আপনি যদি কোনও হ্যাকিশ উপায় না করে ব্যবহার করেন তবে এই আদেশগুলি আপনাকে প্রক্রিয়া আউটপুটগুলি সহজে পুনরুদ্ধার করতে দেয় না


4
সিসাদমিন'৯৯ সাল থেকে। আজ অবধি অস্বীকার করার কথা শুনিনি, ধন্যবাদ! এটি প্রতিটি শেলের সাথে কাজ করে না যদিও (চেক করা বাশ, জেডএস, টিসিএইচ। Tcsh কাজ করে না)।
ইউনিক্স

nohupএকটি কাজের নিয়ন্ত্রণ শেল ব্যবহার করা নিরীহ। আধুনিক শেলগুলি HUPব্যাকগ্রাউন্ড প্রক্রিয়াগুলিতে প্রেরণ করে না । কোনও অনন্য ফাইল নামকে পুনর্নির্দেশ করা অর্থ প্রদানের জন্য একটি ছোট দাম।
ছানা

@ এখানে ব্যবহারের কেসটি হ'ল স্টার্ডার এবং স্টাডাউটকে টার্মিনালটিকে দূষিত করার জন্য এটি প্লাসের সাহায্যে স্বয়ংক্রিয়ভাবে লগ ফাইল তৈরি করে।
ব্রায়াম

1
command > file.log 2>&1 & disownএর চেয়ে খানিকটা লম্বা nohup command &তবে আমার ধারণা এটি @ ছিকস যা পরামর্শ দিচ্ছিল।
জোয়েটউইল

31

এটি সম্ভবত আপনি চান

my_command > output.log 2>&1 &

এটি আপনার কমান্ড শুরু করবে, output.logআপনি নির্দিষ্ট করতে পারেন এমন কিছুতে স্টডআউট এবং স্টাডার উভয়ই পুনর্নির্দেশ করে । আপনি যদি আউটপুটটি মোটেও সংরক্ষণ করার চিন্তা না করেন - আপনি /dev/nullএকটি আসল ফাইলের পরিবর্তে ব্যবহার করতে পারেন ।

&পটভূমিতে কমান্ড কার্যকর করবে যাতে আপনি চলমান অবস্থায় ইনপুট কমান্ডগুলি চালিয়ে যেতে পারেন। 2>&1স্টডারকে স্টডআউটে পুনঃনির্দেশ দেয় যাতে সমস্ত আউটপুট ধরা যায়।

এছাড়াও, আপনি যখন এইরকম একটি কমান্ড চালনা করেন, তখন কার্নেলের কাছ থেকে অনুরূপ একটি কনফার্মেশন পাওয়া উচিত: [2] 1234 এর অর্থ হ'ল আপনার প্রক্রিয়াটি পটভূমিতে চলছে এবং এর আইডিটি রয়েছে 1234, তাই আপনি যদি চান তবে পরে এটি হত্যা করতে পারবেনkill -9 1234


2
আপনাকে ধন্যবাদ, 2>&1খুব গুরুত্বপূর্ণ কোজ কমান্ডটি ব্যর্থ হতে পারে এবং কিছু ক্ষেত্রে এটির ত্রুটি আউটপুট চেষ্টা করে!
এরিকন

1
উপরের উত্তরগুলি ধন্যবাদ না জানালে এটি একটি কাজ করেছিল।
ডোমোগোজ

9

দেখব পর্দা বা tmux । এর সাথে একটি উদাহরণ tmux:

$ tmux new -d 'longrunningcommand'

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

আপনি দীর্ঘ কমান্ড চালাচ্ছেন এবং লগ আউট করেছেন বা সংযোগ বিচ্ছিন্ন হয়ে গেলে ব্যাকগ্রাউন্ডিংও ব্যর্থ হবে। সিস্টেমটি আপনার কাজকে হত্যা করবে।

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

পর্দা পুরানো চেষ্টা এবং সত্য প্রোগ্রাম; tmux অনেক কম বয়সী তবে পর্দার অতীত থেকে শিখেছে।


এই উত্তরটি একটি আসল উত্তর মিস করে এবং আরটিএফএম এর মতো শোনাচ্ছে।
লোয়েকি

5

(সম্পূর্ণতার জন্য - ইতিমধ্যে উত্তর দেওয়া হয়েছে :) আপনি কমান্ডের &পরে যুক্ত করে পটভূমিতে একটি কমান্ড রেখেছেন :

long_command with arguments > redirection &

আমি আপনার প্রশ্নের অন্য অংশটি সম্বোধন করতে এই উত্তরটি যুক্ত করছি:

অগ্রগামী ব্যাকগ্রাউন্ড কমান্ডগুলি প্রদর্শনের জন্য স্পিনারের কোনও সমতুল্য নেই, তবে আপনি টাইপ করে jobsবা ব্যাকগ্রাউন্ড কমান্ডের স্থিতি দেখতে পারেন jobs -l। এটি আপনাকে আপনার ব্যাকগ্রাউন্ড কমান্ডগুলি প্রদর্শন করবে এবং সেগুলি চলছে কিনা তা সিগন্যালের মাধ্যমে বন্ধ করা হয়েছে (যেমন, সহ ^Z), বা মাঝে মাঝে থেমে গেছে কারণ তারা আপনার কাছ থেকে ইন্টারেক্টিভ ইনপুটটির জন্য অপেক্ষা করছে।


long_command with arguments &> redirection &stderrখুব পুনর্নির্দেশ করতে
বরফ-ব্লেজ

3

আপনি ব্যাকগ্রাউন্ডে একটি প্রোগ্রাম চালাতে পারেন &yum install XyZউদাহরণস্বরূপ, আপনি উদাহরণস্বরূপ চালাতে চাইলে আপনি চালাতে পারেন:

yum install XyZ &

stdoutপ্রোগ্রাম থেকে অথবা আউটপুট ব্যবহার পুনঃনির্দেশিত করা যেতে পারে >একটি ফাইল ওভাররাইট, অথবা >>একটি ফাইল সংযোজন করতে হবে। উদাহরণস্বরূপ, আপনি যদি yumকোনও ফাইলে লগইন করতে চান yum.log:

yum install XyZ > yum.log &

অথবা, আপনি যদি কোনও বিদ্যমান ফাইলে আউটপুট যুক্ত করতে চান log:

yum install XyZ >> log &

ত্রুটিগুলি মুদ্রিত হয় stderrএবং না stdout, এবং একইভাবে কোনও ফাইলে পুনঃনির্দেশ করা যেতে পারে তবে ব্যবহার করে 2>:

yum install XyZ 2> errors
yum install XyZ 2>> errors

আপনি যদি উভয়ই পুনর্নির্দেশ করতে চান stderrএবং stdout, আপনি ব্যবহার করতে পারেন &>:

yum install XyZ &> output
yum install XyZ &>> output

2

আপনি ব্যাকগ্রাউন্ডে &সাইন ইন করে কেবল কমান্ড চালাতে পারেন ।

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

areallylong_command &

এটি পটভূমিতে চালানো হবে।

আপনি স্টাডাউট / স্ট্ডারকে যথাযথ ফাইলগুলিতে পুনর্নির্দেশ করতে পারেন যাতে আপনি কিছু করার সময় সেগুলি আপনার টার্মিনালে উপস্থিত না হয়।

আরও তথ্যের জন্য এটি দেখুন: http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-3.html


0

আপনার দীর্ঘকালীন চলমান কার্য শুরু করার আগে 'স্ক্রিন' কমান্ডটি ব্যবহার করার চেষ্টা করুন তারপরে যখন আপনি বিচ্ছিন্ন হন তখনই যখনই আপনাকে আবার প্রয়োজন হয় তখন 'স্ক্রিন-আর-ডি' দিয়ে আবার যোগাযোগ করতে পারেন। আমি দেখতে পেয়েছি যে ssh বা অন্যান্য নেটওয়ার্ক সংযোগের মাধ্যমে টার্মিনাল ব্যবহার করার সময় তারা কখনও কখনও সার্ভারের সাথে খারাপ সংযোগের মাধ্যমে ভেঙে যেতে পারে। একটি 'স্ক্রিনের' ভিতরে এটি চালানো এই সমস্যাটিকে ঠিক করে দেয়।

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