`PS` এ বেশ কয়েকটি শর্ত দ্বারা নির্বাচনের কোনও উপায় আছে কি?


12

মনে হচ্ছে আমি অন্ধভাবে স্পষ্ট কিছু মিস করছি, তবে এখনও:

ps -f -u myuser --ppid 1

কেবল প্রক্রিয়াটির প্যারেন্ট পিডকে একবার দেখে নেওয়া হবে এবং 1 টির প্যারেন্ট পিড থাকা সমস্ত প্রক্রিয়াটি ফিরিয়ে দেয় - এমনকি ব্যবহারকারী না থাকলেও myuser

-uএকা কাজ সঠিকভাবে (নির্বাচন একমাত্র প্রক্রিয়া myuser):

ps -f -u myuser

আমি কী মিস করছি? বেশ কয়েকটি শর্তে ফিল্টার করার জন্য কি কিছু অন্তর্নির্মিত উপায় আছে ps?

সম্পাদনা: আমার বর্তমান কাজ:

ps -f -p $(join <(ps h --ppid 1 -o pid | sort) <(ps h -u myuser -o pid | sort))

উত্তর:


12

psএইভাবে বিরক্তিকর। সৌভাগ্যক্রমে, সেখানে pgrepএকই রকমের নির্বাচনের বিকল্প রয়েছে, তবে তাদের সমস্তটি মিলে যায় এবং তারপরে ম্যাচিং পিডগুলি আউটপুট করে। ডিফল্টরূপে এটি প্রতি লাইনে একটি করে আউটপুট দেয় তবে এটির সাথে আলাদাভাবে ডিলিমিটার ব্যবহার করতে বলা যেতে পারে যাতে এটি এর সাথে কাজ করবে ps:

ps -f -p"$(pgrep -d, -u $USER -P 1)"

4

দুর্ভাগ্যক্রমে psকেবল অপসারণ করতে পারে, andঅপারেটর বা পরিশোধক সংযোজন করার ক্ষমতা নেই বলে মনে হয় না ।

আপনি pgrepপিআইডিগুলির একটি তালিকা পেতে সহায়তা তালিকাভুক্ত করতে পারেন এবং সেটিকে ফিড করতে পারেন ps। উদাহরণ স্বরূপ:

$ ps -f $(pgrep -P 1 -u saml)
UID        PID  PPID  C STIME TTY      STAT   TIME CMD
saml      1986     1  0 Jul25 ?        SLl    0:00 /usr/bin/gnome-keyring-daemon --daemonize --login
saml      2003     1  0 Jul25 ?        S      0:00 dbus-launch --sh-syntax --exit-with-session
saml      2004     1  0 Jul25 ?        Ss     0:23 /bin/dbus-daemon --fork --print-pid 5 --print-address 7 --session
saml      2147     1  0 Jul25 ?        S      0:04 /usr/libexec/gconfd-2
saml      2156     1  0 Jul25 ?        Ssl    0:09 /usr/libexec/gnome-settings-daemon
saml      2162     1  0 Jul25 ?        S      0:00 /usr/libexec/gvfsd
saml      2178     1  0 Jul25 ?        Ssl    0:01 /usr/bin/pulseaudio --start --log-target=syslog
saml      2180     1  0 Jul25 ?        Ssl    0:04 /usr/libexec//gvfs-fuse-daemon /home/saml/.gvfs
saml      2191     1  0 Jul25 ?        S      0:12 syndaemon -i 0.5 -k
saml      2193     1  0 Jul25 ?        S      0:00 /usr/libexec/gvfs-gdu-volume-monitor

2

psখুব নমনীয় ফিল্টার নেই। এটি আপনার যা প্রয়োজন তার চেয়ে বেশি প্রদর্শন করুন, স্পষ্টভাবে ফর্ম্যাটটি নির্দিষ্ট করুন এবং আউটপুট ফিল্টার করুন। এই কাজটির জন্য আওক প্রায়শই ভাল কাজ করবে।

ps -o pid= -o ppid= -o user= -o comm= -o args= |
awk -v uid="$(id -un myuser)" '$2 == 1 && $3 == uid'

কলামের নামের পরে সমান চিহ্নগুলি শিরোনামের রেখাটি দমন করে। আপনি যদি শিরোনামের লাইনগুলি দেখতে চান তবে ফিল্টারটি প্রথম লাইনটি অপরিবর্তিত করে মুদ্রণ করুন:

ps -o pid -o ppid -o user -o comm -o args |
awk -v uid="$(id -un myuser)" 'NR == 1 || ($2 == 1 && $3 == uid)'

আপনি যদি কিছু স্বয়ংক্রিয় প্রক্রিয়াজাতকরণ করতে চান তবে আপনাকে কেবল পিআইডিগুলিতে ডেটা ফেলা করতে হবে।

ps -o pid= -o ppid= -o user= |
awk -v uid="$(id -un myuser)" '$2 == 1 && $3 == uid {print $1}'

0

আমার ব্যাচ দ্বারা পিআইডি'র শুরু হওয়াতে আমাকে যাচাই করতে হয়েছিল, সুতরাং আমাকে একটি পিআইডি এবং পিপিআইডি চেক করতে হয়েছিল, এই গ্রেপটি আমার পক্ষে আরও উপকারী:

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