কিল্লাল আমাকে দেয় `কোনও প্রক্রিয়া পাওয়া যায় নি` তবে পিএস


17

কারো আমাকে মধ্যে পার্থক্য ব্যাখ্যা গেল killএবং killall? কেন নেই killallকি দেখতে psদেখায়?

# ps aux |grep db2
root      1123  0.0  0.8 841300 33956 pts/1    Sl   11:48   0:00 db2wdog                                         
db2inst1  1125  0.0  3.5 2879496 143616 pts/1  Sl   11:48   0:02 db2sysc                                        
root      1126  0.0  0.6 579156 27840 pts/1    S    11:48   0:00 db2ckpwd                                        
root      1127  0.0  0.6 579156 27828 pts/1    S    11:48   0:00 db2ckpwd                                        
root      1128  0.0  0.6 579156 27828 pts/1    S    11:48   0:00 db2ckpwd 

# killall db2ckpwd
db2ckpwd: no process found

# kill -9 1126
# kill -9 1127
# kill -9 1128

সিস্টেমটি সুস 11.3 (64 বিট); কার্নেল 2.6.34-12; প্রোপস সংস্করণ 3.2.8; পিএসমিঙ্ক 22.7 থেকে কিল্লাল; জিএনইউ কোর্টিলস থেকে নিহত 7.1


সিগ্কিল (-9) দিয়ে কখনও প্রক্রিয়াগুলিকে হত্যা করবেন না
ভোনব্র্যান্ড

যখন কোনও প্রক্রিয়া শেষ করার দরকার হয় তখন কী করবেন?
রাদেক

এটি খুব, খুব শেষ অবলম্বন।
ভনব্র্যান্ড

উত্তর:


19

এটি কি লিনাক্সে?

যে দ্বারা ব্যবহার করা হয় কমান্ড নামের আসলে কয়েক চতুরভাবে বিভিন্ন সংস্করণ আছে ps, killallইত্যাদি

দুটি প্রধান রূপ হ'ল: ১) দীর্ঘ কমান্ডের নাম, যা আপনি যখন চালাবেন তখন যা পাবেন ps u; এবং 2) শর্ট কমান্ডের নাম, আপনি psকোনও পতাকা ছাড়াই চালানোর সময় যা পাওয়া যায় তা ।

সম্ভবত সবচেয়ে বড় পার্থক্যটি ঘটে যদি আপনার প্রোগ্রামটি শেল স্ক্রিপ্ট হয় বা এমন কোনও কিছু যার জন্য অনুবাদকের দরকার হয়, যেমন পাইথন, জাভা ইত্যাদি requires

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

#!/bin/sh
cat

এটি চালানোর পরে, এখানে দুটি ভিন্ন ধরণের ps

প্রথমত u: ছাড়া :

$ ps -p 5290
  PID TTY      ... CMD
 5290 pts/6    ... mycat

দ্বিতীয়ত u: সাথে :

$ ps u 5290
USER       PID ... COMMAND
mikel     5290 ... /bin/sh /home/mikel/bin/mycat

দ্বিতীয় সংস্করণটি কীভাবে শুরু হয় তা নোট করুন /bin/sh ?

এখন, আমি যতদূর বলতে পারি, কমান্ডের নাম হিসাবে পেরেনদের মধ্যে দ্বিতীয় শব্দটি killallআসলে পড়ে /proc/<pid>/statএবং আঁকায়, তাই আপনি যখন দৌড়াবেন তখন আপনাকে যা নির্দিষ্ট করে বলা দরকার এটি সত্যই killall। যৌক্তিকভাবে, এটি psছাড়া কি হিসাবে একই হওয়া উচিতu পতাকাটি বলে , তবে এটি পরীক্ষা করা ভাল ধারণা হবে।

পরীক্ষা করার বিষয়গুলি:

  1. কি করে cat /proc/<pid>/statকমান্ডের নাম বলে?
  2. কি করে ps -e | grep db2কমান্ডের নাম বলে?
  3. কি ps -e | grep db2এবং ps au | grep db2একই কমান্ড নাম দেখাতে?

মন্তব্য

আপনি যদি অন্য পিএস পতাকা ব্যবহার করে থাকেন তবে আপনি ps -o commসংক্ষিপ্ত নামটি দেখতে ব্যবহার করতে আরও সহজ পেতে পারেন এবংps -o cmd দেখতে এবং দীর্ঘ নামটি দেখতে ।

আপনি আরও pkillভাল বিকল্প খুঁজে পেতে পারেন । বিশেষত, pkill -fসম্পূর্ণ কমান্ডের নামটি ব্যবহার করে, অর্থাৎ কমান্ডের নামটি দ্বারা ps uবা মুদ্রিত হিসাবে ব্যবহার করার চেষ্টা করে ps -o cmd


খুব ভাল ব্যাখ্যা। এবং আমি অনুমান করি আপনি প্রথমবার ঠিক ছিলেন। ps -e |grep db2 gives me 3084? 00:00:00 db2syscr` এবং PS aux | গ্রেপ ডিবি 2 আমাকে দেয় root 3084 0.0 0.6 579292 28304 ? S 13:02 0:00 db2ckpwd। যে মন্তব্য করতে পারে। আমি কিছুটা হারিয়েছি
রাদেক

আমি নিশ্চিত নই. এটা সম্ভব যে প্রোগ্রামটির নাম পরিবর্তন করা হচ্ছে। আপনি কি জানেন যে এটি কীভাবে চালানো হচ্ছে? কি ls -l /proc/3084/exeবলে? কি whichবা whenceবা typeফাইল খুঁজে এবং তারপর lsএবং typeযদি এটি একটি সিমবলিক লিঙ্ক বা স্ক্রিপ্ট অথবা একটি বাইনারি দেখতে?
মাইকেল

ls -l / proc / 3084 / exe আমাদের দেয়lrwxrwxrwx 1 root root 0 Jun 6 16:49 /proc/3084/exe -> /var/lib/db2/db2inst1/sqllib/adm/db2syscr
রাদেক

ls -l / var / lib / db2 / db2inst1 / skllib / ad / db2syscr আমাকে দেয়-r-sr-s--- 1 root db2iadm1 147K Feb 1 23:32 /var/lib/db2/db2inst1/sqllib/adm/db2syscr*
রাদেক

প্রকারটি আমাকে দেয় / var / lib / db2 / db2inst1 / skllib / ad / db2syscr/var/lib/db2/db2inst1/sqllib/adm/db2syscr is /var/lib/db2/db2inst1/sqllib/adm/db2syscr
রাদেক

6

কিল্লাল একটি প্রক্রিয়া নামের সাথে মিলানোর চেষ্টা করে (তবে ম্যাচের অংশে আসলে এটি তেমন ভাল নয়)।

এবং যেহেতু "পিএস | গ্রেপ" এবং "পিএস | গ্রেপ | কিল" আরও ভাল কাজ করে, তাই কেউ এটিকে সহজ করেছেন এবং পিগ্রেপ এবং পিকিল তৈরি করেছেন। "পিএস গ্রেপ" এবং "পিএস কিল" এর মতো কমান্ডগুলি পড়ুন, যেহেতু সেই কমান্ডটি প্রথমে PS এর পরে গ্রেপ হয় এবং যদি হত্যা করতে চায়।


2

আমারও একই সমস্যা ছিল তবে আমি /proc/<pid>/statপ্রত্যাশিত স্ট্রিংটি রেখেছি । স্ট্রেস ব্যবহার করে আমি দেখতে পেলাম কিল্লও অ্যাক্সেস করেছে /proc/<pid>/cmdline

আমি জিডিবি ব্যবহার করে তদন্ত অব্যাহত রেখেছিলাম যে আমার ক্ষেত্রে এটি সম্পূর্ণ কমান্ডের কাছে আমার কমান্ডের একটি চেকে ব্যর্থ হয়েছে এতে পাওয়া সমস্ত আর্গগুলি সহ /proc/<pid>/cmdline । দেখে মনে হয়েছিল কোডটির সেই পথটি ট্রিগার হয়ে গেছে কারণ ফাইলের নামটি 15 অক্ষরের চেয়ে বেশি দীর্ঘ (যা কিলালের উত্সের মধ্যে একটি হার্ডকোডযুক্ত মান)। আমি কোনওভাবে কিল্ললের সাথে এটির কাজ করতে পারি কিনা তা আমি পুরোপুরি তদন্ত করে দেখিনি।

তবে যেমন এখানে অন্যান্য মন্তব্যে উল্লিখিত হয়েছে পিকিল একটি ভাল বিকল্প যা একই সমস্যাগুলির মধ্যে নেই।

উত্সের কোডটি pkillএখানে আগ্রহীদের জন্য https://github.com/acg/psmisc পাওয়া যাবে ।


0

উবুন্টু 16 সিস্টেমে / proc / pid / stat এ থ্রেডের নাম থাকবে (যা কোনও প্রোগ্রাম pthread_setname_np সিস্টেম কলের মাধ্যমে করতে পারে)।

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