আমি কীভাবে প্রদত্ত শিশু প্রক্রিয়াটির প্যারেন্ট প্রসেস আইডি পেতে পারি?


49

প্রদত্ত বাচ্চাদের পিড থেকে প্যারেন্ট পিড কীভাবে পাবেন?

আমি জানি যে আমি এটিকে মনুষ্যক্রমে / প্রোকের অধীনে পরীক্ষা করতে পারি, আমি অবাক হয়েছি যে উবুন্টুতে এটি অর্জনের কোনও স্মার্ট / আরও ভাল উপায় আছে কিনা। নোট করুন পিতামাতাকে হত্যা করা হতে পারে বা নাও হতে পারে।

ধন্যবাদ

উত্তর:


58

কমান্ড-লাইনটি ব্যবহার করে কোনও সন্তানের প্রক্রিয়া আইডি (পিআইডি) থেকে প্যারেন্ট পিআইডি (পিপিআইডি) কীভাবে পাবেন

ব্যবহার ps -o ppid=

  • যেমন ps -o ppid= 2072রিটার্ন 2061, যা আপনি সহজেই কোনও স্ক্রিপ্টে ব্যবহার করতে পারেন ইত্যাদি ps -o ppid= -C fooকমান্ড সহ প্রক্রিয়াটির পিপিআইডি দেয় foo। এছাড়াও আপনি পুরানো ঢঙের ব্যবহার করতে পারেন ps | grep: ps -eo ppid,comm | grep '[f]oo'
  • পূর্ণাঙ্গ ব্যাখ্যা: ps -f 2072প্রত্যাবর্তন
    ইউআইডি পিআইডি   পিপিআইডি   সি স্টিম টাইম স্ট্যাট টাইম সিএমডি
    izx 2072   2061   0 07:16? এস 0:00 / ইউএসআর / লিব / পালসোডিও / নাড়ি / জিকনফ-সহায়ক
    
  • pstreeসম্পর্ক হল: pstree -s -p 2072:
    Init (1) ───pulseaudio (2061) ───gconf-সাহায্যকারী (2072)
    

আপনি কি pstree শো করার আহ্বানগুলি (কমান্ড + আর্গুমেন্ট) কোনও বিভাজন রেখা ছাড়াই জানেন? আমার যুক্তি যুক্তি যুক্ত করলে স্বয়ংক্রিয়ভাবে লাইনগুলি বিভক্ত হয়, এমনকি যদি ফলাফল সহজেই একটি লাইনে ফিট করতে পারে। ম্যান পৃষ্ঠাটি তেমন কিছু বলে মনে হচ্ছে, তবে কোনও কারণ দেয় না। আমার কাজের ভিত্তিতে পিডিআর থেকে পিআইডি বের ps -o args ...করা এবং ফলাফলগুলি ব্যবহার করা জড়িত , তবে এতে কিছুটা গন্ধ আছে।
জন পি

আমাকে কিছুটা অবাক করে দিয়েছে: ppid= পিডের পরে তবে জায়গাটি প্রয়োজনীয় বলে মনে হচ্ছে। আমি এটিকে বাদ দিলে আমি বিভিন্ন ফলাফল পেয়েছি।
গ্রেগরি অ্যারেনিয়াস

8

প্যারেন্ট পিআইডি পেতে কেবল ভেরিয়েবল ব্যবহার করুন :

echo $PPID

আপনার যদি এই প্যারেন্ট পিডের কমান্ডের প্রয়োজন হয়:

cat /proc/$PPID/comm

আপনার যদি পূর্ণ কমান্ড লাইন প্রয়োজন (সমস্ত বিকল্প সহ):

cat /proc/$PPID/cmdline

ব্যাখ্যা

  • $PPID শেল দ্বারা সংজ্ঞায়িত করা হয়, এটি পিতামাতার প্রক্রিয়ার পিআইডি
  • ইন /proc/, আপনার প্রতিটি প্রক্রিয়ার পিআইডি সহ কিছু ডায়ার থাকে। তারপরে, আপনি cat /proc/$PPID/comm, পিআইডি-র কমান্ডের নামটি প্রতিধ্বনি করুন

পরীক্ষা করে দেখুন মানুষ proc


1
এটি সেরা উত্তর। procfs একটি কার্নেল এপিআই। একটি কমান্ড এক্সিকিউট করুন এবং আউটপুট পার্স করা একটি আজেবাজে কথা।
ম্যাসিমো

এটিও সম্ভবত পোর্টেবল, PPIDএটি পসিক্স স্ট্যান্ডার্ডের অংশ হিসাবে সংজ্ঞায়িত হয়েছে সুতরাং কোনও পসিক্স অনুগত শেল এটি যথাযথভাবে সেট করা উচিত। Pubs.opengroup.org/onlinepubs/9699919799/utilities/…
রবভি

2

pstreeকমান্ড নাম ব্যবহার করে

pstreeআপনি ব্যবহার করে শিশু প্রক্রিয়া নামের দ্বারা অনুসন্ধান করতে পারেন এবং পিতা-মাতা, দাদা-দাদি এবং শিশু প্রক্রিয়াটির যে কোনও শিশুদের সাথে প্রসেস আইডি (পিআইডি) পেতে পারেন:

$ pstree -hp | grep sleep
           |-cron(763)---cron(795)---sh(839)---display-auto-br(841)---sleep(8414)

এই ক্ষেত্রে sleepসন্তান কমান্ড এবং এটি PID, হয় 8414। এর প্যারেন্ট আইডি 841 এবং কল করা হয় display-auto-brightness। দাদা পিতামহ একটি শেল ( sh) এর প্রসেস আইডি সহ 839। বড়-ঠাকুরদার cronএকটি প্রক্রিয়া আইডি সহ 795। মহান-মহান-পিতামহ হয় cronএকটি প্রক্রিয়া আইডি দিয়ে 763

আপনি যদি sleepনামের পরিবর্তে প্রসেস আইডি দিয়ে অনুসন্ধান করতে চান তবে আপনি ব্যবহার করতে পারেন:

$ pstree -hp | grep 14653
           |-cron(763)---cron(795)---sh(839)---display-auto-br(841)---sleep(14653)

sleepপ্রক্রিয়া আইডি পরিবর্তন করুন লক্ষ্য করুন 14653। পিতা বা মাতা (PID, 841) 1 মিনিট অপেক্ষার পরে পুনরায়, একটি বিভক্ত দ্বিতীয় জেগে উঠছে এবং তারপর একটি নতুন শুরু sleepকমান্ড যা একটি নতুন প্রসেস ID পায়। sleepপ্রক্রিয়া আইডি দ্বারা অনুসন্ধান করা অনুসন্ধান করা আরও সহজ কারণ এটি ।

এই কোডটি নেওয়া হয়েছিল: সূর্যোদয় এবং সূর্যাস্তের উপর ভিত্তি করে ডিসপ্লের উজ্জ্বলতা স্বয়ংক্রিয়ভাবে সামঞ্জস্য করুন এবং এই প্রশ্নের সাথে মানিয়ে নিয়েছেন ।


বুট প্রসেসের সমস্ত পথে নেস্টেড চেইন দেখতে নামের পরিবর্তে পিআইডি ব্যবহার করুন:

$ pstree -aps 8541
systemd,1 splash fastboot kaslr
  └─cron,763 -f
      └─cron,795 -f
          └─sh,839 -c    /usr/local/bin/display-auto-brightness
              └─display-auto-br,841 /usr/local/bin/display-auto-brightness
                  └─sleep,8541 60

দ্রষ্টব্য: আর একটি মিনিট কেটে গেছে এবং স্লিপ কমান্ড একটি নতুন পিআইডি (8541) পেয়েছে।


আপনার উদাহরণস্বরূপ, এই পদ্ধতিটি পিআইডি 807 এর সাথে ক্রোন প্রক্রিয়াটির জন্য কাজ করতে পারত না
অলরিন

@ ওলরিন উভয় উদাহরণে আপনি গ্রেপ করতে পারেন 807বা cronএকই লাইনটি পুনরায় চালু করা যেতে পারে এবং আরও বেশি বাচ্চাদের জন্ম দেওয়া হয়। তবে প্রশ্নটি ছিল সমস্ত বাচ্চাদের নয়, পিতামাতার সন্ধানের বিষয়ে।
WinEunuuchs2 ইউনিক্স

ঠিক - আপনি এই আউটপুটটির সাথে পিআইডি 807 এর পিতামাতাকে কীভাবে খুঁজে পাবেন? আপনি করতে পারেন না becvause এটি 807. পিতা বা মাতা অন্তর্ভুক্ত নয়
Olorin

@ অলরিন ক্রোন এর পিতামাতাকে সিস্টেমড করা হয় যা পিআইডি 1। আমি মনে করি না আপনি পিআইডি 1 টি মেরে ফেলতে পারবেন
উইনউনুউস

আমি কিছু মারার বিষয়ে কিছু বলিনি। কেবল পরিষ্কার করার জন্য, এখন আপনি দাবি করছেন যে pstree এর প্রথম লাইন নেওয়া বা কমান্ডের নামের জন্য গ্রেপিং সবসময় পিতামাতার পিআইডি দেবে?
ওলোরিন

0

ps -efj একই জন্য ব্যবহার করা যেতে পারে।

উদাহরণ স্বরূপ,

> ps -efj | head
UID        PID  PPID  PGID   SID  C STIME TTY          TIME CMD
root         1     0     1     1  0 Jul01 ?        00:00:13 /sbin/init splash
root         2     0     0     0  0 Jul01 ?        00:00:00 [kthreadd]
root         3     2     0     0  0 Jul01 ?        00:00:02 [ksoftirqd/0]
root         5     2     0     0  0 Jul01 ?        00:00:00 [kworker/0:0H]
root         7     2     0     0  0 Jul01 ?        00:06:44 [rcu_sched]
root         8     2     0     0  0 Jul01 ?        00:00:00 [rcu_bh]
root         9     2     0     0  0 Jul01 ?        00:00:00 [migration/0]
root        10     2     0     0  0 Jul01 ?        00:00:08 [watchdog/0]
root        11     2     0     0  0 Jul01 ?        00:00:08 [watchdog/1]
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.