অন্য শেল সেশন থেকে প্রক্রিয়া প্রস্থান স্থিতি কিভাবে পাবেন?


7

ধরুন আমি উদাহরণস্বরূপ একটি শেল সেশনে একটি কমান্ড চালাচ্ছি bash -c 'apt-get update && apt-get upgrade'। 5 মিনিট পরে আমি একটি জলখাবারের জন্য বাইরে যাবার সিদ্ধান্ত নিয়েছি এবং বুঝতে পারি যে প্রস্থানটি সাফল্য বা ব্যর্থতা কিনা সে জন্য আমি কোনও প্রকারের বিজ্ঞপ্তি ব্যবস্থা যুক্ত করতে ভুলে গিয়েছি ।

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

অন্য কথায়,

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

যখন আমি টার্মিনাল বিতে কিছু কমান্ড কার্যকর করি

টার্মিনাল এ প্রক্রিয়াটি প্রস্থান স্থিতি 0 বা প্রস্থান স্থিতি> 1 সহ শেষ হয় কিনা তা আমার জানতে সক্ষম হওয়া উচিত।


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

@ বাইটকম্যান্ডার সঠিক এটি অগ্রভাগের কাজ।
সের্গেই কলডিয়াজনি

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

নিবন্ধন করুন টার্মিনাল এ প্রস্তুতির দরকার নেই, টার্মিনাল বি থেকে সবকিছু করুন এবং বিশ্বাস করুন, এটি সম্ভব it's
সের্গেই কোলোডিয়াজনি

1
ঠিক আছে, এটি স্থায়ী প্রস্তুতি হবে (একবার .bashrc সম্পাদনা), তবে ঠিক আছে। উত্তরটি পড়ার অপেক্ষায় রইলাম, যদি কোনও সন্ধান পান।
বাইট কমান্ডার

উত্তর:


8

straceনিম্নলিখিত হিসাবে ব্যবহার করুন :

sudo strace -e trace=none -e signal=none -q -p $PID

সিস্টেম কল বা সিগন্যাল উভয়ই এখানে আগ্রহী নয়, তাই আমরা straceতাদের -eএড়াতে এবং তাদের সাথে একটি স্থিতির বার্তাটি সুপারিশ করতে বলি -qstraceপিআইডি সহ প্রক্রিয়া সংযুক্ত করে $PID, এটি স্বাভাবিকভাবে প্রস্থান করার জন্য অপেক্ষা করে এবং এর প্রস্থান স্থিতিটি এভাবে বের করে দেয়:

+++ exited with 0 +++

যে ifকোনও প্রকারের বিজ্ঞপ্তি কল করার জন্য একটি সহজ অভিব্যক্তি হতে পারে:

if sudo strace -e trace=none -e signal=none -q -p $PID |& grep -q ' 0 '; then
  echo yeah
else
  echo nope
fi

উদাহরণ রান

# in terminal 1
$ (echo $BASHPID;sleep 10;true)
8807
# in terminal 2
$ if sudo strace -e{trace,signal}=none -qp8807|&grep -q ' 0 ';then echo yeah;else echo nope;fi
yeah

# in terminal 1
$ (echo $BASHPID;sleep 10;false)
12285
# in terminal 2
$ if sudo strace -e{trace,signal}=none -qp12285|&grep -q ' 0 ';then echo yeah;else echo nope;fi
nope

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

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