আমি সার্ভারে নোহুপ প্রক্রিয়া চালাচ্ছি। আমি যখন এটি মারার চেষ্টা করি তখন আমার পুটি কনসোলটি পরিবর্তিত হয়ে যায়।
এইভাবে আমি প্রক্রিয়া আইডিটি সন্ধান করার চেষ্টা করি:
ps -ef |grep nohup
এই হত্যার আদেশ
kill -9 1787 787
আমি সার্ভারে নোহুপ প্রক্রিয়া চালাচ্ছি। আমি যখন এটি মারার চেষ্টা করি তখন আমার পুটি কনসোলটি পরিবর্তিত হয়ে যায়।
এইভাবে আমি প্রক্রিয়া আইডিটি সন্ধান করার চেষ্টা করি:
ps -ef |grep nohup
এই হত্যার আদেশ
kill -9 1787 787
উত্তর:
আপনি যখন nohup
কাজটি পটভূমিতে রেখেছেন তখন পটভূমি অপারেটর ( &
) আপনাকে কমান্ড প্রম্পটে পিআইডি দেবে। যদি আপনার পরিকল্পনাটি ম্যানুয়ালি প্রক্রিয়াটি পরিচালনা করার থাকে তবে আপনি সেই পিআইডি সংরক্ষণ করতে পারেন এবং প্রয়োজনে প্রক্রিয়াটি মারতে পরে এটি ব্যবহার করতে পারেন kill PID
বা kill -9 PID
(যদি আপনাকে জোর করে হত্যা করতে হবে)। বিকল্পভাবে, আপনি পরে পিআইডি খুঁজে পেতে ps -ef | grep "command name"
এবং সেখান থেকে পিআইডি সনাক্ত করতে পারেন । নোট করুন যে nohup
কীওয়ার্ড / কমান্ড নিজেই ps
প্রশ্নে কমান্ডের আউটপুটে উপস্থিত হবে না ।
আপনি যদি কোনও স্ক্রিপ্ট ব্যবহার করেন তবে আপনি এমন কিছু করতে পারেন:
nohup my_command > my.log 2>&1 &
echo $! > save_pid.txt
my_command
এটিতে আউটপুট সংরক্ষণ করে চালানো হবে my.log
(একটি স্ক্রিপ্টে, $!
শেষ হওয়া প্রক্রিয়ার পিআইডি উপস্থাপন করে)। এটি 2
হ'ল স্ট্যান্ডার্ড ত্রুটির ( stderr
) ফাইলের জন্য ফাইল বর্ণনাকারী এবং 2>&1
শেলকে স্ট্যান্ডার্ড ত্রুটি আউটপুটকে স্ট্যান্ডার্ড আউটপুট (ফাইল বর্ণনাকারী 1
) এ রুট করতে বলে । এটির জন্য এটি প্রয়োজন &1
যাতে শেলটি কেবলমাত্র একটি ফাইলের পরিবর্তে সেই প্রসঙ্গে একটি ফাইল বর্ণনাকারী জানে 1
। 2>&1
কোনো ত্রুটি বার্তা সাধারণত আমাদের মধ্যে মান ত্রুটি লেখা হয় ক্যাপচার প্রয়োজন হয় my.log
ফাইল (যেটি মান আউটপুট থেকে আসছে)। দেখুন , I / O পুনঃ দিকনির্দেশ আমি হে ফেরৎ শেল সঙ্গে / হ্যান্ডলিং আরও বিশদের জন্য।
কমান্ডটি যদি নিয়মিত ভিত্তিতে আউটপুট প্রেরণ করে tail my.log
তবে আপনি মাঝে মাঝে আউটপুটটি পরীক্ষা করতে পারেন , বা যদি আপনি এটি "লাইভ" অনুসরণ করতে চান তবে আপনি এটি ব্যবহার করতে পারেন tail -f my.log
। শেষ অবধি, যদি আপনার প্রক্রিয়াটি মারতে হয় তবে আপনি এটির মাধ্যমে এটি করতে পারেন:
kill -9 `cat save_pid.txt`
rm save_pid.txt
nohup
প্রতি সে নয় , এটি পিআইডি প্রিন্ট করে, এটিই চূড়ান্ত, &
যা এর ব্যাকগ্রাউন্ড, উদাহরণস্বরূপ ls &
চলমান পিআইডি প্রদর্শন করবেls
2
হ'ল "স্ট্যান্ডার্ড ত্রুটি" ফাইল বিবরণকারী । >
শেলটি পুনর্নির্দেশ, এবং &1
এটি "স্ট্যান্ডার্ড আউটপুট" ফাইল বিবরণকারী (এটি &
এখানে প্রয়োজনীয় তাই শেলটি ভাববে না যে আমি নামের কোনও ফাইলটি উল্লেখ করছি 1
)। সুতরাং 2 > &1
কোনও মানক ত্রুটি আউটপুটকে স্ট্যান্ডার্ড ইনপুটটিতে পুনঃনির্দেশ করে। > my.log
স্ট্যান্ডার্ড আউটপুটটিতে পুনঃনির্দেশ করার পূর্বের উপায়গুলি যেহেতু my.log
ত্রুটি বার্তাগুলিও চলেছে তা নিশ্চিত করার একটি উপায় আমাদের দরকার my.log
। 2 > &1
নিশ্চিত করে যে এই ধরনের ত্রুটিগুলি স্ট্যান্ডার্ড আউটপুটগুলিতে যায়, যার ফলস্বরূপ যায় my.log
। দেখুন , I / O পুনঃ দিকনির্দেশ ।
echo $!
প্রক্রিয়াটি বেড়ে যাওয়ার পরিবর্তে আমাকে নোহুপের পিড দেয়
&
কমান্ড ডিলিমিটার হিসাবে কাজ করে যাতে আপনি চেষ্টা করতে পারেন sh -c "nohup my_command > my.log 2>&1 & echo $! > save_pid.txt"
,। এটি হয়ত কাজ করতে পারে, তবে আমি এটি চেষ্টা করি নি।
আমি একটি ভিপিএস সার্ভারে লাল টুপি লিনাক্স ব্যবহার করছি (এবং এসএসএইচ - পুটি মাধ্যমে), আমার জন্য নিম্নলিখিতটি কাজ করেছে:
প্রথমত, আপনি সমস্ত চলমান প্রক্রিয়াগুলি তালিকাবদ্ধ করুন:
ps -ef
তারপরে প্রথম কলামে আপনি আপনার ব্যবহারকারীর নাম খুঁজে পাবেন; আমি এটি নিম্নলিখিত তিনবার পেয়েছি:
তারপরে দ্বিতীয় কলামে আপনি নোহুপ প্রক্রিয়াটির পিআইডি খুঁজে পাবেন এবং আপনি কেবল টাইপ করুন:
kill PID
(অবশ্যই নোহপ প্রক্রিয়াটির পিআইডি দিয়ে পিআইডি প্রতিস্থাপন করা)
আর এটাই!
আমি আশা করি যে এই উত্তরটি কারও পক্ষে কার্যকর হবে আমি বাশ এবং এসএসএইচ-তেও খুব নতুন, তবে আমার এখানে প্রয়োজনীয় জ্ঞানের 95% পাওয়া গেছে :)
ধরুন আমি নীচের কমান্ডের সাথে ব্যাকগ্রাউন্ডে রুবি স্ক্রিপ্ট চালাচ্ছি
nohup ruby script.rb &
তারপরে আমি কমান্ডের নাম উল্লেখ করে উপরের পটভূমি প্রক্রিয়াটির পিড পেতে পারি। আমার ক্ষেত্রে কমান্ড রুবি হয়।
ps -ef | grep ruby
আউটপুট
ubuntu 25938 25742 0 05:16 pts/0 00:00:00 ruby test.rb
এখন আপনি কমান্ড কমান্ড ব্যবহার করে সহজেই প্রক্রিয়াটি মেরে ফেলতে পারেন
kill 25938
ps -ef
এবং kill
উভয়ই ভালভাবে উপরে আচ্ছাদিত ছিল, সুতরাং নতুন অংশটি কী?
কাজের -l আপনাকে নোহাপ প্রক্রিয়াগুলির তালিকার জন্য পিড দেওয়া উচিত। তাদের (-9) আলতো করে হত্যা করুন। ;)
kill -9
আপনি যদি না জানেন যে নিয়মিত সংকেতগুলি কাজ করে না unless
মনে করুন আপনি নোহুপ দিয়ে একটি জাভা প্রোগ্রাম সম্পাদন করছেন তবে আপনি জাভা প্রক্রিয়া আইডি পেতে পারেন
`ps aux | grep java`
আউটপুট
xxxxx 9643 0.0 0.0 14232 968 pts/2
তারপরে আপনি টাইপ করে প্রক্রিয়াটি মেরে ফেলতে পারেন
sudo kill 9643
বা বলুন যে আপনাকে সমস্ত জাভা প্রক্রিয়াগুলি মেরে ফেলতে হবে তারপরে কেবল ব্যবহার করুন
sudo killall java
এই কমান্ডটি সমস্ত জাভা প্রসেসরকে হত্যা করে। আপনি প্রক্রিয়া সহ এটি ব্যবহার করতে পারেন। কমান্ডের শেষে প্রক্রিয়াটির নাম দিন
sudo killall {processName}
আমি নিম্নলিখিত কমান্ড দিয়ে জাজানো সার্ভার শুরু করেছি।
nohup manage.py runserver <localhost:port>
এটি CentOS এ কাজ করে:
:~ ns$netstat -ntlp
:~ ns$kill -9 PID
process not found
নোহাপ দিয়ে বিভ্রান্তি সমাধানের জন্য এটিই যায় ।
আজ আমি একই সমস্যা পূরণ। এবং যেহেতু এটি অনেক দিন আগে ছিল, আমি কোন আদেশটি কখন এবং কখন ব্যবহার করেছি তা পুরোপুরি ভুলে গিয়েছিলাম। আমি তিনটি পদ্ধতি চেষ্টা করেছি:
ps -ef
কমান্ড । এটি আপনার প্রক্রিয়া শুরু করার সময়টি দেখায় এবং আপনি সম্ভবত এসএসএস বন্ধ করার আগে আপনাকে কমান্ড দেওয়ার (সম্ভবত আপনার উপর নির্ভরশীল) সম্ভাবনা রয়েছে। দুর্ভাগ্যক্রমে আমি নোপআপ ব্যবহার করে চালিত কমান্ডটি সর্বশেষতম কমান্ড বলে মনে করি না, সুতরাং এটি আমার পক্ষে কার্যকর হয় না।ps -ef
। এর অর্থ প্যারেন্ট প্রসেস আইডি, প্রক্রিয়াটির আইডি যা প্রক্রিয়া তৈরি করে। পিপিড উবুন্টুতে প্রসেসের জন্য 1 যা চালানোর জন্য নোহুপ ব্যবহার করে। তারপরে আপনি ps --ppid "1"
তালিকাটি পেতে ব্যবহার করতে পারেন এবং প্রক্রিয়াটির পিআইডি সন্ধানের জন্য টাইম (আপনার প্রক্রিয়াটি ব্যবহারের মোট সিপিইউ সময়) বা সিএমডি পরীক্ষা করতে পারেন।lsof -i:port
যদি প্রক্রিয়া পোর্ট ব্যাপৃত, এবং আপনি কমান্ড পাবেন। তারপরে উপরের উত্তরের মতই ব্যবহার করুন ps -ef | grep command
এবং আপনি পিআইডি পাবেন।একবার আপনি প্রক্রিয়াটির পিআইডি খুঁজে পাবেন, তারপরে kill pid
প্রক্রিয়াটি টার্মিনাল করতে ব্যবহার করতে পারেন ।
nohup
এবং পরে এটি ব্যবহার করার পরেkill
, বাps -ef
আউটপুটে এর কমান্ড নাম দ্বারা প্রক্রিয়াটি খুঁজে পেতে এবং সেখান থেকে পিআইডি পেতে হবে। আপনাকে কমান্ডের নামটি সন্ধান করতে হবে, নাnohup
।