লিনাক্স: একটি প্রক্রিয়া কোথায় শুরু হয়েছিল এবং কীভাবে এটি শুরু হয়েছিল তা কীভাবে জানব?


33

আমি একটি লিনাক্স বাক্স পরীক্ষা করে দেখছিলাম যে পার্ল প্রক্রিয়া চলছে এবং সিপিইউ ব্যবহারের ভাল অংশ নিচ্ছে। শীর্ষের সাথে, আমি কেবল প্রক্রিয়া নামেই পার্ল করতে পারি।

কমান্ড-লাইনটি দেখতে, আমি সি টিপে , এটি / ভার / স্পুল / মেল দেখায়। যা বোঝায় না, কারণ এটি ডিরেক্টরি।

আমার প্রশ্নগুলি হ'ল:

1) কেন এমনটি হয়েছিল? এই পার্ল প্রক্রিয়াটি কীভাবে তার কমান্ড-লাইনটি মাস্ক করতে পারে? 2) কোথায় এবং কীভাবে একটি প্রক্রিয়া শুরু হয়েছিল তা সন্ধানের সবচেয়ে নির্ভরযোগ্য উপায় কোনটি?

ধন্যবাদ!

উত্তর:


36

বেশিরভাগ ক্ষেত্রে psপ্রশস্ত আউটপুট সক্ষম করতে আপনার পছন্দসই পতাকাগুলি সহ কেবল চালানো সাধারণত পর্যাপ্ত। আমি ঝুঁকির দিকে ঝুঁকছি ps -feww, তবে এখানে অন্যান্য পরামর্শ কার্যকর হবে। মনে রাখবেন যে যদি কোনও প্রোগ্রাম কারওর বাইরে থেকে শুরু করা হয়েছিল $PATH, আপনি কেবল কার্যকর পথটিই দেখতে পাচ্ছেন, পুরো পথটিই নয়। উদাহরণস্বরূপ, এটি চেষ্টা করুন:

$ lftp &
$ ps -feww | grep ftp
lars      9600  9504  0 11:30 pts/10   00:00:00 lftp
lars      9620  9504  0 11:31 pts/10   00:00:00 grep ftp

এটি লক্ষণীয় গুরুত্বপূর্ণ যে এতে থাকা দৃশ্যমান তথ্যটি psচলমান প্রোগ্রামের মাধ্যমে সম্পূর্ণ ওভাররাইট করা যেতে পারে। উদাহরণস্বরূপ, এই কোড:

int main (int argc, char **argv) {
        memset(argv[0], ' ', strlen(argv[0]));
        strcpy(argv[0], "foobar");
        sleep(30);
        return(0);
}

যদি আমি এটি "মাইপ্রোগ্রাম" নামক কোনও ফাইলে সংকলন করে এটি চালনা করি:

$ gcc -o myprogram myprogram.c
$ ./myprogram &
[1] 10201

এবং তারপর চালান ps, আমি একটি পৃথক প্রক্রিয়া নাম দেখতে পাবেন:

$ ps -f -p 10201
UID        PID  PPID  C STIME TTY          TIME CMD
lars     10201  9734  0 11:37 pts/10   00:00:00 foobar

আপনি সরাসরি /proc/<pid>/exeএটিকেও দেখতে পারেন, যা যথাযথ এক্সিকিউটেবলের জন্য একটি সিমিলিংক হতে পারে। উপরের উদাহরণে এটি আপনাকে এর থেকে অনেক বেশি দরকারী তথ্য দেয় ps:

$ls -l /proc/9600/exe
lrwxrwxrwx. 1 lars lars 0 Feb  8 11:31 /proc/9600/exe -> /usr/bin/lftp

1
সব মিলিয়ে, ফাইলগুলি /procএকটি প্রোগ্রাম সম্পর্কিত সমস্ত তথ্য সরবরাহ exeকরবে , এক্সিকিউটেবলের জন্য একটি লিঙ্ক হবে cwdবর্তমান চলমান ডিরেক্টরি ডিরেক্টরিতে, fdডিরেক্টরিতে ফাইলগুলি খোলার লিঙ্কগুলি রয়েছে (স্ট্যান্ডার্ড ইনপুট, আউটপুট এবং স্ট্যান্ডার্ড ত্রুটি সহ)
হুবার্ট কারিও

57

সবচেয়ে নির্ভরযোগ্য উপায় /procপ্রক্রিয়াটির জন্য dir তাকান । প্রতিটি প্রক্রিয়াটির একটি /proc/<pid>/ডিরেক্টরি থাকে যেখানে এটি তথ্য রাখে:

  1. cwd বর্তমান ওয়ার্কিং ডিরেক্টরিতে লিঙ্ক
  2. fd খোলা ফাইলগুলির লিঙ্ক সহ একটি দির (ফাইল বর্ণনাকারী)
  3. cmdline প্রক্রিয়া শুরু করতে কোন কমান্ড লাইন ব্যবহার করা হয়েছিল তা দেখতে এটি পড়ুন
  4. environ যে প্রক্রিয়া জন্য পরিবেশ পরিবর্তনশীল
  5. root প্রক্রিয়াটি যেটিকে মূল ডির বলে বিবেচনা করে তার লিঙ্ক (এটি ক্রোটেড না হওয়া পর্যন্ত হবে)

প্রতিটি প্রক্রিয়া / প্রোক সম্পর্কে আরও দুর্দান্ত তথ্য রয়েছে তবে উপরে যাঁরা আছেন তাদের সাথে আপনি ঠিক কী ঘটছে তা জানতে সক্ষম হবেন।

এছাড়াও, ব্যবহার ps auxfআপনাকে দেখিয়ে দেবে যে কী কী কাঁটাছিল তাই আপনি কে আরও ভাল ধারণা পেতে পারেন যে কে আপনার পার্ল কল করছে।


আমি সর্বদা উইন্ডোজ প্রসেস এক্সপ্লোরার ব্যবহার করি এবং লিনাক্সের সমতুল্য কিনা তা ভেবে অবাক হই। এই সুইচ এটি সব কি! পিএস অক্সফ ... সুন্দর!
ইয়ানিক গিরোয়ার্ড

1
পিএস এর জন্য প্যারামিটারের জন্য +1, এটি আমার জন্য করেছে!
লেনার্ট রোল্যান্ড

2
আমাকে এই জাতীয় মৌলিক ধারণার মতো দেখতে শেখানোর জন্য +1 ... /procপ্রক্রিয়া সম্পর্কিত তথ্য রয়েছে! কে জানত?? আমি কখনো সেখানে লাগছিল ছিল versionএবং cpuinfoকাপড় এবং ... প্লাস এই সমাধান আমার প্রকৃত সমস্যা PS আমার রাউটার এর সংস্করণ সকল প্যারামিটার উপেক্ষা করে কারণ
পুনর্বহাল মনিকা - Nacht

@ কর্ডাম্প: এবং যদি প্রক্রিয়াটি chroot()আগে কল করা হয় তবে আমি কীভাবে জানতে পারি যে কোন ডিরেক্টরিটির /proc/ᴘɪᴅ/cwdসাথে সম্পর্কিত?
ব্যবহারকারী 2284570

10

আমার জন্য, এখনই, আমি খুঁজে পেয়েছি যে pstreeকীভাবে একটি প্রক্রিয়া শুরু হয়েছিল তার চেয়ে অনেক বেশি পরিষ্কার ইঙ্গিত দিয়েছেps aux

এটি দেখতে এরকম দেখাচ্ছে:

  ├─lightdm─┬─Xorg
  │         ├─lightdm─┬─init─┬─apache2───2*[apache2───26*[{apache2}]]
  │         │         │      ├─at-spi-bus-laun─┬─dbus-daemon
  │         │         │      │                 └─3*[{at-spi-bus-laun}]
  │         │         │      ├─at-spi2-registr───{at-spi2-registr}
  │         │         │      ├─dbus-daemon
  │         │         │      ├─dropbox───29*[{dropbox} ]

2

ps axww | grep perlআপনার প্রক্রিয়াটির সম্পূর্ণ কমান্ড লাইন পাওয়ার চেষ্টা করুন । দেখে মনে হচ্ছে topকেবল একটি দীর্ঘ রেখা ছাঁটা হয়েছে।


2

কমান্ড ব্যবহারের চেষ্টা করুন fuser -vu /var/spool/mail এই কমান্ডটি আপনাকে নির্দিষ্ট ফাইল বা ফাইল সিস্টেম ব্যবহার করে প্রসেসের পিআইডি প্রদর্শন করবে। ডিফল্ট ডিসপ্লে মোডে প্রতিটি ফাইলের নাম অনুসরণ করে একটি চিঠি প্রবেশের ধরণকে বোঝায়:

সি - বর্তমান ডিরেক্টরি। ই - এক্সিকিউটেবল চালানো হচ্ছে। চ - ফাইল খুলুন। ডিফল্ট ডিসপ্লে মোডে এফ বাদ দেওয়া হয়। r - রুট ডিরেক্টরি। m - mmap'ed ফাইল বা ভাগ করা লাইব্রেরি।

সম্ভবত এটি আপনাকে অনুসন্ধানের উত্তরটি অনুসন্ধান করতে এগিয়ে যাওয়ার পক্ষে সহায়তা করবে। এটি আপনাকে সহায়তা করে কিনা আমি জানি না তবে সম্ভবত আপনি কিছু দরকারী তথ্য খুঁজে পাবেন।


1

সঠিক ফ্ল্যাগগুলির জন্য ম্যান পৃষ্ঠার সাথে পরামর্শ করার জন্য, কমান্ড লাইন এবং শুরুর সময়টি কী তা অনুদান দেওয়ার একটি সহজ উপায়, পিএস অক্সউইউউইউকে কাজ করা উচিত। ম্যান পৃষ্ঠাটি পড়ার দ্বারা আপনি যদি এটি পছন্দ করেন তবে এটি আরও মার্জিত করতে পারেন।


1

দুটি কমান্ড মনে মনে বসন্ত:

1) ' পিএস ' এর বাইরে প্রক্রিয়া শুরু করার সময় পান ।

$ ps -ax -o pid,start,comm
  PID  STARTED COMMAND         USER
    1   Feb 06 init            root
    2   Feb 06 kthreadd        root
[...]
  13147 19:09:48 chrome          hcooper
  13270 19:13:51 chrome          hcooper
  13386 19:18:34 bash            hcooper

2) লাস্টকম , যা এখন আমি যাচাই করি, আমি ইনস্টল করি নি। ম্যান পৃষ্ঠার বিবরণটি যাইহোক বলেছেন:

   lastcomm prints out information about previously executed commands. If
   no arguments are specified, lastcomm will print info about all of the
   commands in acct (the record file).

তবে কয়েকজন লোক যেমন বলেছে, "ls -al / proc /" আপনাকে অনেক কিছু বলবে!


0

তুমি ব্যবহার করতে পার:

systemctl status <PID>

বা প্রক্রিয়া নাম সহ:

systemctl status $(pgrep perl)

এটি আপনার প্রক্রিয়া শুরু হওয়া সিস্টেমড পরিষেবাদির তথ্য সরবরাহ করবে।

আমি এই ইঙ্গিতটি এখানে পেয়েছি

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