কীভাবে স্থগিত করা এবং পটভূমিতে একটি পটভূমি প্রক্রিয়া আনতে হয়


166

আমার অগ্রভাগে মূলত একটি প্রক্রিয়া চলছে। আমি Ctrl+ দ্বারা স্থগিত করেছি Z, এবং এরপরে পটভূমিতে এটি চালানো আবার শুরু করব bg <jobid>

আমি ভাবছি কিভাবে পটভূমিতে চলমান একটি প্রক্রিয়া স্থগিত করবেন?

আমি কীভাবে পটভূমিতে একটি পটভূমি প্রক্রিয়া আনতে পারি?

সম্পাদনা:

প্রক্রিয়াটি স্ট্ডারকে আউটপুট দেয়, সুতরাং fg <jobid>প্রসেসটি টার্মিনালে আউটপুট করার সময় আমি কীভাবে কমান্ডটি জারি করব ?


1
আপনি এখনও কোনও টার্মিনালে কমান্ড টাইপ করতে পারেন যা তত্ক্ষণাত ত্রুটিযুক্ত। এসটিডিআরআরে লেখা পাঠ্যটি ইনপুট হিসাবে গণনা করে না, কেবল যে কীগুলি আপনি প্রেরণ করেন তা। এটি পর্দায় বিভ্রান্ত দেখাচ্ছে তবে এটি কাজ করে।
কালেব

@ কালেব: যখন প্রক্রিয়াটি স্টডআউটে চলে যায়, তখনও আমি fg <jobid>এটিকে অগ্রভাগে তৈরি করতে টাইপ করতে পারি?
টিম

@ টিম: হ্যাঁ, আপনি পারেন।
কালেব

উত্তর:


214

টিম যেমন বলেছিলেন, fgশেষ প্রক্রিয়াটিকে অগ্রভাগে ফিরিয়ে আনতে টাইপ করুন ।

আপনার যদি ব্যাকগ্রাউন্ডে একাধিক প্রক্রিয়া চলমান থাকে তবে এটি করুন:

$ jobs
[1]   Stopped                 vim
[2]-  Stopped                 bash
[3]+  Stopped                 vim 23

fg %3vim 23প্রক্রিয়াটিকে অগ্রভাগে ফিরিয়ে আনতে ।

পটভূমিতে চলমান প্রক্রিয়া স্থগিত করতে, ব্যবহার করুন:

kill -STOP %job_id

সিগস্টপ সিগন্যাল একটি প্রক্রিয়া বন্ধ করে (বিরতি দেয়) মূলত একইভাবে Ctrl+ Zকরে।

উদাহরণ: kill -STOP %3

উত্স: কিভাবে Linux এবং ইউনিক্স প্রক্রিয়া সংকেত পাঠাতে এবং কিভাবে পটভূমি ফোরগ্রাউন্ড কাজ পরিচালনা করার জন্য


23
সংকেত 19 SIGCONTআমার জন্য; আমি ব্যবহার kill -STOPএবং kill -CONTযাহাই হউক না কেন সংখ্যার স্মরণ পছন্দ, কিন্তু আপনি পরীক্ষা করতে পারবেন kill -lসাংখ্যিক মানগুলি নিজেকে মনে করিয়ে দিতে
বেহুদা

প্রক্রিয়াটি স্ট্ডারকে আউটপুট দেয়, সুতরাং আমি কমান্ডটি কীভাবে দেব jobএবং fg <jobid>প্রসেসটি টার্মিনালে আউটপুট করার সময় কীভাবে করব ?
টিম

1
@ টিম আপনি কমান্ডটি সাধারণভাবে টাইপ করুন। যতক্ষণ কাজ পটভূমি থাকে, আপনি যা টাইপ করেন তা এটি পড়ছে না - আপনার শেলটি। আপনি যা টাইপ করেন তা আপনার কাছে ভাঙা লাগতে পারে তবে শেলটি এটি ঠিকঠাক বুঝতে পারে।
অ্যালেক্স ওয়েবার

@ অ্যালেক্স ওয়েবার: ধন্যবাদ, এটি কার্যকর! (1) একটি পটভূমি কাজ "Ctrl + Z" ইত্যাদি সহ কোনও ইনপুট এবং আউটপুট গ্রহণ করে না, তাই না? (২) পটভূমিতে চলমান কোনও কাজ কী সরাসরি স্থগিত করা যেতে পারে? যদি হ্যাঁ, কিভাবে? যদি না হয়, তবে স্থগিতের আগে অগ্রভাগে চালানোর জন্য প্রথমে এটি পরিবর্তন করা উচিত?
টিম

2
পটভূমিতে চলছে এমন কোনও কাজ কী সরাসরি হ্যাঁ স্থগিত করা যেতে পারে : kill -STOP %job_idযেমনটি ব্যাখ্যা করা হয়েছে
অকেজো

31

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

ইন্টারেক্টিভ

  • Ctrl+ zবর্তমানে অগ্রণীত প্রোগ্রাম স্থগিত করবে
  • bgসর্বাধিক সাময়িক বরখাস্ত হওয়া প্রোগ্রামটির ব্যাকগ্রাউন্ড হবে
    ( bg %2কাজের সংখ্যার সাথে ব্যবহার করুন , যা দিয়ে আপনি চেক করতে পারেন jobs)
  • fg সর্বাধিক সাময়িক বরখাস্ত কর্মসূচির অগ্রভাগ ground

ইন zsh, আপনি fgপ্রম্পট থেকে অন্য Ctrl+ এর মাধ্যমে স্পষ্টতভাবে চালনার জন্য একটি কী বাঁধাই লিখতে পারেন z:

_zsh_cli_fg() { fg; }
zle -N _zsh_cli_fg
bindkey '^Z' _zsh_cli_fg

সুস্পষ্টভাবে bgস্থগিতকরণের উপর চালানোর একটি চতুর উপায়ও সম্ভবত রয়েছে , তবে এটি বোকামি বলে মনে হচ্ছে; কমপক্ষে আমার জন্য, আমার Ctrl+ zব্যবহারের বেশিরভাগ কারণ হ'ল Ctrl+ cব্যর্থ হতে ব্যর্থ হয়েছে; আমি এটির kill %1পরিবর্তে উদাহরণস্বরূপ অনুসরণ করতে চাই bg, এবং আমি অবশ্যই হত্যার ডিফল্ট করতে চাই না! (এই যুক্তিবিজ্ঞান কেন আমি আর এই কী বাঁধাই ব্যবহার প্রসারিত: আমি উপর hammering করছি Ctrl+ + z! একটি প্রক্রিয়া বন্ধ করার শেষ জিনিস আমি এটা করতে চাই সারসংকলন হয়)

নন-ইন্টারেক্টিভ

আপনি যদি কোনও আলাদা শেল ইভেন্টে থাকেন (বা কোনও ভিন্ন ব্যবহারকারী, কখনও কখনও sudoকমান্ড সহ ), আপনি সম্ভবত চাকরি সংখ্যা ব্যবহার করতে পারবেন না।

আপনি অন্য প্রক্রিয়াটির আইডি (পিআইডি) জানার পরেও অন্য প্রক্রিয়াটিতে কাজ করতে পারেন। আপনি পিআইডি পেতে পারেন pgrep …, বা ps aux |grep …(বা একই শেল থেকে jobs -l, বা $!) এবং আপনি চালাতে পারেন:

kill -STOP $PID  # suspend
kill -CONT $PID  # continue (resume)

আপনি যদি প্রক্রিয়া আইডিটি জানেন না এবং নাম দ্বারা প্রক্রিয়াটির অন্যান্য উদাহরণ স্থগিত করার বিষয়ে উদ্বিগ্ন না হন তবে আপনি এর মধ্যে একটিতে সংকেত পাঠাতে পারেন:

killall -STOP program_name
pkill -STOP program_name
pkill -f -STOP program_name_or_args

একটি CONTএকটি প্রোগ্রাম সংকেত সঙ্গে বন্ধ Ctrl+ + z(এবং bg, 'ঘ) (পুরোভূমিতে) তার উন্নতি পুনরায় শুরু হবে একই যেন আপনি ছিল fgএটা।

পুনরায়: স্ট্যান্ডার্ড ত্রুটি

এই প্রশ্নের সম্পাদনাটি স্ট্যান্ডার্ড ত্রুটি সম্পর্কে জিজ্ঞাসা করে:

প্রক্রিয়াটি স্ট্ডারকে আউটপুট দেয়, সুতরাং fg <jobid>প্রসেসটি টার্মিনালে আউটপুট করার সময় আমি কীভাবে কমান্ডটি জারি করব ?

প্রশ্নে চাকরির উপাদানগুলি ব্যাকগ্রাউন্ডযুক্ত না থাকলে (বা পুরো কাজটি ব্যাকগ্রাউন্ড হয়, সম্ভবত kill -CONTএটির মাধ্যমে ), স্থগিত হওয়ার সময় আপনি আসলে আউটপুট দেখতে পাবেন না।

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

আপনার যদি কাজের বিবরণকারীর সন্ধানের প্রয়োজন হয় তবে STOPউপরের অ-ইন্টারেক্টিভ পদ্ধতিগুলির মাধ্যমে সিগন্যালটি প্রেরণের জন্য অন্য টার্মিনালটি ব্যবহার করুন । এটি আপনার প্রদর্শন মুক্ত করে তুলবে (সম্ভবত Enterকয়েকবার হিট করুন বা রান করুন clearবা Ctrl+ L) যাতে আপনি jobsচাকরীর বর্ণনাকারী সন্ধান করতে ছুটে যেতে পারেন এবং তারপরে সেই সংখ্যাটি fg %Nকোথায় যায় runN


প্রক্রিয়াগুলি বিরতি এবং পুনরায় শুরু করার ক্ষেত্রে একমাত্র সমস্যাটি হ'ল আপনি যদি অন্য কোনও প্রোগ্রামের সাথে কোনও সংযোগ তৈরি করেন (উদাহরণস্বরূপ রব্বিটএমকিউ), পুনরায় শুরু করার পরে সংযোগটি নষ্ট হয়ে যাবে।
নভে

@ নাভ - কারণ আপনি এটিকে মাথাছাড়া করেননি। ব্যাশ এবং জেডে, আমি বিশ্বাস করি আপনার কেবল একটি পটভূমি প্রক্রিয়া অস্বীকার করা প্রয়োজন । আমি এই ধরনের কাজগুলো চালানোর জন্য পছন্দ করা nohup বা টার্মিনাল মাল্টিপ্লেক্সার মত পর্দা বা tmux । আপনি কোনও নোহুপ প্রক্রিয়া বাছাই করতে পারবেন না (ঠিক যেমন আপনি পৃথক সংযোগ থেকে একটি পটভূমি প্রক্রিয়া পুনরায় শুরু করতে পারবেন না), তবে আপনি একটি মাল্টিপ্লেজারে সংযোগ করতে পারেন।
অ্যাডাম কাটজ

এটি একটি পটভূমি প্রক্রিয়া ছিল। আমি টার্মিনালটি বন্ধ করে দিয়েছিলাম এবং তারপরে অন্য টার্মিনাল থেকে সার্ভারে লগ ইন করেছিলাম।
নভে

হ্যাঁ, আপনি যদি অন্য কোনও শেল থেকে কোনও প্রক্রিয়া পুনরায় শুরু করতে না পারেন তবে যদি না এটি মাথায় রেখেই চালু করা হয়। আমি তার জন্য স্ক্রিন বা টিএমউক্সের প্রস্তাব দিই।
অ্যাডাম কাটজ

আমি বিশ্বাস করি আপনি যদি CONTCtrl + Z দিয়ে থামানো কোনও প্রক্রিয়াতে (জব / পাইপলাইন) সিগন্যাল প্রেরণ করেন তবে এটি ব্যাকগ্রাউন্ডে আবার শুরু হবে, আপনি তা না করলেও bg
জি ম্যান

10

fgঅগ্রভাগে আনতে টাইপ করুন ।


ধন্যবাদ! প্রক্রিয়াটি স্ট্ডারকে আউটপুট দেয়, সুতরাং fg <jobid>প্রসেসটি টার্মিনালে আউটপুট করার সময় আমি কীভাবে কমান্ডটি জারি করব ?
টিম

1
  1. jobsকমান্ড দিয়ে কাজ তালিকা
  2. আপনার লক্ষ্যযুক্ত কাজটি সামনে নিয়ে আসুন fg; উদাহরণ: fg %4
  3. CTRL Zস্থগিত করতে আঘাত করুন
  4. এটি পটভূমিতে চলমান শুরু করতে, বিজি ব্যবহার করুন; উদাহরণ:bg %4

0

একটি প্রক্রিয়া শেষ বিভিন্ন উপায়ে করা যেতে পারে। প্রায়শই, কনসোল-ভিত্তিক কমান্ড থেকে, Ctrlcকী - স্ট্রোক (ডিফল্ট বিঘ্নিত অক্ষর) প্রেরণ কমান্ডটি থেকে প্রস্থান করবে। অগ্রভাগ মোডে প্রক্রিয়া চলমান থাকলে এটি কাজ করে।

যদি কোনও প্রক্রিয়া ব্যাকগ্রাউন্ড মোডে চলমান থাকে তবে প্রথমে আপনাকে psকমান্ডটি ব্যবহার করে এর জব আইডি নেওয়া দরকার এবং এরপরে আপনি প্রক্রিয়াটি হত্যার জন্য কিল কমান্ড ব্যবহার করতে পারেন:

$ps -f
UID      PID  PPID C STIME    TTY   TIME CMD
amrood   6738 3662 0 10:23:03 pts/6 0:00 first_one
amrood   6739 3662 0 10:22:54 pts/6 0:00 second_one
amrood   3662 3657 0 08:10:53 pts/6 0:00 -ksh
amrood   6892 3662 4 10:51:50 pts/6 0:00 ps -f
$kill 6738
Terminated

এখানে killকমান্ড first_oneপ্রক্রিয়াটি শেষ করবে । যদি কোনও প্রক্রিয়া একটি নিয়মিত killকমান্ড উপেক্ষা করে , আপনি kill -9নিম্নলিখিত প্রক্রিয়া আইডি অনুসরণ করতে পারেন :

$kill -9 6738
Terminated

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