শুধুমাত্র একটি জাভা প্রক্রিয়া হত্যা করুন


17

আমি সাধারণত কয়েকটি জাভা অ্যাপ্লিকেশন চালাচ্ছি, একটি স্থানীয়ভাবে সার্ভারের জন্য এবং অন্যটি নেটবিয়ানের মতো কিছু আইডিইর জন্য। এবং সময়ে সময়ে, প্রচুর পুনর্নির্মাণের পরে, আমার সার্ভার আউটআফমিরি এক্সসেপশনে আটকে যায় যাতে পুনরায় বুট করার জন্য আমার জাভা প্রক্রিয়াটি মেরে ফেলতে হবে।

সুতরাং আমি এটি করি pkill -9 javaতবে এটি আমার চলমান আইডিইটিকেও হত্যা করে যা আমি চাই না। তবে আমি কীভাবে চলমান সার্ভারের সাথে যুক্ত কেবলমাত্র অ্যাপ্লিকেশনটিকেই হত্যা করব এবং অন্যান্যগুলি নয়? আমি ধরে নিয়েছি যে সেগুলি সমস্ত একই প্রক্রিয়াধীন চলছে তবে তাদের কীভাবে বিভ্রান্ত করা যায় তার কিছু উপায় থাকতে হবে।


2
আপনার প্রক্রিয়া সারণীটি দেখুন ( topবা মাধ্যমে ps) এবং সঠিকটি চয়ন করুন এবং এটি পিআইডি দ্বারা হত্যা করুন (হত্যা -9 পিআইডি_নম্বার)।
নলখাগড়া

ওহ হ্যাঁ, আমি এখন এটি দেখতে পারি। সুতরাং আমি ঠিক ডান সঙ্গে প্রক্রিয়া হত্যা প্রয়োজন PID। অনেক অনেক ধন্যবাদ
পেটর মেনসিক

আমি এটি স্বয়ংক্রিয় করা প্রয়োজন। কিভাবে নির্দিষ্ট প্রোগ্রামের জন্য পিআইডি পাবেন?
নিখিল ভিজে

উত্তর:


23

একাধিক প্রক্রিয়ার সাথে যুক্ত এমন একটি প্রক্রিয়া হত্যার জন্য, আপনাকে সেই প্রক্রিয়াটির সাথে সম্পর্কিত প্রসেস আইডি ব্যবহার করে তা মারতে হবে।

সেই জাভা প্রক্রিয়াটির প্রসেস আইডি পেতে

ps -A |grep java

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

kill -9 PID

যদি আপনি সমস্ত কমান্ডের মাধ্যমে সমস্ত জাভা প্রক্রিয়া হত্যা করতে চানps ax | grep java | grep -v 'grep' | cut -d '?' -f1 | xargs kill -9
Andrii Karaivanskyi


8

ব্যবহার করার পরিবর্তে psএবং grep, আপনি ব্যবহার করতে পারেন ps'র -Cজাভা' নাম দিয়ে উল্লিখিত সব কমান্ড নির্বাচন করতে পতাকা '। এছাড়াও আপনি ব্যবহার করতে পারেন ps'র -fপ্রতিটি তালিকাভুক্ত প্রক্রিয়া-র পূর্ণ কমান্ড নাম প্রিন্ট করতে পতাকা। এইভাবে, আপনি প্রতিটি জাভা প্রক্রিয়া আসলে কী করছে তা দেখতে পারেন। এখানে পূর্ণ কমান্ড: ps -fC java

আপনি pgrepসমস্ত জাভা প্রক্রিয়াগুলি তালিকাভুক্ত করতেও ব্যবহার করতে পারেন । pgrep -a javaপ্রতিটি জাভা প্রক্রিয়ার পিআইডি এবং সম্পূর্ণ কমান্ড লাইন ফিরিয়ে দেবে।

আপনি যে কমান্ডটি হত্যা করতে চান তার পিআইডি হয়ে গেলে, ব্যবহার killকরুন-9 (SIGKILL) পতাকা এবং জাভা প্রক্রিয়া তোমাকে হত্যা করতে চান PID,। জাভা সর্বদা থামে না যখন এটি একটি 'সিগন্টারম' সিগন্যাল পায় (প্রক্রিয়াগুলি 'সিগমেন্টার' হ্যান্ডেল করার অনুমতি দেয়), সুতরাং এটি 'সিগ্কিল' সিগন্যাল প্রেরণ করে, যা প্রোগ্রামটিকে প্রথমে সতর্ক না করেই খুন করে তোলে, প্রায়শই প্রয়োজনীয়।

উদাহরণস্বরূপ, যদি ps -fC javaফিরে আসে

UID        PID  PPID  C STIME TTY          TIME CMD
jeff      9014  8890  0 08:51 pts/0    00:00:00 java IDE
jeff     11775  8890  6 08:59 pts/0    00:00:00 java TestProgram

বা psgrep -a javaপ্রত্যাবর্তন

9014 java IDE
11775 java TestProgram

এবং আপনি হত্যা করতে চান java TestProgram, আপনি চালানো উচিত kill -9 11775


1

আপনি যদি প্রোগ্রামটির কমান্ড লাইন থেকে (এবং আপনি যে সমস্ত জাভা জিনিস চালিয়েছেন কেবল তা নয়) ব্যবহার করে আপনার (নির্দিষ্ট) চলমান প্রোগ্রামটি খুঁজে পেতে এবং হত্যা করার জন্য কোনও স্ক্রিপ্ট চান, তবে:

pgrep -f pattern # shows the PID
pkill -f pattern

Https://unix.stackexchange.com/a/31111/249209 থেকে


লক্ষ্য করুন যে 13 ফেব্রুয়ারী '13 এর মারেক আর এর উত্তরে "পিকিল" ইতিমধ্যে উল্লেখ করা হয়েছিল
জেফ শ্যাচলার

0

jpsএবং jcmdকেবলমাত্র জাভা প্রক্রিয়া সম্পর্কিত তথ্য এবং পিআইডি প্রদর্শন করার ক্ষেত্রে বিশেষ সরঞ্জামগুলি।

আপনি আরও বিস্তারিত আউটপুট জন্য তাদের বিকল্পগুলি অন্বেষণ করতে পারেন।


যারা কেবলমাত্র আমার কম্পিউটারে নিজেদের তালিকাভুক্ত করে।
অ্যালেক্সিস উইল্ক

তাহলে, আপনি কি নিশ্চিত যে অন্যান্য জাভা প্রক্রিয়া চলছে ?!
মুহাম্মদ জেলবানা

হ্যাঁ. আপনার কমান্ডটি পরীক্ষা করার সময় আমার কাছে ক্যাসান্দ্রা বা ইলেসাদ্রা চলছে।
অ্যালেক্সিস উইল্ক

0

প্রক্রিয়াটি স্বয়ংক্রিয় করার জন্য এখানে একটি স্ক্রিপ্ট ব্যবহার করা যেতে পারে।

<PROCESS_NAME>জাভা যা চালাচ্ছে তার সাথে অংশটি প্রতিস্থাপন করুন ।

#!/bin/sh
process=`ps -ef | grep -v awk | awk -e '/java.*<PROCESS_NAME>/ { print $2 }'`
kill ${process}

দ্রষ্টব্য: আমি রাখিনি -9। আপনি সিগন্যাল ক্যাপচার না করা এবং SIGTERM(ডিফল্ট) ব্যর্থ না হওয়া পর্যন্ত আমার প্রয়োজন হবে না । আমি আপনাকে সিগন্যাল নামটি ব্যবহার করার পরামর্শ দিচ্ছি যা এটি পড়া সহজ করে তোলে:

kill -TERM ${process}

সতর্কতামূলক

কার্যকর করার আগে kill ...নিশ্চিত হয়ে নিন যে $processচলকটি প্রত্যাশার মতো সেট হয়ে গেছে। ps -efUnices মধ্যে মে বিভিন্ন তাই awkএকটি ভিন্ন প্যারামিটার প্রিন্ট করতে হতে পারে।

বিঃদ্রঃ

<PROCESS_NAME>একটি পরিবর্তনশীল মধ্যে পরিবর্তিত হতে পারে। কেবল মনে রাখবেন যে যদি আপনাকে প্রতিটি বার আপনার কমান্ড লাইনে টাইপ করতে হয় তবে আপনি একবারে ভুল করতে পারেন। সঠিক নামের সাথে স্ক্রিপ্টের একাধিক অনুলিপি পাওয়া আমার পক্ষে সহজ মনে হয়েছে।

এছাড়াও গুরুত্বপূর্ণ: awkস্ক্রিপ্টের জন্য একক উদ্ধৃতি লক্ষ্য করুন । এর অর্থ আপনাকে মধ্যবর্তী ভেরিয়েবলের সাথে স্ট্রিংটি বন্ধ এবং পুনরায় খুলতে হবে। এর মতো কিছুতে কাজ করা উচিত (অনির্ধারিত):

process=`ps -ef | grep -v awk | awk -e '/java.*'"${PROCESS_NAME}"'/ { print $2 }'`
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.