• লিনাক্স ব্যাকগ্রাউন্ডে অ্যাপ্লিকেশন চলমান। লিনাক্সে ব্যাকগ্রাউন্ডে একটি প্রক্রিয়া চালান

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

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

    কমান্ড এবং স্ক্রিপ্ট-নাম & /path/to/command arg1 arg2 এবং কমান্ড-1 | কমান্ড-2 arg1 এবং কমান্ড-1 | কমান্ড-2 -আর্গ1 -আর্গ2 >/পথ/টু/আউটপুট এবং

    পটভূমিতে এমন প্রোগ্রাম চালানোর জন্য যা টার্মিনাল উইন্ডো ব্লক করে না, আপনাকে অবশ্যই বিশেষ "&" প্রশিক্ষক ব্যবহার করতে হবে। কমান্ডের নাম, বিকল্প এবং ইনপুট প্যারামিটারের পরে লাইনের একেবারে শেষে এই অক্ষরটি রাখুন। সাধারণভাবে, এই ক্রমটি "command_name -option incoming_parameter &" হিসাবে প্রবেশ করা যেতে পারে।

    ls ~/* > ~/test-file.txt &
    18960

    এন্টার বোতাম টিপানোর পরে, প্রোগ্রামটি স্বয়ংক্রিয়ভাবে পটভূমিতে চলবে। এই ক্ষেত্রে, টার্মিনাল নিম্নলিখিত বিষয়বস্তু "[টাস্ক_সংখ্যা] প্রক্রিয়া_আইডি" সহ একটি লাইন দেখাবে এবং নতুন মিন্টেড কমান্ড প্রবেশ করার জন্য একটি আমন্ত্রণ ইস্যু করবে।

    লিনাক্সে পটভূমিতে চলমান কমান্ডগুলি খুঁজুন

    নিম্নলিখিত কমান্ড চালান:

    ডেটা আউটপুট উদাহরণ:

    চলমান find / -iname "*.c" 2> /dev/null > /tmp/output.txt &
    + চলমান grep -R "hostNamed" / 2> /dev/null > /tmp/grep.txt &

    আইডি কোথায় এবং অর্ডার করুন।

    স্ট্যান্ডার্ড কাস্ট ছাড়াও কাজের আইডিগুলির জন্য প্রক্রিয়া আইডি প্রদর্শন করতে, -l বিকল্পটি পাস করুন:

    ডেটা আউটপুট উদাহরণ:

    7307 চলমান find / -iname "*.c" 2> /dev/null > /tmp/output.txt &
    + 7324 চলমান grep -R "hostNamed" / 2> /dev/null > /tmp/grep.txt &

    শুধুমাত্র প্রক্রিয়া আইডি প্রদর্শন করতে, টাইপ করুন:

    ডেটা আউটপুট উদাহরণ:

    পটভূমিতে চলমান কমান্ডগুলি চালানো বন্ধ করুন

    একটি প্রক্রিয়া জোরপূর্বক বা সুদৃঢ়ভাবে বন্ধ করতে, kill কমান্ডটি ব্যবহার করুন। সিনট্যাক্স এই মত দেখায়:

    পিআইডি মেরে ফেলুন
    হত্যা -15 পিআইডি
    হত্যা -9 পিআইডি
    killall প্রক্রিয়া-নাম-এখানে
    killall-15 প্রক্রিয়া-নাম-এখানে
    killall-9 প্রক্রিয়া-নাম-এখানে

    লিনাক্সে একটি প্রোগ্রামকে অগ্রভাগে ফিরিয়ে আনা

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

    খুঁজুন / -name .ini 2> ~/results.txt &
    19090
    fg 1
    bash: fg: টাস্ক শেষ
    + 1 থেকে প্রস্থান করুন / -name .ini 2> ~/results.txt

    1. আপনার কি একটি sql ক্যোয়ারী চালানো দরকার, যার ফলাফলের জন্য আপনাকে কয়েক ঘন্টা বা দিন অপেক্ষা করতে হবে?
    2. আপনি ব্যাকগ্রাউন্ডে একটি অ্যাপ্লিকেশন চালানোর প্রয়োজন?
    3. আপনার কি ব্যাকগ্রাউন্ডে একটি প্রোগ্রাম চালানোর দরকার এবং এটিতে ফিরে যেতে সক্ষম হবেন?
    4. আপনি কি লিনাক্স কনসোল ব্যবহার করছেন এবং ssh এর সাথে কাজ করছেন?

    তাহলে আপনাকে অবশ্যই জানতে হবে পর্দা.

    স্ক্রিন বেসিক

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

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

    • আপনি যদি একটি ডিরেক্টরি থেকে অন্য ডিরেক্টরিতে প্রচুর পরিমাণে ফাইল অনুলিপি বা সরান
    • যদি আপনি একটি ভারী sql কোয়েরি চালাচ্ছেন
    • আপনি যদি এমন একটি অ্যাপ্লিকেশন চালাতে চান যা কনসোলটিকে "ক্যাপচার" করে

    সম্ভবত, আপনি খুব দুঃখিত হবেন যখন, একটি দুর্ঘটনাবশত বন্ধ টার্মিনাল বা একটি শক্তি বৃদ্ধির কারণে, একটি sql ক্যোয়ারী যা ইতিমধ্যে 10 ঘন্টারও বেশি সময় ধরে চলছে তা বাধাগ্রস্ত হবে৷ স্ক্রিনের ক্ষেত্রে, সার্ভারে স্ক্রিন চলে, স্ক্রিন অবজেক্টটি অনুরোধের সূচনাকারী হবে এবং অনুরোধটি আর কোনো ক্লায়েন্ট সমস্যা দ্বারা বাধাগ্রস্ত হবে না। সংযোগটি ভেঙে গেলে, প্রক্রিয়াগুলি বন্ধ হয় না, তবে কাজ চালিয়ে যায় এবং আপনি যে কোনও সময় তাদের কাছে ফিরে যেতে পারেন।

    পর্দা নিয়ে কাজ করা

    তৈরির জন্য পর্দাএবং এটির সাথে কাজ শুরু করুন, কমান্ড লাইনে টাইপ করুন:

    যেখানে test1 হল স্ক্রীন অবজেক্টের জন্য একটি স্বেচ্ছাচারী নাম, আপনি সুবিধার জন্য এটির নাম দিতে পারেন।

    এটি নামে একটি স্ক্রিন তৈরি করবে পরীক্ষা1. এখন আপনি যেকোনো দীর্ঘ অপারেশন শুরু করতে পারেন। উদাহরণস্বরূপ, একটি sql কোয়েরি চালান:

    Mysql -u ... থেকে * নির্বাচন করুন ... আপডেট ...

    ইতিমধ্যে এই পর্যায়ে, আপনি যদি ইন্টারনেট হারিয়ে ফেলেন, আপনি দুর্ঘটনাক্রমে টার্মিনাল ট্যাবটি বন্ধ করে দেন, কম্পিউটারটি রিবুট হবে - আপনি কোনও ডেটা হারাবেন না এবং sql ক্যোয়ারী বাধাগ্রস্ত হবে না।

    পর্দা থেকে প্রস্থান করতে, নিম্নলিখিত কী টিপুন:

    + & - প্রস্থান পর্দা. অনুরোধ চলতে থাকবে। স্ক্রিনশটে চলমান সমস্ত প্রক্রিয়া চলতে থাকে।

    আপনার স্ক্রীন বা অন্য কোন স্ক্রীন উইন্ডোতে ফিরে যেতে, আপনি সমস্ত উপলব্ধ স্ক্রীন দেখতে পারেন:

    পর্দা-আর - পর্দার একটি নির্বাচন করুন এবং সক্রিয় করুন।

    যখন আপনার আর স্ক্রিন সেশনের প্রয়োজন হয় না, তখন স্ক্রিন সেশন সম্পূর্ণভাবে শেষ করতে, স্ক্রিন -r দিয়ে স্ক্রিন সক্রিয় করুন এবং এর ভিতরে ক্লিক করুন + অথবা exit টাইপ করুন।

    কার্য এবং প্রক্রিয়া

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

    /home/larry# ps PID TT স্ট্যাট টাইম কমান্ড 24 3 S 0:03 (bash) 161 3 R 0:00 ps /home/larry#

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

    একটি চলমান প্রক্রিয়াও বলা হয় টাস্ক(চাকরি)। শর্তাবলী প্রক্রিয়া এবং কাজ বিনিময়যোগ্য. যাইহোক, যখন তারা বোঝায় তখন একটি প্রক্রিয়াকে একটি কাজ হিসাবে উল্লেখ করা সাধারণ কাজ নিয়ন্ত্রণ(চাকরি নিয়ন্ত্রণ)। জব কন্ট্রোল হল একটি কমান্ড শেল বৈশিষ্ট্য যা ব্যবহারকারীকে একাধিক কাজের মধ্যে স্যুইচ করার ক্ষমতা প্রদান করে।

    বেশিরভাগ ক্ষেত্রে, ব্যবহারকারীরা শুধুমাত্র একটি টাস্ক চালাবে, যেটি হবে শেলে টাইপ করা শেষ কমান্ড। যাইহোক, অনেক শেল (bash এবং tcsh সহ) ফাংশন আছে চাকরি ব্যবস্থাপনা(কাজ নিয়ন্ত্রণ), আপনাকে একই সময়ে বা একাধিক কমান্ড চালানোর অনুমতি দেয় অ্যাসাইনমেন্ট(চাকরি) এবং প্রয়োজন অনুসারে তাদের মধ্যে স্যুইচ করুন।

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

    ফোরগ্রাউন্ড এবং ব্যাকগ্রাউন্ড

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

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

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

    দুটি সংকেত - 9 নম্বর ( হত্যা) এবং 19 ( স্টপ) - সবসময় সিস্টেম দ্বারা প্রক্রিয়া করা হয়. নিশ্চিতভাবে প্রক্রিয়াটি হত্যা করার জন্য প্রথমটির প্রয়োজন (তাই নাম)। সংকেত স্টপ স্থগিত প্রক্রিয়া: এই অবস্থায়, প্রক্রিয়াটি প্রক্রিয়া টেবিল থেকে সরানো হয় না, তবে এটি একটি সংকেত 18 না পাওয়া পর্যন্ত এটি কার্যকর করা হয় না ( CONT) - এর পরে এটি কাজ চালিয়ে যাবে। একটি লিনাক্স শেল, সংকেত স্টপএকটি এস্কেপ সিকোয়েন্স ব্যবহার করে একটি সক্রিয় প্রক্রিয়ায় পাস করা যেতে পারে ctrl -জেড .

    সংকেত নম্বর 15 ( মেয়াদ) কাজে বাধা দিতে ব্যবহৃত হয়। এ বাধা(ব্যহত) কাজের প্রক্রিয়া মারা যায়। কাজের বাধা সাধারণত নিয়ন্ত্রণ ক্রম দ্বারা সম্পন্ন করা হয় ctrl -. বিঘ্নিত কাজ পুনরুদ্ধার করার কোন উপায় নেই। আপনার সচেতন হওয়া উচিত যে কিছু প্রোগ্রাম সংকেতকে বাধা দেয় মেয়াদ(একটি হ্যান্ডলার ব্যবহার করে), যাতে কী সমন্বয় টিপে ctrl -(o) অবিলম্বে প্রক্রিয়াটি বন্ধ করতে পারে না। এটি করা হয় যাতে প্রোগ্রামটি সম্পূর্ণ হওয়ার আগে তার কাজের চিহ্নগুলি ধ্বংস করতে পারে। অনুশীলনে, কিছু প্রোগ্রাম এইভাবে বাধা দেওয়া যাবে না।

    ব্যাকগ্রাউন্ডে বদলি করা এবং চাকরি নষ্ট করা

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

    /home/larry# হ্যাঁ y y y y y

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

    /home/larry# হ্যাঁ > /dev/null

    এখন স্ক্রিনে কিছুই দেখা যাচ্ছে না। যাইহোক, শেল প্রম্পটটিও ফেরত দেওয়া হয় না। কারণ yes কমান্ডটি এখনও চলছে এবং y অক্ষর সমন্বিত বার্তাগুলি /dev/null এ পাঠাচ্ছে। আপনি এটি একটি গর্ভপাত সংকেত পাঠিয়ে এই কাজটি হত্যা করতে পারেন।

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

    একটি প্রক্রিয়াকে ব্যাকগ্রাউন্ডে রাখার একটি উপায় হল কমান্ডের শেষে একটি & যোগ করা। উদাহরণ:

    /home/larry# হ্যাঁ > /dev/null & + 164 /home/larry#

    বার্তা হল কাজের নম্বর(চাকরির নম্বর) হ্যাঁ প্রক্রিয়ার জন্য। শেল প্রতিটি এক্সিকিউটেবল কাজের জন্য একটি কাজের নম্বর বরাদ্দ করে। যেহেতু হ্যাঁ একমাত্র কাজ সম্পাদনযোগ্য, তাই এটি 1 নম্বর বরাদ্দ করা হয়েছে। 164 নম্বরটি এই প্রক্রিয়ার সাথে যুক্ত প্রক্রিয়া সনাক্তকরণ নম্বর (পিআইডি) এবং এই নম্বরটি সিস্টেম দ্বারা প্রক্রিয়াটিকেও দেওয়া হয়। আমরা পরে দেখব, এই দুটি সংখ্যা ব্যবহার করে একটি প্রক্রিয়া উল্লেখ করা যেতে পারে।

    তাই এখন আমাদের yes কমান্ড প্রক্রিয়াটি ব্যাকগ্রাউন্ডে চলছে, ক্রমাগত y-এর একটি স্ট্রীম /dev/null এ পাঠানো হচ্ছে। এই প্রক্রিয়াটির অবস্থা জানতে, আপনাকে কমান্ডটি কার্যকর করতে হবে চাকরি, যা একটি অভ্যন্তরীণ শেল কমান্ড।

    /home/larry# চাকরি + হ্যাঁ চলছে >/dev/null & /home/larry#

    আমরা দেখতে যে এই প্রোগ্রাম সত্যিই কাজ করে. একটি কাজের স্থিতি পরীক্ষা করতে, আপনি কমান্ডটিও ব্যবহার করতে পারেন পুনশ্চ, উপরে প্রদর্শিতভাবে.

    প্রক্রিয়ায় একটি সংকেত পাঠানোর জন্য (প্রায়শই একটি প্রয়োজন হয় বাধাকাজের অপারেশন) ইউটিলিটি ব্যবহার করা হয় হত্যা. এই কমান্ড একটি যুক্তি হিসাবে একটি কাজের নম্বর বা একটি PID দেওয়া হয়. একটি ঐচ্ছিক পরামিতি হল প্রক্রিয়ায় পাঠানো সংকেতের সংখ্যা। ডিফল্টরূপে সংকেত পাঠানো হয়েছে মেয়াদ. উপরের ক্ষেত্রে, কাজের নম্বর ছিল 1, তাই কমান্ড %1 হত্যা করুনচাকরি বাতিল করবে। যখন একটি কাজকে তার নম্বর দ্বারা উল্লেখ করা হয় (PID এর পরিবর্তে), তখন সেই সংখ্যাটি কমান্ড লাইনে একটি শতাংশ চিহ্ন ("%") সহ প্রিফিক্স করা আবশ্যক।

    এখন কমান্ড লিখুন চাকরিপূর্ববর্তী কর্মের ফলাফল পরীক্ষা করতে আবার:

    /home/larry# চাকরি সমাপ্ত হ্যাঁ >/dev/null

    প্রকৃতপক্ষে, কাজটি ধ্বংস হয়ে গেছে, এবং পরের বার আপনি যখন কাজ কমান্ডটি প্রবেশ করবেন, তখন স্ক্রিনে এটি সম্পর্কে কোনও তথ্য থাকবে না।

    আপনি প্রসেস আইডেন্টিফিকেশন নম্বর (পিআইডি) ব্যবহার করে চাকরিও মেরে ফেলতে পারেন। চাকরি শুরু করার সময় চাকরির আইডি সহ এই নম্বরটি দেওয়া হয়। আমাদের উদাহরণে, পিআইডি মান ছিল 164, তাই কমান্ড হত্যা 164কমান্ডের সমতুল্য হবে %1 হত্যা করুন. পিআইডি কে হত্যা কমান্ডের আর্গুমেন্ট হিসাবে ব্যবহার করার সময়, আপনাকে "%" অক্ষরটি প্রবেশ করতে হবে না।

    বিরতি এবং কাজ পুনরায় শুরু

    চলুন শুরু করা যাক অগ্রভাগে yes কমান্ড দিয়ে, যেমন আমরা আগে করেছি:

    /home/larry# হ্যাঁ > /dev/null

    আগের মতো, যেহেতু প্রক্রিয়াটি অগ্রভাগে চলছে, শেল প্রম্পটটি স্ক্রিনে ফিরে আসে না।

    এখন পরিবর্তে একটি কী সমন্বয় সঙ্গে কাজ বাধা ctrl -, টাস্ক করতে পারেন স্থগিত করা(সাসপেন্ড, আক্ষরিক অর্থে - হ্যাং আপ), তাকে একটি সংকেত পাঠানো স্টপ. টাস্ক বিরাম দিতে, আপনাকে অবশ্যই উপযুক্ত কী সমন্বয় টিপুন, সাধারণত এটি ctrl -জেড .

    /home/larry# হ্যাঁ > /dev/null ctrl -জেড+ থামল হ্যাঁ >/dev/null /home/larry#

    একটি স্থগিত প্রক্রিয়া সহজভাবে চালানো হয় না. এটি সিপিইউ সম্পদ গ্রহণ করে না। একটি স্থগিত কাজ একই বিন্দু থেকে শুরু করা যেতে পারে যেন এটি স্থগিত করা হয়নি।

    অগ্রভাগে একটি কাজ পুনরায় শুরু করতে, আপনি কমান্ড ব্যবহার করতে পারেন fg(ফোরগ্রাউন্ড শব্দ থেকে - অগ্রভাগ)।

    /home/larry# fg হ্যাঁ >/dev/null

    শেল আবার কমান্ডের নাম প্রদর্শন করবে, তাই ব্যবহারকারী জানতে পারবে যে তিনি বর্তমানে অগ্রভাগে কোন কাজটি চালাচ্ছেন। কী টিপে এই কাজটি আবার থামান ctrl -জেড, কিন্তু এবার আমরা কমান্ড দিয়ে এটিকে ব্যাকগ্রাউন্ডে রান করব bg(ব্যাকগ্রাউন্ড শব্দ থেকে - ব্যাকগ্রাউন্ড)। এটি প্রদত্ত প্রক্রিয়াটিকে এমনভাবে কাজ করবে যেন শেষে & অক্ষর সহ কমান্ডটি শুরু করার সময় ব্যবহার করা হয়েছিল (যেমনটি পূর্ববর্তী বিভাগে করা হয়েছিল):

    /home/larry# bg + হ্যাঁ $>$/dev/null & /home/larry#

    এটি শেল প্রম্পট প্রদান করে। এখন দল চাকরিদেখানো উচিত যে প্রক্রিয়া হ্যাঁএই মুহূর্তে সত্যিই কাজ করে; এই প্রক্রিয়া কমান্ড দিয়ে হত্যা করা যেতে পারে হত্যা, যেমনটা আগে করা হয়েছিল।

    আপনি ব্যাকগ্রাউন্ডে চলমান একটি কাজ বিরাম দিতে কীবোর্ড শর্টকাট ব্যবহার করতে পারবেন না। ctrl -জেড. একটি কাজ স্থগিত করার আগে, এটি কমান্ডের সাথে অগ্রভাগে আনতে হবে fgএবং শুধুমাত্র তারপর বন্ধ. এইভাবে আদেশ fgস্থগিত চাকরি বা পটভূমিতে চলমান চাকরিতে আবেদন করা যেতে পারে।

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

    পটভূমিতে চলমান কাজগুলি স্ক্রিনে কিছু পাঠ্য প্রদর্শন করার চেষ্টা করতে পারে। এটি অন্যান্য কাজের সাথে কাজের হস্তক্ষেপ করবে।

    /হোম/ল্যারি# হ্যাঁ এবং

    এখানে, stdout কে /dev/null এ পুনঃনির্দেশিত করা হয়নি, তাই y অক্ষরের একটি অবিরাম স্ট্রিম স্ক্রিনে প্রিন্ট করা হবে। এই থ্রেড বন্ধ করা যাবে না কারণ কী সমন্বয় ctrl -পটভূমিতে কাজ প্রভাবিত করে না। এই ইস্যু বন্ধ করার জন্য, আপনাকে কমান্ডটি ব্যবহার করতে হবে fg, যা টাস্কটিকে অগ্রভাগে নিয়ে আসবে এবং তারপর একটি কী সমন্বয় দিয়ে টাস্কটিকে মেরে ফেলবে ctrl - .

    আরো একটি মন্তব্য করা যাক. সাধারণত একটি দল fgএবং দল bgসর্বশেষ বিরতি দেওয়া কাজগুলিকে প্রভাবিত করুন (যদি আপনি কমান্ডটি প্রবেশ করেন তবে এই কাজগুলি কাজের নম্বরের পাশে একটি + চিহ্ন দিয়ে চিহ্নিত করা হবে চাকরি) যদি একই সময়ে এক বা একাধিক কাজ চলছে, তাহলে কমান্ড আর্গুমেন্ট দিয়ে কাজগুলি অগ্রভাগে বা পটভূমিতে স্থাপন করা যেতে পারে fgবা আদেশ bgতাদের শনাক্তকরণ নম্বর (চাকরির আইডি)। উদাহরণস্বরূপ, কমান্ড fg %2অগ্রভাগে কাজ নম্বর 2 রাখে এবং কমান্ড bg %3পটভূমিতে কাজ নম্বর 3 রাখে। কমান্ড আর্গুমেন্ট হিসাবে PID ব্যবহার করুন fgএবং bgএটা নিষিদ্ধ.

    তদুপরি, অগ্রভাগে একটি কাজ আনতে, আপনি কেবল তার নম্বর নির্দিষ্ট করতে পারেন। হ্যাঁ, দল %2 কমান্ডের সমতুল্য হবে fg %2 .

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

    গতবার আমরা ব্যাশ স্ক্রিপ্টে ইনপুট, আউটপুট এবং এরর স্ট্রীম নিয়ে কাজ করার কথা বলেছিলাম, ফাইল ডিসক্রিপ্টর সম্পর্কে এবং স্ট্রিম রিডাইরেকশন সম্পর্কে। এখন আপনি ইতিমধ্যে আপনার নিজের কিছু লিখতে যথেষ্ট জানেন. ব্যাশ শেখার এই পর্যায়ে, চলমান স্ক্রিপ্টগুলি কীভাবে পরিচালনা করা যায়, কীভাবে তাদের লঞ্চ স্বয়ংক্রিয় করা যায় সে সম্পর্কে আপনার প্রশ্ন থাকতে পারে।

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

    লিনাক্স সংকেত

    লিনাক্সে, তিন ডজনেরও বেশি সংকেত রয়েছে যা সিস্টেম বা অ্যাপ্লিকেশন দ্বারা উত্পন্ন হয়। কমান্ড লাইন স্ক্রিপ্ট তৈরি করার সময় এখানে সবচেয়ে বেশি ব্যবহৃত একটি তালিকা রয়েছে যা অবশ্যই কাজে আসবে।
    সংকেত কোড
    নাম
    বর্ণনা
    1
    SIGHUP
    টার্মিনাল বন্ধ
    2
    SIGINT
    টার্মিনাল থেকে ব্যবহারকারীর দ্বারা প্রক্রিয়া বন্ধ করার সংকেত (CTRL + C)
    3
    SIGQUIT
    একটি মেমরি ডাম্প সহ টার্মিনাল (CTRL + \) থেকে ব্যবহারকারীর দ্বারা প্রক্রিয়াটি বন্ধ করার সংকেত
    9
    সিগকিল
    শর্তহীনভাবে একটি প্রক্রিয়া সমাপ্ত করা
    15
    SIGTERM
    প্রক্রিয়া সমাপ্তির অনুরোধ সংকেত
    17
    সিগস্টপ
    প্রক্রিয়াটি কার্যকর করার জোরপূর্বক স্থগিতাদেশ, কিন্তু তার কাজ শেষ করা নয়
    18
    SIGTSTP
    টার্মিনাল (CTRL+Z) থেকে পজ প্রক্রিয়া কিন্তু বন্ধ হচ্ছে না
    19
    SIGCONT
    পূর্বে বন্ধ করা প্রক্রিয়া পুনরায় শুরু করা হচ্ছে

    আপনি টার্মিনাল বন্ধ করার সময় যদি ব্যাশ শেল একটি SIGHUP সংকেত পায়, এটি প্রস্থান করে। প্রস্থান করার আগে, এটি চলমান স্ক্রিপ্ট সহ এটিতে চলমান সমস্ত প্রক্রিয়াগুলিতে একটি SIGHUP সংকেত পাঠায়।

    SIGINT সংকেত অপারেশনটি সাময়িকভাবে বন্ধ করে দেয়। লিনাক্স কার্নেল শেলটিতে প্রসেসরের সময় বরাদ্দ করা বন্ধ করে দেয়। যখন এটি ঘটে, শেল তাদের একটি SIGINT সংকেত পাঠিয়ে প্রক্রিয়াগুলিকে অবহিত করে।

    ব্যাশ স্ক্রিপ্টগুলির এই সংকেতগুলির উপর কোনও নিয়ন্ত্রণ নেই, তবে তারা সেগুলিকে চিনতে পারে এবং সংকেতের পরিণতির জন্য স্ক্রিপ্ট প্রস্তুত করার জন্য কমান্ডগুলি চালাতে পারে।

    স্ক্রিপ্টে সংকেত পাঠানো হচ্ছে

    ব্যাশ শেল আপনাকে কীবোর্ড শর্টকাট ব্যবহার করে স্ক্রিপ্টে সংকেত পাঠাতে দেয়। আপনি যদি অস্থায়ীভাবে চলমান স্ক্রিপ্ট বন্ধ করতে বা এটি থেকে প্রস্থান করতে চান তবে এটি খুব কার্যকর।

    একটি প্রক্রিয়া সমাপ্ত করা

    CTRL + C কী সংমিশ্রণ একটি SIGINT সংকেত তৈরি করে এবং শেলের মধ্যে চলমান সমস্ত প্রক্রিয়াগুলিতে এটি প্রেরণ করে, যার ফলে সেগুলি বন্ধ হয়ে যায়।

    শেলে নিম্নলিখিত কমান্ডটি চালান:

    ঘুম 100 ডলার
    এর পরে, আমরা CTRL + C কী সমন্বয়ের সাথে এর কাজটি সম্পূর্ণ করব।


    কীবোর্ড থেকে একটি প্রক্রিয়া শেষ করা হচ্ছে

    সাময়িকভাবে প্রক্রিয়া বন্ধ করুন

    CTRL + Z কী সংমিশ্রণ SIGTSTP সংকেত তৈরি করে, যা প্রক্রিয়াটিকে স্থগিত করে কিন্তু এটি কার্যকর করা বন্ধ করে না। এই জাতীয় প্রক্রিয়া মেমরিতে থাকে, এর কাজ আবার শুরু করা যেতে পারে। শেলে কমান্ডটি চালান:

    ঘুম 100 ডলার
    এবং অস্থায়ীভাবে CTRL + Z কী সমন্বয় দিয়ে এটি বন্ধ করুন।


    একটি প্রক্রিয়া স্থগিত করা

    বর্গাকার বন্ধনীর সংখ্যা হল কাজের সংখ্যা যা শেল প্রক্রিয়াটির জন্য বরাদ্দ করে। শেল এটিতে চলমান প্রক্রিয়াগুলিকে অনন্য সংখ্যার কাজ হিসাবে বিবেচনা করে। প্রথম প্রক্রিয়াটি 1 নম্বর, দ্বিতীয়টি - 2 এবং আরও অনেক কিছু বরাদ্দ করা হয়েছে।

    আপনি যদি একটি শেল-বাউন্ড কাজ স্থগিত করেন এবং এটি থেকে প্রস্থান করার চেষ্টা করেন, bash একটি সতর্কতা জারি করবে।

    আপনি নিম্নলিখিত কমান্ডের সাহায্যে স্থগিত কাজগুলি দেখতে পারেন:

    Ps-l


    কৃত কাজের তালিকা

    S কলামে, যা প্রক্রিয়ার অবস্থা প্রদর্শন করে, T স্থগিত প্রক্রিয়ার জন্য প্রদর্শিত হয়। এটি নির্দেশ করে যে কমান্ডটি বিরাম দেওয়া হয়েছে বা একটি ট্রেস অবস্থায় রয়েছে।

    আপনি যদি একটি স্থগিত প্রক্রিয়া শেষ করতে চান, আপনি হত্যা কমান্ড ব্যবহার করতে পারেন। এ সম্পর্কে বিস্তারিত পড়া যাবে।

    তার কল এই মত দেখায়:

    প্রসেসআইডি কিল করুন

    সংকেত বাধা

    একটি স্ক্রিপ্টে লিনাক্স সিগন্যাল ট্রেসিং সক্ষম করতে, ফাঁদ কমান্ডটি ব্যবহার করুন। এই কমান্ডটি কল করার সময় যদি স্ক্রিপ্টটি নির্দিষ্ট সংকেত পায়, তবে এটি নিজে থেকে এটি পরিচালনা করে, যখন শেল এই ধরনের একটি সংকেত প্রক্রিয়া করবে না।

    ট্র্যাপ কমান্ড স্ক্রিপ্টকে সংকেতগুলিতে প্রতিক্রিয়া জানাতে দেয়, অন্যথায় সেগুলি শেল দ্বারা তার অংশগ্রহণ ছাড়াই প্রক্রিয়া করা হয়।

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

    1 গণনা + 1)) সম্পন্ন
    এই উদাহরণে ব্যবহৃত ফাঁদ কমান্ডটি যখনই একটি SIGINT সংকেতের মুখোমুখি হয় তখন একটি পাঠ্য বার্তা প্রিন্ট করে, যা কীবোর্ডে Ctrl + C টিপে তৈরি করা যেতে পারে।


    সংকেত বাধা

    প্রতিবার যখন আপনি CTRL + C টিপুন, স্ক্রিপ্টটি শেলটি প্রস্থান করার পরিবর্তে ট্রেস কল করার সময় নির্দিষ্ট ইকো কমান্ডটি কার্যকর করে।

    ট্র্যাপ কমান্ডে কল করার সময় আপনি EXIT সিগন্যালের নাম ব্যবহার করে একটি স্ক্রিপ্ট থেকে প্রস্থান সংকেত ধরতে পারেন:

    #!/bin/bash ফাঁদ "echo Goodbye..." EXIT count=1 যখন [ $count -le 5 ] ইকো করবেন "Loop #$count" স্লিপ 1 count=$(($count + 1)) সম্পন্ন


    স্ক্রিপ্ট থেকে প্রস্থান সংকেত বাধা

    যখন একটি স্ক্রিপ্ট প্রস্থান করে, এটি একটি সাধারণ প্রস্থান হোক বা SIGINT সংকেত দ্বারা সৃষ্ট একটি প্রস্থান হোক, একটি হুক ট্রিগার হবে এবং শেলটি ইকো কমান্ডটি কার্যকর করবে।

    বাধাপ্রাপ্ত সংকেতগুলির পরিবর্তন এবং বাধা বাতিলকরণ

    স্ক্রিপ্ট দ্বারা আটকানো সংকেতগুলি পরিবর্তন করতে, আপনি নতুন পরামিতি সহ ট্র্যাপ কমান্ডটি চালাতে পারেন:

    1 ) সম্পন্ন হয়েছে ফাঁদ "প্রতিধ্বনি " আমি ফাঁদ পরিবর্তন করেছি!"" SIGINT count=1 যখন [ $count -le 5 ] do echo "সেকেন্ড লুপ #$count" স্লিপ 1 count=$(($count + 1)) সম্পন্ন


    সংকেত বাধা পরিবর্তন

    পরিবর্তনের পরে, সংকেতগুলি একটি নতুন উপায়ে প্রক্রিয়া করা হবে।

    ট্র্যাপিং সিগন্যালগুলিও বাতিল করা যেতে পারে, এর জন্য এটি ট্র্যাপ কমান্ড চালানোর জন্য যথেষ্ট, এটি একটি ডাবল ড্যাশ এবং সংকেতের নাম পাস করে:

    1 ) সম্পন্ন ফাঁদ -- SIGINT প্রতিধ্বনি "আমি এইমাত্র ফাঁদ সরিয়েছি" count=1 যখন [ $count -le 5 ] ইকো করুন "সেকেন্ড লুপ #$count" স্লিপ 1 count=$(($count + 1)) সম্পন্ন
    যদি স্ক্রিপ্টটি ট্র্যাপটি বাতিল করার আগে একটি সংকেত পায়, তবে এটি প্রকৃত ফাঁদ কমান্ডে উল্লিখিত হিসাবে এটি প্রক্রিয়া করবে। স্ক্রিপ্ট রান করা যাক:

    $ ./myscript
    এবং কীবোর্ডে CTRL+C চাপুন।


    ইন্টারসেপশন বাতিল হওয়ার আগেই সিগন্যাল আটকানো হয়েছে

    স্ক্রিপ্ট কার্যকর করার সময় প্রথম CTRL + C চাপানো হয়েছিল, যখন সিগন্যাল ইন্টারসেপশন কার্যকর ছিল, তাই স্ক্রিপ্টটি সিগন্যালে নির্ধারিত ইকো কমান্ডটি কার্যকর করে। এক্সিকিউশন ইন্টারসেপশন বাতিল করার কমান্ডে পৌঁছানোর পরে, CTRL + C কমান্ড স্বাভাবিক উপায়ে কাজ করে, স্ক্রিপ্টটি বন্ধ করে দেয়।

    পটভূমিতে কমান্ড লাইন স্ক্রিপ্ট চালানো হচ্ছে

    কখনও কখনও ব্যাশ স্ক্রিপ্ট একটি টাস্ক সম্পূর্ণ করতে অনেক সময় নেয়। যাইহোক, স্ক্রিপ্ট সম্পূর্ণ হওয়ার জন্য অপেক্ষা না করে আপনাকে কমান্ড লাইনে স্বাভাবিকভাবে কাজ করতে সক্ষম হতে হতে পারে। এটি বাস্তবায়ন করা এত কঠিন নয়।

    আপনি যদি ps কমান্ড দ্বারা প্রদর্শিত প্রসেসগুলির তালিকা দেখে থাকেন, তাহলে আপনি হয়তো এমন প্রসেসগুলি লক্ষ্য করেছেন যেগুলি ব্যাকগ্রাউন্ডে চলে এবং একটি টার্মিনালে আবদ্ধ নয়।
    আসুন নিম্নলিখিত স্ক্রিপ্ট লিখি:

    #!/bin/bash count=1 যখন [ $count -le 10 ] ঘুমান 1 গণনা=$(($count + 1)) সম্পন্ন
    নামের পরে একটি ampersand (&) যোগ করে এটি চালান:

    $ ./myscript এবং
    এটি একটি পটভূমি প্রক্রিয়া হিসাবে চালানোর কারণ হবে.


    ব্যাকগ্রাউন্ডে একটি স্ক্রিপ্ট চালানো হচ্ছে

    স্ক্রিপ্টটি একটি ব্যাকগ্রাউন্ড প্রক্রিয়ায় চালানো হবে, এর শনাক্তকারী টার্মিনালে প্রদর্শিত হবে এবং যখন এটি কার্যকর করা হবে, আপনি এটি সম্পর্কে একটি বার্তা দেখতে পাবেন।

    উল্লেখ্য যে যদিও স্ক্রিপ্টটি ব্যাকগ্রাউন্ডে চলছে, এটি STDOUT এবং STDERR এ বার্তা প্রিন্ট করার জন্য টার্মিনাল ব্যবহার করে চলেছে, যার অর্থ হল এর আউটপুট পাঠ্য বা ত্রুটি বার্তাগুলি টার্মিনালে দেখা যাবে।


    প্রক্রিয়ার তালিকা

    এই পদ্ধতির সাহায্যে, আপনি যদি টার্মিনাল থেকে প্রস্থান করেন, পটভূমিতে চলমান স্ক্রিপ্টটিও প্রস্থান করবে।

    আপনি যদি টার্মিনাল বন্ধ করার পরেও স্ক্রিপ্টটি চালিয়ে যেতে চান?

    টার্মিনাল বন্ধ থাকাকালীন প্রস্থান করা হয় না এমন স্ক্রিপ্টগুলি চালানো

    স্ক্রিপ্টগুলি টার্মিনাল সেশন ছেড়ে যাওয়ার পরেও ব্যাকগ্রাউন্ড প্রসেসে কার্যকর করা যেতে পারে। এটি করার জন্য, আপনি nohup কমান্ড ব্যবহার করতে পারেন। এই কমান্ডটি আপনাকে প্রসেসে পাঠানো SIGHUP সংকেত ব্লক করে একটি প্রোগ্রাম চালানোর অনুমতি দেয়। ফলস্বরূপ, যে টার্মিনালটি চালু করা হয়েছিল সেখান থেকে প্রস্থান করার সময়ও প্রক্রিয়াটি কার্যকর করা হবে।

    আমাদের স্ক্রিপ্ট চালানোর সময় এই কৌশলটি প্রয়োগ করা যাক:

    Nohup ./myscript &
    এটি টার্মিনালে আউটপুট হবে।


    noup কমান্ড

    nohup কমান্ড টার্মিনাল থেকে একটি প্রক্রিয়াকে আনবাইন্ড করে। এর মানে হল যে প্রক্রিয়াটি STDOUT এবং STDERR এর রেফারেন্স হারাবে। স্ক্রিপ্ট দ্বারা ডেটা আউটপুট না হারানোর জন্য, nohup স্বয়ংক্রিয়ভাবে STDOUT এবং STDERR-এ আসা বার্তাগুলিকে nohup.out ফাইলে পুনঃনির্দেশ করে৷

    মনে রাখবেন যে একই ডিরেক্টরি থেকে একাধিক স্ক্রিপ্ট চালানোর সময়, তাদের আউটপুট একটি nohup.out ফাইলে শেষ হবে।

    চাকরি দেখা

    jobs কমান্ড আপনাকে শেলে চলমান বর্তমান কাজগুলি দেখতে দেয়। আসুন নিম্নলিখিত স্ক্রিপ্ট লিখি:

    #!/bin/bash count=1 যখন [ $count -le 10 ] ইকো করে "Loop #$count" স্লিপ 10 count=$(($count + 1)) সম্পন্ন
    চলুন এটি চালানো যাক:

    $ ./myscript
    এবং অস্থায়ীভাবে CTRL + Z কী সমন্বয় বন্ধ করুন।


    একটি স্ক্রিপ্ট চলছে এবং বিরতি দেওয়া হচ্ছে

    স্ক্রিপ্টের আউটপুটকে একটি ফাইলে পুনঃনির্দেশ করার সময় পটভূমিতে একই স্ক্রিপ্টটি চালান যাতে এটি স্ক্রিনে কিছু প্রদর্শন না করে:

    $ ./myscript > outfile &
    যদি আমরা এখন জবস কমান্ড চালাই, আমরা পজ করা স্ক্রিপ্ট এবং ব্যাকগ্রাউন্ডে চলমান স্ক্রিপ্ট উভয়েরই তথ্য দেখতে পাব।


    স্ক্রিপ্ট সম্পর্কে তথ্য পাওয়া

    জবস কমান্ডে কল করার সময় -l বিকল্পটি নির্দেশ করে যে আমাদের প্রক্রিয়া আইডি সম্পর্কে তথ্য প্রয়োজন।

    স্থগিত কাজ পুনরায় চালু করা হচ্ছে

    পটভূমিতে স্ক্রিপ্টটি পুনরায় চালু করার জন্য, আপনি bg কমান্ড ব্যবহার করতে পারেন।

    স্ক্রিপ্ট রান করা যাক:

    $ ./myscript
    আসুন CTRL + Z টিপুন, যা সাময়িকভাবে এটি কার্যকর করা বন্ধ করবে। আসুন নিম্নলিখিত কমান্ডটি কার্যকর করি:

    $bg


    bg কমান্ড

    স্ক্রিপ্ট এখন ব্যাকগ্রাউন্ডে চলছে।

    আপনার একাধিক স্থগিত কাজ থাকলে, আপনি একটি নির্দিষ্ট কাজ পুনরায় চালু করতে bg কমান্ডে একটি কাজের নম্বর পাঠাতে পারেন।

    স্বাভাবিক মোডে কাজ পুনরায় আরম্ভ করতে, fg কমান্ড ব্যবহার করুন:

    সময়সূচী স্ক্রিপ্ট চালানোর জন্য

    লিনাক্স একটি নির্দিষ্ট সময়ে ব্যাশ স্ক্রিপ্ট চালানোর কয়েকটি উপায় প্রদান করে। এগুলি হল এট কমান্ড এবং ক্রন কাজের সময়সূচী।

    at কমান্ড এই মত দেখায়:

    [-f ফাইলের নাম] সময়ে
    এই কমান্ডটি অনেক সময় বিন্যাস সনাক্ত করে।

    • স্ট্যান্ডার্ড, ঘন্টা এবং মিনিট নির্দেশ করে, উদাহরণস্বরূপ - 10:15।
    • AM/PM সূচক ব্যবহার করা, দুপুরের আগে বা পরে, উদাহরণস্বরূপ - 10:15PM।
    • এখন, দুপুর, মধ্যরাতের মতো বিশেষ নাম ব্যবহার করা।
    একটি কাজের জন্য শুরুর সময় নির্দিষ্ট করতে সক্ষম হওয়ার পাশাপাশি, আপনি এটির সমর্থিত ফর্ম্যাটগুলির একটি ব্যবহার করে at কমান্ডে একটি তারিখ পাস করতে পারেন।
    • একটি আদর্শ তারিখ বিন্যাস যা MMDDYY , MM/DD/YY , বা DD.MM.YY প্যাটার্ন ব্যবহার করে।
    • তারিখের একটি পাঠ্য উপস্থাপনা, যেমন 4 জুলাই বা 25 ডিসেম্বর, বছরের সাথে বা ছাড়া।
    • এখন + 25 মিনিটের মতো একটি এন্ট্রি।
    • আগামীকাল 10:15PM এর মত একটি এন্ট্রি।
    • 10:15 + 7 দিনের মতো রেকর্ডিং।
    আমরা এই বিষয়ে গভীরভাবে আলোচনা করব না, কমান্ডের জন্য একটি সাধারণ ব্যবহারের ক্ষেত্রে বিবেচনা করুন:

    $ at -f ./myscript এখন


    at কমান্ড ব্যবহার করে কাজের সময়সূচী

    -এম সুইচটি যখন ইমেলের মাধ্যমে স্ক্রিপ্টের আউটপুট পাঠাতে ব্যবহার করা হয়, যদি সিস্টেমটি এটি করার জন্য কনফিগার করা থাকে। যদি একটি ইমেল পাঠানো সম্ভব না হয়, এই সুইচটি কেবল আউটপুটকে দমন করবে।

    মুলতুবি থাকা কাজের তালিকা করতে আপনি atq কমান্ড ব্যবহার করতে পারেন:


    মুলতুবি চাকরির তালিকা

    মুলতুবি কাজ মুছে ফেলা হচ্ছে

    আপনি একটি মুলতুবি কাজ সরাতে atrm কমান্ড ব্যবহার করতে পারেন। যখন এটি কল করা হয়, টাস্ক নম্বর নির্দেশিত হয়:

    $atrm 18


    একটি কাজ মুছে ফেলা

    একটি সময়সূচী স্ক্রিপ্ট চলমান

    অ্যাট কমান্ড ব্যবহার করে একবার চালানোর জন্য স্ক্রিপ্ট নির্ধারণ করা অনেক পরিস্থিতিতে জীবনকে সহজ করে তুলতে পারে। কিন্তু আপনি যদি স্ক্রিপ্টটি প্রতিদিন একই সময়ে বা সপ্তাহে একবার বা মাসে একবার চালাতে চান?

    লিনাক্সের একটি ক্রনট্যাব ইউটিলিটি রয়েছে যা আপনাকে স্ক্রিপ্টগুলি নিয়মিত চালানোর জন্য শিডিউল করতে দেয়।

    Crontab ব্যাকগ্রাউন্ডে চলে এবং তথাকথিত ক্রন টেবিলের ডেটার উপর ভিত্তি করে নির্ধারিত কাজ চালায়।

    ক্রন কাজের বিদ্যমান সারণী দেখতে, নিম্নলিখিত কমান্ডটি ব্যবহার করুন:

    $ crontab -l
    একটি স্ক্রিপ্ট চালানোর সময় নির্ধারণ করার সময়, যখন কাজটি চালানোর প্রয়োজন হয় তখন এই বিন্যাসে ক্রন্টাব গ্রহণ করে:

    মিনিট, ঘন্টা, মাসের দিন, মাস, সপ্তাহের দিন।
    উদাহরণস্বরূপ, আপনি যদি কমান্ড নামে একটি নির্দিষ্ট স্ক্রিপ্ট প্রতিদিন 10:30 এ কার্যকর করতে চান তবে এটি টাস্ক টেবিলের নিম্নলিখিত এন্ট্রির সাথে মিলে যাবে:

    30 10 * * * কমান্ড
    এখানে, মাস, মাস এবং সপ্তাহের দিন নির্দিষ্ট করে ক্ষেত্রগুলির জন্য ব্যবহৃত ওয়াইল্ডকার্ড "*" নির্দেশ করে যে ক্রনকে প্রতি মাসের প্রতি দিন 10:30 এ কমান্ডটি কার্যকর করা উচিত।

    উদাহরণস্বরূপ, যদি আপনি স্ক্রিপ্টটি প্রতি সোমবার বিকাল 4:30PM-এ চালাতে চান, তাহলে আপনাকে এইভাবে কাজের টেবিলে একটি এন্ট্রি তৈরি করতে হবে:

    30 16 * * 1 কমান্ড
    সপ্তাহের দিনগুলি 0 থেকে শুরু করে সংখ্যা করা হয়, 0 মানে রবিবার, 6 মানে শনিবার৷ এখানে আরেকটি উদাহরণ। এখানে প্রতি মাসের প্রথম দিনে দুপুর ১২টায় কমান্ড কার্যকর করা হবে।

    00 12 1 * * কমান্ড
    মাসগুলি 1 থেকে শুরু করে গণনা করা হয়।
    টেবিলে একটি এন্ট্রি যোগ করার জন্য, আপনাকে -e সুইচ দিয়ে ক্রন্টাব কল করতে হবে:

    ক্রন্টাব -ই
    তারপর আপনি সময়সূচী তৈরি করার জন্য কমান্ড লিখতে পারেন:

    30 10 * * * /home/likegeeks/Desktop/myscript
    এই কমান্ডের জন্য ধন্যবাদ, স্ক্রিপ্টটি প্রতিদিন 10:30 এ কল করা হবে। আপনি যদি "রিসোর্স সাময়িকভাবে অনুপলব্ধ" ত্রুটির সম্মুখীন হন, তাহলে রুট হিসাবে নিম্নলিখিত কমান্ডটি চালান:

    $rm -f /var/run/crond.pid
    ক্রোন ব্যবহার করে স্ক্রিপ্টগুলির পর্যায়ক্রমিক লঞ্চ সংগঠিত করা কয়েকটি বিশেষ ডিরেক্টরি ব্যবহার করে আরও সহজ হতে পারে:

    /etc/cron.hourly /etc/cron.daily /etc/cron.weekly /etc/cron.monthly
    তাদের মধ্যে একটিতে একটি স্ক্রিপ্ট ফাইল রাখলে এটি যথাক্রমে ঘণ্টায়, দৈনিক, সাপ্তাহিক বা মাসিকভাবে চালানো হবে।

    লগইন এবং শেল স্টার্টআপে স্ক্রিপ্ট চালানো হচ্ছে

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

    $HOME/.bash_profile $HOME/.bash_login $HOME/.profile
    লগইনে একটি স্ক্রিপ্ট চালানোর জন্য, .bash_profile ফাইলে স্ক্রিপ্ট কলটি রাখুন।

    একটি টার্মিনাল খোলার সময় স্ক্রিপ্ট চালানো সম্পর্কে কি? .bashrc ফাইল এটি সংগঠিত করতে সাহায্য করবে।

    ফলাফল

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

    প্রিয় পাঠক! কমান্ড-লাইন স্ক্রিপ্ট চালানোর জন্য আপনি কি সময়সূচী সরঞ্জাম ব্যবহার করেন? যদি হ্যাঁ, তাদের সম্পর্কে আমাদের বলুন.

    পটভূমি প্রক্রিয়া শুরু এবং প্রক্রিয়াকরণ: চাকরি ব্যবস্থাপনা

    আপনি কমান্ডটি প্রবেশ করার পরে লক্ষ্য করেছেন যেটার্মিনাল "ই, আপনাকে সাধারণত আগে এটি সম্পূর্ণ হওয়ার জন্য অপেক্ষা করতে হবে৷শেল আপনার নিয়ন্ত্রণ ফিরিয়ে দেবে। এর মানে হল আপনি কমান্ডটি চালান করেছেনঅগ্রাধিকার মোড . যাইহোক, এমন কিছু সময় আছে যখন এটি কাম্য নয়।

    ধরা যাক, উদাহরণ স্বরূপ, আপনি একটি বড় ডিরেক্টরিকে অন্যটিতে বারবার অনুলিপি করার সিদ্ধান্ত নেন। আপনি ত্রুটিগুলি উপেক্ষা করতেও বেছে নিয়েছেন, তাই আপনি ত্রুটি চ্যানেলটিকে এতে পুনঃনির্দেশ করেছেন৷/dev/null:

    cp -R চিত্র/ /shared/ 2>/dev/null

    এই ধরনের কমান্ড সম্পূর্ণ হতে কয়েক মিনিট সময় লাগতে পারে। আপনার কাছে দুটি সমাধান রয়েছে: প্রথমটি নৃশংস, যার অর্থ আদেশটি বন্ধ করা (হত্যা করা) এবং তারপরে এটি পুনরায় কার্যকর করা, তবে আরও উপযুক্ত সময়ে। এটি করতে, ক্লিক করুন ctrl+c : এটি প্রক্রিয়াটি শেষ করবে এবং আপনাকে প্রম্পটে ফিরিয়ে নিয়ে যাবে। কিন্তু অপেক্ষা করুন, এখনও এটি করবেন না! পড়তে.

    ধরা যাক আপনি অন্য কিছু করার সময় চালানোর জন্য একটি কমান্ড চান। সমাধান হল এ প্রক্রিয়া শুরু করাপটভূমি . এটি করতে, ক্লিক করুন ctrl+z প্রক্রিয়া থামাতে:

    এই ক্ষেত্রে, প্রক্রিয়াটি তার কাজ চালিয়ে যাবে, তবে ইতিমধ্যে একটি পটভূমি কাজ হিসাবে, সাইন দ্বারা নির্দেশিত হিসাবে & (অ্যাম্পারস্যান্ড) লাইনের শেষে। তারপর আপনি প্রম্পটে ফিরে আসবেন এবং কাজ চালিয়ে যেতে পারবেন। একটি প্রসেস যা ব্যাকগ্রাউন্ড টাস্ক হিসেবে বা ব্যাকগ্রাউন্ডে চলে তাকে ব্যাকগ্রাউন্ড প্রসেস বলে।টাস্ক .

    অবশ্যই, আপনি চিহ্নটি যুক্ত করে পটভূমির কাজ হিসাবে অবিলম্বে প্রক্রিয়াগুলি শুরু করতে পারেন & কমান্ডের শেষে। উদাহরণস্বরূপ, আপনি টাইপ করে ব্যাকগ্রাউন্ডে একটি ডিরেক্টরি অনুলিপি করতে কমান্ড চালাতে পারেন:

    cp -R ছবি/ /shared/ 2>/dev/null &

    আপনি যদি চান, আপনি এই প্রক্রিয়াটিকে অগ্রভাগে পুনরুদ্ধার করতে পারেন এবং টাইপ করে এটি সম্পূর্ণ হওয়ার জন্য অপেক্ষা করতে পারেনfg (ফোরগ্রাউন্ড - অগ্রাধিকার)। এটিকে ব্যাকগ্রাউন্ডে ফিরিয়ে আনতে, নিম্নলিখিত ক্রমটি লিখুন ctrl+z , bg .

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