পিএস এর আউটপুটকে বিশ্লেষণ করে এমন একক কমান্ড ব্যবহার করে একটি চলমান প্রক্রিয়াটির পিড কীভাবে পাবেন?


22

আমি একটি একক লাইন সন্ধান করছি যা চলমান প্রক্রিয়াটির পিডকে ফিরিয়ে দেয়।

বর্তমানে আমার আছে:

ps -A -o pid,cmd|grep xxx|head -n 1

এবং এটি মুষ্টি ফিরে pid, command। আমার আউটপুট থেকে প্রথম সংখ্যাটি দরকার এবং বাকিগুলি উপেক্ষা করুন। আমি মনে করি sedবা awkএখানে সহায়তা করি তবে তাদের সাথে আমার অভিজ্ঞতা সীমাবদ্ধ।

এছাড়াও, এটির আরও একটি সমস্যা রয়েছে, xx চলমান না থাকলে এটি গ্রেপের পিড ফিরিয়ে দেবে।

আমি একটি প্রক্রিয়াটি হত্যার মতো অন্য কিছু করার জন্য আউটপুটটিকে পুনরায় ব্যবহার করতে চাই বলে একটি একক লাইন থাকা সত্যিই গুরুত্বপূর্ণ।


1
এটি মাথা দিয়ে পাইপ করুন এবং -n 1 দিয়ে ফিরে আসার জন্য লাইনটি নির্দিষ্ট করুন?
মাইক ম্যাকমাহন

উত্তর:


28

আপনি যদি কেবল প্রক্রিয়াটির পিড চান তবে আপনি pgrepযদি উপলব্ধ থাকে তবে তা ব্যবহার করতে পারেন । pgrep <command>কমান্ডের পিড ফিরিয়ে দেবে (বা কমান্ডের একাধিক উদাহরণ চলমান থাকলে পিডের তালিকা, আপনি যদি headঅন্যান্য উপযুক্ত আদেশ ব্যবহার করতে পারেন )
আশা করি এটি সাহায্য করে!


+1 pgrep এর আমার সাধারণ ব্যবহার:kill `pgrep xxx`
স্টিভ

20
@ স্টিভ: সম্ভবত আপনার দিকে নজর দেওয়া উচিত pkill
পরবর্তী বিজ্ঞপ্তি না দেওয়া পর্যন্ত বিরতি দেওয়া হয়েছে।

7

আরও একটি কমান্ড প্রয়োজন; স্থান-বিভাজিত মানগুলির একটি রেখা থেকে আপনি কেবল প্রথম ক্ষেত্রটি চান:

ps -A -o pid,cmd|grep xxx | grep -v grep |head -n 1 | awk '{print $1}'

ভাল, দুই। আউটপুট থেকে নিজেকে গ্রেপ অপসারণ করতে আমি আরও একটি গ্রেপ যুক্ত করেছি।


6

কেবল পিগ্রেপ ব্যবহার করুন, এটি আরও সোজা এগিয়ে

pgrep -o -x xxxx

উপরেরটি সঠিক নাম সহ প্রাচীনতম প্রক্রিয়া নির্বাচন করে


এবং যেহেতু ওপি প্রক্রিয়াটি হত্যার জন্য কমান্ডটি ব্যবহার করতে চায়, pkill(একই আরোগুলি সহ) সর্বাধিক প্রত্যক্ষ পছন্দ হবে।
bstpierre


0

সাইগউইনে চলছে তাই আমি -A এবং -o ব্যবহার করতে পারি না তবে এরকম কিছু:

$ ps
      PID    PPID    PGID     WINPID   TTY     UID    STIME COMMAND
     4580       1    4580       4580  ?       55573   May 21 /usr/bin/mintty
     5808    7072    5808       7644  pty3    55573 13:35:31 /usr/bin/ps
     7072    5832    7072       6424  pty3    55573   May 21 /usr/bin/bash


$ ps | grep '/usr/bin/mintty' | head -n 1 | awk '{print $1}'
4580

0

আপনি যেমন কিছু করতে পারেন

ps -A -o cmd,pid | egrep "^xxx " | head -n 1 | sed -r -e 's/.* ([0-9]+)$/\1/'

তারপরে xxx এর প্রক্রিয়া নাম থাকতে হবে এবং অ্যাঙ্কর because এর কারণে এটি গ্রেপ গ্রহণ করবে না ^

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