স্থগিতাদেশ (কন্ট্রোল + জেড) ছাড়াই পটভূমিতে অগ্রভাগ প্রক্রিয়া স্থাপন করা সম্ভব?


11

আমি একটি অ্যাপ্লিকেশন চালাচ্ছি যা টিসিপি এবং ইউডিপি প্যাকেটগুলি গ্রহণ করে এবং তাই স্থগিত করা যায় না। আমি ব্যাকগ্রাউন্ড মোড ব্যবহার করে বিভিন্ন যুক্তি সহ অন্তত একই অ্যাপ্লিকেশনটির 3 টি প্রক্রিয়া চালিয়েছি &। যখন আমি কেবল করেছি $fg, তিনটি প্রক্রিয়াই অগ্রভাগে এসেছিল। এখন আমি তাদের আবার ব্যাকগ্রাউন্ডে পাঠাতে চাই তবে বিনা ঝুলিতে। আমি এটা কিভাবে করবো?


একটি চলমান প্রক্রিয়াটিকে নতুন স্ক্রিনের উদাহরণে স্থানান্তরিত করার বিষয়ে একটি সার্ভারফল্টের বিষয় রয়েছে -> সার্ভারফল্ট
অ্যালান বারবার

উত্তর:


10

প্রথম জিনিসগুলি: অগ্রভাগে কেবল একটি প্রক্রিয়া থাকতে পারে , তিনটিই নয়। fgসাম্প্রতিক প্রক্রিয়াটিকে অগ্রভাগে আনে। প্রক্রিয়াটি Ctrl+ তৈরি করার জন্য z, bgপ্রশ্নটিতে অ্যাপ্লিকেশনটিকে "বিঘ্নিত" না করার জন্য দ্রুত টাইপ করুন (নোট করুন যে প্রক্রিয়া সূচিকারী যেভাবে যাইহোক প্রতি সেকেন্ডে অনেক বার এটি করবে), অগ্রভাগে প্রক্রিয়াটির পিআইডি সন্ধান করুন, তারপরে দ্বিতীয় টার্মিনালে / এসএসএইচ অধিবেশন, ব্যবহার

kill -SIGSTOP »pid« ; kill -SIGCONT »pid«

আপনার আসল টার্মিনালটি বলবে stopped, তবে যেহেতু আপনি এখনই প্রেরণ করেছেন SIGCONT, প্রক্রিয়াটি পটভূমিতে চলতে থাকবে।


1
@ স্টেফেন: আপনার সমাধানটি নিশ্চিত। এটি আমার প্রক্রিয়াগুলিকে কোনওভাবেই ক্ষতিগ্রস্থ করবে না, ধরে নিয়ে আমরা যদি প্রক্রিয়া স্থগিত করি তবে প্রতিষ্ঠিত সকেট সংযোগগুলি ভেঙে যায় না (শিডিয়ুলার স্যুইচিং সকেট সংযোগটি সংযোগ বিচ্ছিন্ন করে না এটি নিশ্চিত)) এটি ডিবাগ করে আপডেট করবে। অনেক ধন্যবাদ. যদি
rahul.deshmukhpatil

2

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

$ ncat -kl -p 10111 &
[1] 13404
$ ncat -kl -p 10222 &
[2] 13405
$ ncat -kl -p 10333 &
[3] 13406
$ jobs -l
[1]  13404 Running                 ncat -kl -p 10111 &
[2]- 13405 Running                 ncat -kl -p 10222 &
[3]+ 13406 Running                 ncat -kl -p 10333 &

আমি এর ncatজন্য তিনটি পটভূমি শোনার প্রক্রিয়া শুরু করেছি । আপনি চাকরির স্থিতির জন্য "সম্পন্ন" বা "থামানো "ও দেখতে পারেন।

আপনি কার্যকরভাবে পটভূমি ব্যবহার করে একটি বিভিন্ন শেল থেকে একটি ফোরগ্রাউন্ড কাজ করতে স্টিফান Seidel এর SIGSTOP / SIGCONT পদ্ধতি (যদিও প্রকৃত সংকেত পাঠানো সঙ্গে একটি শেল দ্বারা Ctrl- ZSIGTSTP, হয় সংকেত কাজ করা উচিত)।

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

শেল নিয়ন্ত্রণে একটি চলমান প্রসেস অথবা পাইপলাইন যখন আপনি ব্যবহার, একটি "চাকরি" হিসাবে উল্লেখ করা হয় bgবা fgতোমাকে করছি পরোক্ষভাবে সঙ্গে এক আমার ক্ষেত্রে - সবচেয়ে সাম্প্রতিক কাজের উল্লেখ +উপরে হবে। এই চাকরিগুলিকে (অন্যান্য জিনিসের মধ্যে) স্পষ্টভাবে % 1% 2 বা% 3 (এতে সংখ্যা ) হিসাবে উল্লেখ করা যেতে পারে []

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

  echo foo > /dev/tcp/127.0.0.1/10111

এটি প্রোগ্রাম কীভাবে টার্মিনালটি পরিচালনা করে, ncatলেখার জন্য সূক্ষ্মভাবে কাজ করে তার উপর নির্ভর করে । পড়ার জন্য যদিও প্রোগ্রামগুলি কার্যকর হওয়া বন্ধ করে দেয় এবং আপনি একটি "থামানো" বার্তাটি দেখতে পাবেন। শেলটি প্রক্রিয়াগুলি শুরু করবে এবং প্রস্থান করবে বা একটি সাইনটিন সিগন্যাল গ্রহণ করবে ( nohupএটি এইভাবে একটি উপায় disown)

আপনি একটি নির্দিষ্ট থামানো কাজের সাথে ব্যাকগ্রাউন্ড করতে পারেন

$ bg %3

(আমার ক্ষেত্রে আমি ত্রুটিটি পাব bash: bg: job 3 already in background)

অন্যথায় যদি কোনও প্রক্রিয়া সম্মুখভাগে থাকে, যদি না প্রোগ্রামটি SIGTSTP ধরে এবং বিশেষ কিছু না করে, দ্রুত Ctrl- Zএবং - এ সমস্যা হওয়ার সম্ভাবনা নেই bg। এই ক্ষেত্রে নেটওয়ার্ক প্রোগ্রামগুলির জন্য বিশেষ কিছু নেই, আগত সংযোগ / ডেটা কার্নেল দ্বারা বাফার হবে (এক বিন্দু পর্যন্ত)। যদিও একটি স্ট্রিমিং সংযোগে একটি পর্যবেক্ষণযোগ্য বিরতি থাকতে পারে।

আরও তথ্যের জন্য ব্যাশ ম্যান পৃষ্ঠার " জব কনট্রোল " বিভাগটি দেখুন।


1

আপনার এটি করার সহজতম উপায় হ'ল স্ক্রিন প্রোগ্রামটি ব্যবহার করা । আপনি ভার্চুয়াল টার্মিনালের মধ্যে আপনার অ্যাপ্লিকেশন শুরু করতে পারেন, তারপরে Ctrl + A, D দিয়ে স্ক্রিনটি প্রস্থান করুন। আপনি যদি আপনার সেশনটি আবার শুরু করতে চান তবে আপনার টাইপ screen -x। আপনার যদি একাধিক প্রক্রিয়া থাকে তবে আপনাকে পুনরায় সংযুক্ত করতে পর্দার একটি তালিকা উপস্থিত হবে। আরও তথ্যের জন্য দয়া করে স্ক্রিন ম্যান পৃষ্ঠাটি পড়ুন


5
আমি মনে করি তিনি "সত্যের পরে" একটি সমাধান খুঁজছেন, অর্থাৎ প্রক্রিয়াগুলি এখনই চলছে।
স্টিফান সিডেল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.