"এবং" ব্যাকগ্রাউন্ডে প্রক্রিয়াগুলি


24

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


প্রযুক্তিগতভাবে নয় তবে সম্ভবত tmuxআপনার প্রশ্নের মতো একই কার্যকারিতা দেয়।
এম কে সি

1
সম্ভব হলে অন্য শেল খোলার সহজ বিকল্পটিকে উপেক্ষা করবেন না।
jpmc26

উত্তর:


43

টার্মিনাল উইন্ডোতে আপনি প্রক্রিয়াটি "স্থগিত" করতে সাধারণত Control+ টাইপ Zকরে তারপরে bg"পটভূমিতে" কমান্ডটি ব্যবহার করেন ।

যেমন একটি ঘুম কমান্ড সহ

$ /bin/sleep 1000
^Z[1] + Stopped                  /bin/sleep 1000
$ bg
[1]     /bin/sleep 1000&
$ jobs
[1] +  Running                 /bin/sleep 1000
$ 

আমরা দেখতে পাচ্ছি যে প্রক্রিয়াটি চলছে এবং আমার কাছে এখনও আমার কমান্ড লাইন রয়েছে।


5
এটি যুক্ত করা আকর্ষণীয় হতে পারে যে fgকমান্ডের সাহায্যে প্রক্রিয়াটিকে অগ্রভাগে ফিরিয়ে আনা যেতে পারে , যা 1পরামিতি হিসাবে কাজের আইডি (বন্ধনীতে নির্দিষ্ট করা ) হয়। এটি ব্যবহারের সাথে সুনির্দিষ্ট নয় bgএবং এটি চালু হওয়া প্রক্রিয়াগুলিতে করা যেতে পারে &
হারুন

14

CtrlZএটি করার উপায়টি হল, তবে কেবল সম্পূর্ণতার জন্য: প্রশ্নটি "কমান্ড" চেয়েছে এবং এটি হবে (অন্য টার্মিনাল থেকে):

kill -STOP pid_of_the_running_applications

এবং অবশ্যই

bg

অ্যাপ্লিকেশন টার্মিনাল থেকে।


6
কিল -স্টপ এবং তারপরে হত্যা -Cont
মিশেল বিলাউড

10

বাশে:

Ctrl+ Zএবং তারপর bg

এখন চালান jobsএবং ফলাফল দেখুন।


2
@ গ্রোভেলপ্লেক্স টমাস প্রথমে উত্তর দিয়েছে, সুতরাং স্টিফেনের উত্তরের নীচে মন্তব্য করা আরও উপযুক্ত হবে যে, মূলত তার আরও কিছু বিশদ সহ টমাস উত্তর রয়েছে।
অ্যান্থন

2
আমরা আসলে একই সাথে উত্তর দিয়েছি answered অবাক হওয়ার মতো বিষয় নয় যেহেতু আমরা উভয়ই একই কথা বলেছিলাম যেহেতু এটির স্পষ্ট উত্তর :-) আমাদের দু'জনই অপরটিকে অনুলিপি করল না। টমাসের খুব শীঘ্রই আমার উত্তর পৌঁছে গেল কারণ আমি উদাহরণটি তৈরি এবং ফর্ম্যাট করতে অতিরিক্ত সময় ব্যয় করেছি।
স্টিফেন হ্যারিস

1
এবং আমার বলে যে এটি বাশ, তাই তারা একই নয়।
টমাসজ

1
হেই, সেখানে একটি সম্ভাব্য পয়েন্ট আছে। এটিতে শেলটির কাজের নিয়ন্ত্রণ থাকা দরকার। আমি যে প্রথম মেশিনে কাজ করেছি (SVr2 ভিত্তিক) তার কিছু ছিল না /bin/shএবং তাই এটি কাজ করে না :-)
স্টিফেন হ্যারিস

1

চাপ দিতে অসুবিধার প্রতিরোধমূলক ব্যবস্থা হিসাবে CTRL- zআপনি আপনার সম্পাদকের জন্য একটি মোড়ক স্ক্রিপ্ট তৈরি করতে পারেন যা আপনার সম্পাদককে পটভূমিতে চালিত করবে। স্পষ্টভাবে ব্যাকগ্রাউন্ডে এটি শুরু করার জন্য আপনার মনে রাখার যত্ন নেওয়ার প্রয়োজন হবে না:

    #!/bin/sh

    EDITOR="emacs" # or whatever

    if [ -z "${DISPLAY}" ]; then
      ${EDITOR} "$@"
    else
      ${EDITOR} "$@" &
    fi

উপরে আপনি প্রথমে নির্ধারণ করতে চেষ্টা করুন যে আপনার কাছে এক্স সার্ভার উপলব্ধ রয়েছে এবং কেবলমাত্র তখনই পটভূমিতে সম্পাদকটি চালনা করুন (যদি না হয় তবে অনেকগুলি ইউনিক্স সম্পাদক পরিবর্তে আপনার টার্মিনালটি ব্যবহার করবেন এবং আপনি এই ক্ষেত্রে সম্পাদককে একটি ব্যাকগ্রাউন্ড প্রক্রিয়া হিসাবে চালাতে চান না) । এটি "$@"মোড়ক স্ক্রিপ্টের জন্য আপনি যেমন সরবরাহ করেছেন ঠিক তেমনই আপনার পছন্দসই ভারব্যাটিম ( ) সম্পাদককে সমস্ত যুক্তি পাঠিয়ে দেবে ।

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

    #!/bin/sh

    EDITOR=emacs # whatever

    stop_cont_prog()
    {
      case "$1" in
        # begin with number is considered PID - this is not good 
        # enough to be taken seriously...
        [1-9]*) kill -SIGSTOP "$1"; kill -SIGCONT "$2";;
        *)      killall -SIGSTOP "$1"; killall -SIGCONT "$2";;
      esac
    }

    if [ -n "$1" ]; then
      for prog in "$@"; do stop_cont_prog "$1"; done
    else  
      stop_cont_prog "${EDITOR}"
    fi

এই পদ্ধতিটি emacsব্যাকগ্রাউন্ডে (বেশ কয়েকটি) কমান্ড চালানোর পরে আমাকে আমার টার্মিনাল ট্যাবগুলি সঠিকভাবে দিয়েছে । তবে শেল জব নিয়ন্ত্রণ বা টার্মিনাল সেটিং বিভ্রান্তির কারণে টার্মিনালে চলমান ইমাস প্রক্রিয়াটি সঠিকভাবে পুনরুদ্ধার করা যায়নি। সুতরাং এই পদ্ধতিটি কিছু পরিশীলিত হতে উপকৃত হবে।

SIGSTOPঠিক কি ফোরগ্রাউন্ড প্রক্রিয়া যখন আপনি (সাধারণ অক্ষমতা দ্বারা) টিপুন পাঠাতে হয় CTRL- zstty -aআউটপুট পড়ুন

$ stty -a
speed 38400 baud; rows 50; columns 200; line = 0;
intr = ^C; [...] start = ^Q; stop = ^S; susp = ^Z; [...]
[...]

(আউটপুট সংক্ষিপ্ত) এবং sttyম্যানুয়াল পৃষ্ঠা:

   susp CHAR
          CHAR will send a terminal stop signal

SIGSTOPসিগন্যাল ব্যবহার বন্ধ হওয়া প্রক্রিয়াগুলি প্রেরণ করে পুনরায় আরম্ভ করা যেতে পারে SIGCONT। সাধারণত এটি শেল জব কন্ট্রোল লজিক যা আপনার SIGCONTসাথে যুক্ত অন্যান্য আদেশের সাথে জড়িত fgএবং প্রয়োজনীয় bgআদেশের যত্ন নেবে send

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