আমি তাদের ব্যবহারকারীর ইউআইডি ব্যবহার করে সমস্ত ব্যবহারকারীর প্রক্রিয়া কীভাবে হত্যা করব


41

আমি একটি লিনাক্স সিস্টেমের শেল স্ক্রিপ্ট বা নেটিভ কোড থেকে কোনও নির্দিষ্ট ব্যবহারকারীর সমস্ত চলমান প্রক্রিয়াটি হত্যা করতে চাই।

আমার কি / প্রো ডিরেক্টরিটি পড়তে হবে এবং এগুলি সন্ধান করতে হবে?

কোন ধারনা? লিনাক্সে ইউআইডি-র অধীনে পিডগুলির গতিশীল ম্যাপিং রয়েছে? এটা কি প্রোকে না?

তা না হলে এই তালিকাটি কোথায় রক্ষণাবেক্ষণ করা হবে? আমি এটা থেকে পড়া উচিত? এছাড়াও সিস্টেমে সমস্ত ইউআইডি-র স্থির তালিকাটি যেখানে আমি এই ব্যবহারকারীর উপস্থিতি যাচাই করতে পারি এবং তারপরে চলমান সমস্ত প্রক্রিয়া মেরে ফেলার চেষ্টা করতে পারি?


6
আপনি কি এটি করার জন্য কোনও সরঞ্জাম চান (পিকেল, হত্যা, অন্যদের উপস্থিত রয়েছে), বা আপনি নিজে এটি লিখতে চান? যদি আগেরটি হয় তবে সুপারভাইজার স্ট্যাক এক্সচেঞ্জ সাইটটি সম্ভবত আরও ভাল। পরে যদি, কোনও নির্দিষ্ট ব্যবহারকারীর দ্বারা সমস্ত প্রক্রিয়াগুলির জন্য স্ক্যান / প্রোক এবং একটি নোট তৈরি করা যায় is পিকিল ইউটিলিটির সোর্স কোড, উদাহরণস্বরূপ, এটি কীভাবে করা যায় তা দেখায়।

@ লার্সভাইর্জনিয়াসের মন্তব্যের আলোকে এই প্রশ্নটি কী ছিল তা আপনি পরিষ্কার করতে পারেন? ধন্যবাদ!
কালেব

@ কালেব: আমি / প্রোকে পড়ে প্রক্রিয়াগুলি মেরে ফেলতে চেয়েছিলাম কারণ কোনও সরঞ্জাম এটি করার জন্য আমি জানতাম না। এছাড়াও এখন আমি দেখতে পেলাম যে "কিল", "পিকিল", "দক্ষতা" ইত্যাদি আমার সিস্টেমে উপলব্ধ নেই। সেক্ষেত্রে আমি অনুমান করি যে আমাকে / প্রোক পড়ার জন্য শেল স্ক্রিপ্ট বিকল্পগুলি দেখতে হবে এবং একটি ব্যবহারকারীর অধীনে প্রক্রিয়াগুলি পাওয়ার উপায় বের করতে হবে। কোন ধারনা?
ব্যবহারকারী 489152

1
"সমস্ত ইউআইডি'র স্থিতির তালিকা সম্পর্কে… যাতে আমি এই ব্যবহারকারীর উপস্থিতি যাচাই করতে পারি": ব্যবহারকারী আইডি যাচাই করার মতো কোনও জিনিস নেই। ব্যবহারকারীর নাম একটি ডাটাবেস থেকে আসে, তবে ব্যবহারকারীর আইডিগুলি প্রক্রিয়া চলমান যা কিছু setuid()চয়ন করে।
গিলস 'অশুভ হওয়া বন্ধ করুন'

উত্তর:


52

ব্যবহারের pkill -U UIDবা pkill -u UIDবা ইউআইডি পরিবর্তে ব্যবহারকারীর নাম। কখনও কখনও skill -u USERNAMEকাজ করতে পারে, অন্য একটি সরঞ্জাম killall -u USERNAME

দক্ষতা একটি লিনাক্স-নির্দিষ্ট ছিল এবং এখন পুরানো এবং পিকিল আরও বহনযোগ্য (লিনাক্স, সোলারিস, বিএসডি)।

pkill কার্যকর এবং বাস্তব http://man7.org/linux/man-pages/man1/pkill.1.html উভয় সংখ্যক এবং প্রতীকী ইউআইডি অনুমতি দেয়

pkill - ... নাম এবং অন্যান্য বৈশিষ্ট্যের উপর ভিত্তি করে সিগন্যাল প্রক্রিয়া

    -u, --euid euid,...
         Only match processes whose effective user ID is listed.
         Either the numerical or symbolical value may be used.
    -U, --uid uid,...
         Only match processes whose real user ID is listed.  Either the
         numerical or symbolical value may be used.

দক্ষতার ম্যান পেজ বলছে এটি কেবল ব্যবহারকারীর আইডি নয়, ব্যবহারকারীর আইডি ব্যবহারের অনুমতি রয়েছে: http://man7.org/linux/man-pages/man1/skill.1.html

দক্ষতা, স্নাইস ... এই সরঞ্জামগুলি অপ্রচলিত এবং অপ্রয়োজনীয়। কমান্ড সিনট্যাক্সটি খারাপভাবে সংজ্ঞায়িত করা হয়েছে। কিল্লাল, পিকিল ব্যবহার বিবেচনা করুন

  -u, --user user
         The next expression is a username.

কিলল লিনাক্সে পুরানো হিসাবে চিহ্নিত নয়, তবে এটি সংখ্যাযুক্ত ইউআইডি-র সাথেও কাজ করবে না; কেবলমাত্র ব্যবহারকারীর নাম: http://man7.org/linux/man-pages/man1/killall.1.html

কিল্লাল - নাম দ্বারা হত্যা প্রক্রিয়া

   -u, --user
         Kill only processes the specified user owns.  Command names
         are optional.

আমি মনে করি, লিনাক্স / সোলারিস স্টাইল / প্রোক (প্রোফস) -এ প্রক্রিয়া সন্ধান করতে যে কোনও ইউটিলিটি প্রসেসের সম্পূর্ণ তালিকা ব্যবহার করবে (এর কিছু রিডডির করছে /proc)। আমি মনে করি, তারা /procডিজিটাল সাবফোল্ডারগুলিতে পুনরাবৃত্তি করবে এবং ম্যাচের জন্য প্রতিটি পাওয়া প্রক্রিয়া পরীক্ষা করবে ।

ব্যবহারকারীর তালিকা পেতে, ব্যবহার করুন getpwent(এটি কল প্রতি একজন ব্যবহারকারী পাবেন)

দক্ষতা (procps & procps-ng) এবং জন্য killall (psmisc) টুলস উভয় ব্যবহারসমূহ getpwnamএর পার্স যুক্তি গ্রন্থাগার কল -uবিকল্প, এবং শুধুমাত্র ব্যবহারকারী নাম বিশ্লেষণ করা হবে। pkill( প্রোপস এবং প্রোপস -এনজি) উভয় অ্যাটল এবং গেটপুইনাম ব্যবহার করে-u / -Uযুক্তি পার্স করতে এবং সংখ্যাসূচক এবং পাঠ্য উভয় নির্দিষ্টকারীর অনুমতি দেয়।


1
pkill অপ্রচলিত হয় না। এটি লিনাক্সের বাইরে অপ্রয়োজনীয় হতে পারে, তবে প্রশ্নটি ছিল বিশেষত লিনাক্স সম্পর্কে about

1
ব্যবহারকারীর তালিকাটি পেতে একটি লাইনার ব্যবহার করুন: জেন্টেন্ট পাসডওইড | awk -F: '{মুদ্রণ {1}'
পিটেশ

আমি কীভাবে একটি কমান্ড দেব: সি সিস্টেম () কল থেকে "কিল-জুজু ইউআইডি"?

1
এটি কি এম্বেডড লিনাক্স? আপনার কোন দক্ষতা, পিল এবং কিল্ল নেই? এমনকি ব্যস্তবক্স এম্বেড শেলটিতে পিল এবং কিল্ল রয়েছে।
osgx

2
killall -u USERNAME
মোহন

8

যদি আপনি killশেল কমান্ড বা killসি ফাংশন প্রসেস আইডি আর্গুমেন্ট হিসাবে পাস করেন , তবে সিগন্যালটি সমস্ত প্রসেসে পৌঁছে যেতে পারে যেখানে এটি পৌঁছতে পারে, যার ব্যবহারিকভাবে বোঝানো হয় ব্যবহারকারীর সমস্ত প্রক্রিয়া যা killকমান্ড বা সিস্কল চালাচ্ছে ।

su -c 'kill -TERM -1' bob

সি তে (ত্রুটি বাদ দেওয়া বাদ দিয়ে):

if (fork() == 0) {
    setuid(uid);
    signal(SIGTERM, SIG_DFL);
    kill(-1, SIGTERM);
}

5

যদি পিকিল ফাংশনটি আপনার ইউনিক্স / লিনাক্স বিতরণে অনুপলব্ধ থাকে তবে আপনি নিম্নলিখিত ব্যবহারকারীকে মূল ব্যবহারকারী হিসাবে চালাতে পারেন:

ps -ef | grep username | grep -v grep | awk '{print $2}' | xargs kill

যেখানে ব্যবহারকারীর নাম হ'ল এমন ব্যবহারকারী যা আপনি মুছতে চান


বা শুধু pkill -U username
osgx


0

এটি আমার পক্ষে দুর্দান্তভাবে কাজ করেছে। আপনি প্রক্রিয়াগুলির সমস্ত পিডগুলি ব্যবহারকারীর নাম দ্বারা ps U <username>এবং সেখান থেকে যেতে পারেন। এটা চেষ্টা কর:

ps U <username> | cut -d " " -f 1 | xargs kill
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.