ব্যাকগ্রাউন্ড প্রক্রিয়াগুলি মাঝে মাঝে স্বতঃস্ফূর্তভাবে কেন বন্ধ হয়?


10

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

আমি bgআবার যদি একই সমস্যা পুনরাবৃত্তি।

এটি ঠিক করার একমাত্র উপায় বলে মনে হচ্ছে fg

কেন এমন হয়?


আপনার আউটপুট কোথায় যাচ্ছে? আপনি কোথাও একটি বাফার পূরণ করছেন?
পল টমবলিন

উত্তর:


12

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

এটিকে অগ্রভাগে নিয়ে আসা প্রক্রিয়াটি পুনরায় শুরু করে এবং এটি আপনার টার্মিনাল থেকে পড়তে দেয়।

ডেমো:

$ cat t.sh
#! /bin/sh
sleep 1
read dummy
$ ./t.sh &
[1] 3364
$ 
[1]+  Stopped                 ./t.sh
$ ps aux|grep t.sh
me  3364  0.0  0.0  11268  1200 pts/0    T    17:04   0:00 /bin/sh ./t.sh

এটি এড়ানোর অন্যতম উপায় ব্যবহার করা nohup, তবে প্রোগ্রামটি যদি এর ইনপুট স্ট্রিমটিকে পুনঃনির্দেশিত না করে তা মোকাবেলা না করে তবে এটি অদ্ভুত প্রভাব ফেলতে পারে /dev/null

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