প্রক্রিয়াটি কীভাবে চেক করবেন তা ইতিমধ্যে চলছে কি না


32

আমি ইতিমধ্যে চলমান বা না মধ্যে বিশেষ প্রক্রিয়া পরীক্ষা করতে চান।

আমি এই প্রশ্নোত্তর রেফারেন্স করেছি ।

তবে আমি কোনও নির্দিষ্ট সমাধান পাইনি। নিম্নলিখিতটি যে আমি চেষ্টা করেছি তা নীচে দেওয়া হয়েছে: আমি abc.shফাইলটি তৈরি করেছি এবং এই স্ক্রিপ্টটি ব্যাকগ্রাউন্ডে চালিত করেছি, যেমন sh abc.sh &

এখন এই ফাইলটি পটভূমিতে চলছে এবং আমি ps aux | grep "abc"আদেশটি ফায়ার করছি ।

নিম্নলিখিত এই আদেশের ফলাফল:

prakash     3594  0.0  0.0   4388   820 pts/0    S+   16:44   0:00 grep --color=auto abc

এর পরে আমি abc.shচলমান স্ক্রিপ্টটি বন্ধ করি এবং একই কমান্ড ps aux | grep "abc"কমান্ডটি ফায়ার করি ।

তবে আমি একই আউটপুট পাচ্ছি:

prakash     3594  0.0  0.0   4388   820 pts/0    S+   16:44   0:00 grep --color=auto abc

প্রক্রিয়াটি চলছে কিনা তা খুঁজে পাওয়ার অন্য কোনও উপায় আছে কি না?

উত্তর:


41

প্রতিটি প্রক্রিয়া আউটপুট তালিকাভুক্ত করা হবে ps aux; দৌড়, ঘুমানো, জম্বি বা বন্ধ হোক না কেন।

তবে আপনার ক্ষেত্রে, যেহেতু আপনি প্রক্রিয়াটি ব্যবহার করে চালিয়েছেন sh abc.sh, shতা হ'ল অ্যাপ্লিকেশন (শেল) যা চলছে এবং না abc.sh। সুতরাং, ps auxপ্রক্রিয়াটি ধারণ করবে না abc.shযার কারণে grepকোনও ফলাফল পাওয়া যায়নি।

সুতরাং, আপনার সঠিকভাবে এটি ব্যবহার করা উচিত ছিল:

ps aux | grep sh

এটি আপনাকে অন্য প্রক্রিয়াও ফিরিয়ে দিতে পারে যা shতাদের আউটপুটটিতে যে কোনও জায়গায় স্ট্রিং নিয়ে চলছে ps aux

আপনার মনে রাখা উচিত যে যখন আউটপুটটি ps auxতার STATমতো হয় তখন প্রক্রিয়াটি "চলমান" হবে R। যদি এটি ব্যতীত অন্য কিছু হয় তবে চলমান প্রক্রিয়াগুলি পরীক্ষা করার জন্য আপনি কমান্ডকে বরখাস্ত করেছেন এমন পরিস্থিতিতে এটি চলমান নয়। পিএস-এর জন্য ম্যান পেজে বিভিন্ন প্রক্রিয়া অবস্থা পাওয়া যাবে:

D    uninterruptible sleep (usually IO)
R    running or runnable (on run queue)
S    interruptible sleep (waiting for an event to complete)
T    stopped, either by a job control signal or because it is being traced
W    paging (not valid since the 2.6.xx kernel)
X    dead (should never be seen)
Z    defunct ("zombie") process, terminated but not reaped by its parent

topপ্রক্রিয়াটি চলমান বা ঘুমন্ত এবং এটি কী পরিমাণ সিপিইউ, র‌্যাম ব্যবহার করছে তা পরীক্ষা করার জন্য আপনি কমান্ডটি চালাতে পারেন। (এটি আবার আপনার প্রক্রিয়া হিসাবে তালিকাবদ্ধ করবে sh)।

তবে, আপনি যদি নিজের প্রক্রিয়াটিকে তালিকাভুক্ত করতে চান abc.shতবে আপনি যে স্ক্রিপ্টটি চালাচ্ছেন তার প্রথম লাইন থাকা উচিত:

#!/bin/sh

যাতে শেলটি জানতে পারে যে স্ক্রিপ্টটি চালাতে কোন অ্যাপ্লিকেশনটি ব্যবহার করতে হবে (এই ক্ষেত্রে sh, এটি #!/bin/bashব্যাশের জন্য পরিবর্তন করুন ) এবং তারপরে প্রক্রিয়াটির জন্য এক্সিকিউটেবল অনুমতি সরবরাহ করুন:

chmod +x /path/to/abc.sh

ফাইলের /path/to/অবস্থানের সাথে প্রতিস্থাপন abc.shএবং তারপরে abc.shব্যবহার করে চালানো

/path/to/abc.sh

আবার ফাইলের /path/to/অবস্থানের পরিবর্তে abc.sh


2
একটি দ্রুত প্রশ্ন। স্ট্যাট S+মানে কী
প্রকাশ ভি হলকার

আপনি ps aux | grep filenameকমান্ড আউটপুট মাধ্যমে চলমান প্রক্রিয়া এবং চলমান প্রক্রিয়া মধ্যে পার্থক্য খুঁজে পেতে পারেন ।
অবিনাশ রাজ

@ টেকগুরু: এর অর্থ হল যে প্রক্রিয়াটি অগ্রভাগে ঘুমাচ্ছে, আরও জন্য পিএসের ম্যানুয়াল পৃষ্ঠাটি দেখুন।
জবিন

@ অবিনাশরাজ: হ্যাঁ, অবশ্যই আপনি পারবেন।
জবিন

আমি একটি ত্রুটি পেয়েছি: ত্রুটি, এটি করুন: মাউন্ট -t proc proc / proc
IgorGanapolsky

7

আমার সমস্যাটি grepহ'ল এটি একটি সম্পূর্ণ লাইন পার্সার। আপনার উদাহরণস্বরূপ, আপনি "এবিসি" অনুসন্ধান করছেন কিন্তু এটি উদাহরণটি পিছনে টানছে grep(এটি "এবিসি" সন্ধান করছে)। কিছুটা বিজ্ঞপ্তি। আপনি এটি ফিল্টার করতে পারেন তবে আমি এটি কিছুটা বিকৃতভাবে পাই।

আমি awkএকটু প্যানাচের জন্য চালু হবে ।

ps aux | awk '$12=="abc.sh"'

awkহোয়াইটস্পেসের ভিত্তিতে ক্ষেত্রগুলিতে লাইনগুলি বিভক্ত করে (ডিফল্টরূপে)। ক্ষেত্রগুলি $ 11 + হ'ল কমান্ড কলাম (গুলি) সুতরাং কমান্ডটি যদি "sh abc.sh ..." হয় তবে $11তা হবে shএবং $12হবে abc.sh

আপনি যদি বাশ &&এবং ||অপারেটরগুলির সাথে আউটপুট বা চেইনটি নিয়ন্ত্রণ করতে চান তবে আপনি এটি করতে পারেন তবে আপনাকে আরও একটু চালাক হতে হবে। কিছু না পাওয়া গেলে grepস্থিতি কোড 1 (প্রযুক্তিগত ব্যর্থ, ট্রিগার ||) দিয়ে awkপ্রস্থান করা হবে তবে সর্বদা কোড 0 থেকে বেরিয়ে আসবে We

ps aux | awk '$12=="abc.sh" {exit 0} END{exit 1}' && echo running || echo not running

অবশ্যই যদি আপনি কেবল স্ক্রিনে আউটপুট লেখার বিষয়ে চিন্তা করেন তবে আপনি এটি সব করতে পারেন awk:

ps aux | awk '$12=="abc.sh" {print "running"; exit} END{print "not running"}'

4

বর্তমান বাশ সেশনে যাচাই করার সঠিক উপায়টি যদি ব্যাকগ্রাউন্ডে কোনও প্রক্রিয়া শুরু হয়, যেমন sh abc.sh &, ইতিমধ্যে চলছে বা না হয় jobsবিল্টিন কমান্ড ব্যবহার করা ।

উদাহরণ:

$ sh abc.sh &
[1] 6917
$ jobs
[1]+  Running                 sh abc.sh &

এর অর্থ sh abc.shব্যাকগ্রাউন্ডে শুরু হওয়া প্রক্রিয়াটি চলছে। প্রক্রিয়াটি শেষ হয়ে গেলে আপনি এরকম কিছু দেখতে পাবেন:

[1]+  Done                    sh abc.sh

আপনার যদি পটভূমিতে আরও প্রক্রিয়া চলতে থাকে তবে আপনি কেবলমাত্র sh abc.shপ্রক্রিয়াটিতে আউটপুটকে সীমাবদ্ধ করতে পারেন :

jobs sh

দেখুন help jobsআরও তথ্যের জন্য।

উপরের পদ্ধতিটি কেবল বাশের বর্তমান অধিবেশনে কাজ করবে। তবে আপনি যদি অন্য কোনও বাশ সেশনে থাকেন (যেমন, অন্য একটি টার্মিনাল উইন্ডো বা ট্যাবে বা কোনও স্ক্রিপ্টে), একপাশে থেকে:

ps aux | grep "[s]h bin/test.sh"

আপনি এটি ব্যবহার করতে পারেন:

pgrep -a sh

যা আমার কাছে আরও সহজ বলে মনে হচ্ছে যদি আপনি আউটপুটে আপনার টাইপ করা কমান্ডটি দেখতে পান ( sh abc.shএই ক্ষেত্রে), এর অর্থ এই প্রক্রিয়াটি এখনও চলছে। যদি না হয়, প্রক্রিয়া শেষ হয়েছে।


3

যদি আপনার স্ক্রিপ্টটি বর্তমানে চলমান থাকে তবে এটি অবশ্যই ps auxআদেশ দ্বারা প্রদর্শিত হবে । যদি তা দেখানো না হয়ps , তবে আপনার স্ক্রিপ্টের সম্পাদনা বর্তমানে সমাপ্ত হতে পারে।

এর ফলাফলের psঅর্থ আপনার স্ক্রিপ্ট বর্তমানে চলছে না,

$ ps aux | grep hm.sh
avinash   6386  0.0  0.0  15940   932 pts/16   S+   17:34   0:00 grep --color=auto hm.sh

যদি এটি এর মতো দেখায়, যার অর্থ বর্তমানে আপনার স্ক্রিপ্ট চলছে।

$ ps aux | grep hm.sh
avinash   6454  0.0  0.0  16616  1384 pts/16   S+   17:35   0:00 /bin/bash ./hm.sh
avinash   6535  0.0  0.0  15940   932 pts/27   R+   17:35   0:00 grep --color=auto hm.sh

এটি সমস্ত স্ক্রিপ্টের বিষয়বস্তুর উপর ভিত্তি করে।

উদাহরণস্বরূপ, আপনি যদি এটির মতো কোনও স্ক্রিপ্ট তৈরি করেন। এটি কার্যকর করার সময় এইচআই বার্তাটি প্রদর্শন করে। আউটপুট প্রদর্শিত হতে কয়েক সেকেন্ড সময় নেয় এবং এটি চূড়ান্ত ফলাফল তৈরির পরে শেষ হয়ে যায়।

#!/bin/bash
echo "HI"

তবে আপনার স্ক্রিপ্টটি যদি এটির মতো হয়,

#!/bin/bash
sudo apt-get update

প্রক্রিয়াটি শেষ হতে কয়েক মিনিট সময় নেয়। ইতিমধ্যে আপনি যদি ps aux | grep filenameকমান্ড চালনা করেন তবে এটি আউটপুটে প্রদর্শিত হবে। কারণ স্ক্রিপ্টটি বর্তমানে চলছে।


-2
  • আপনি যদি সমস্ত প্রক্রিয়া পরীক্ষা করতে চান তবে 'শীর্ষ' ব্যবহার করুন

  • আপনি যদি জাভা দ্বারা চালিত প্রক্রিয়াগুলি জানতে চান তবে ব্যবহার করুন ps -ef | grep java

  • যদি অন্য প্রক্রিয়া হয় তবে কেবল ps -ef | grep xyzবা সহজভাবে ব্যবহার করুন/etc/init.d xyz status

  • .shতারপর যদি কোনও কোডের মাধ্যমে হয়./xyz.sh status


1
-1 যদিও এই আদেশগুলি কিছু পরিস্থিতিতে কার্যকর হয় তবে তারা এখনও এই পরিস্থিতিতে জানে না এমন কারও পক্ষে অকেজো হবে। প্রতিটি ক্ষেত্রে আপনি তাদের যথেষ্ট ব্যাখ্যা করবেন না বা আপনার ব্যাখ্যাটি ভুল।
ডেভিড ফোস্টার

-2

যদি আপনি কেবল কোনও প্রক্রিয়াধীন আছে কিনা তা পরীক্ষা করতে চান তবে সেই ডিরেক্টরিতে যান এবং ll -trযদি ফাইলের শেষে দেখতে পান .csvবা .workইত্যাদি টাইপ করেন তবে এর অর্থ প্রক্রিয়াধীন নয় অন্যথায়।


এই উত্তরটি কোনও মানে করে না। ডিরেক্টরিতে থাকা সামগ্রীর তালিকা তৈরি করা কোনও প্রক্রিয়া চলছে কিনা তা আপনাকে বলবে না। ফাইল এক্সটেনশন .csvকমা সীমিত ফাইলগুলির জন্য যা চলমান প্রক্রিয়া সম্পর্কিত নয়।
user369450
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.