পটভূমিতে চলমান ব্যাশ শেল স্ক্রিপ্টটি সমাপ্ত করা হচ্ছে


16

আমি প্রায়শই bashবিভিন্ন বিভিন্ন ফাইলের সহজ কমান্ড চালাতে শেল স্ক্রিপ্ট ব্যবহার করি । উদাহরণস্বরূপ, অনুমান যে আমি নিম্নলিখিত আছে bashশেল স্ক্রিপ্ট, বলা script.sh, যে প্রোগ্রাম / কমান্ড রান fooতিন টেক্সট ফাইল "a.txt", "b.txt", "c.txt":

#!/bin/bash

for strname in "a" "b" "c"
do
foo $strname".txt"
done

এছাড়াও, ধরুন যে foo $strname".txt"এটি ধীর গতির, সুতরাং স্ক্রিপ্টটির সম্পাদন করতে দীর্ঘ সময় লাগবে (ঘন্টা বা দিন, উদাহরণস্বরূপ)। এ কারণে, আমি এটি ব্যবহার করতে চাই nohupযাতে টার্মিনালটি বন্ধ বা সংযোগ বিচ্ছিন্ন হয়ে গেলেও কার্যকর কার্যকর হয়। আমি স্ক্রিপ্টটি অবিলম্বে পটভূমিতে যেতে চাই, তাই আমি &অপারেটরটি ব্যবহার করব । সুতরাং আমি কল করতে নিম্নলিখিত কমান্ডটি ব্যবহার করব script.sh:

nohup bash script.sh &

এটি ব্যাকগ্রাউন্ডে এবং হ্যাংআপ ছাড়াই স্ক্রিপ্টটি চালানোর জন্য দুর্দান্ত কাজ করে তবে এখন মনে করুন যে আমি কোনও কারণে কোনও কারণে মৃত্যুদন্ড কার্যকর করতে চাই। কিভাবে আমি এটি করতে পারব?

সমস্যা হল আমি সম্মুখীন যে, দিকে তাকিয়ে দ্বারা top, আমি শুধুমাত্র দেখতে fooসংশ্লিষ্ট "a.txt"। আমি যে বন্ধ করতে পারেন fooকল, কিন্তু তারপর fooসংশ্লিষ্ট "b.txt"নামক পরার এবং তারপর আমি বিনষ্ট যে এক পাশাপাশি, এবং তাই আছে। forলুপে উল্লিখিত দশ বা শত শত পাঠ্য ফাইলের জন্য foo, একে একে একে একে শেষ করে দেওয়া ব্যথা হয়ে যায় ! সুতরাং কোনওরকমভাবে পরিবর্তে আমাকে শেল স্ক্রিপ্ট নিজেই বন্ধ করতে হবে, শেল স্ক্রিপ্ট থেকে জারি করা বিশেষ কলগুলি নয় ।

আমি যখন কমান্ডটি টাইপ করি

ps -u myusername

myusernameআমার ব্যবহারকারী নাম কোথায় , আমি যে প্রক্রিয়াগুলি চালিয়ে যাচ্ছি তার একটি তালিকা পাই get কিন্তু আমি দুটি ভিন্ন প্রক্রিয়া ID- র নামক দেখতে bash। এই প্রসেসগুলির মধ্যে কোনটি আমার মূল কলের সাথে মিলে যায় তা আমি কীভাবে জানতে পারি nohup bash script.sh &?


@ অ্যান্ড্রু, উভয় প্রক্রিয়া কমান্ডে উল্লিখিত নুহপ দেখায়? .... বিকল্পভাবে আপনি PS -aWu অ্যান্ড্রু চেষ্টা করে দেখতে পারেন এবং কোনও নোহুপ দিয়ে একটি দীর্ঘ এন্ট্রি পেয়ে থাকেন কিনা তা পরীক্ষা করতে পারেন .... এটি কী সাহায্য করে?
নিতিন

2
অন্যদিকে, আপনার উদ্ধৃতিটি অদৃশ্য। for s in a b c; do foo "$s".txt; done
ট্রিপলি

1
@ এনএনএসডি: না, nohupআপনি যে কাজটি শুরু করেছেন তা দেখার জন্য আপনি কোনও প্রক্রিয়া তালিকা তৈরি করার সময়টি খুব দীর্ঘ হয়ে যাবে। আপনি psআউটপুটে "উদ্ভাবন" কলামটি দেখতে পারেন তবে উত্তরগুলি এখানে আরও কার্যকর।
ট্রিপলি

উত্তর:


10

ডিফল্টরূপে, psপ্রোগ্রামটি দিয়েছিল এমন পরামিতিগুলি প্রদর্শন করবে না। বিকল্পগুলি -fএবং -lউভয়ই পুরো কলটি দেখায়।

ps -fu username

ফলাফলের মতো দেখাবে যা দেখাবে:

username 23464 66.7  0.0  11400   628 pts/5    R    15:28   1:40 bash script.sh

2
এটি পরিমিতরূপে দরকারী, তবে একই যুক্তি দিয়ে একাধিক প্রক্রিয়া ছড়িয়ে দেয় না।
ট্রিপলি

11

আপনার কাছে কয়েকটি বিকল্প রয়েছে। যেহেতু আপনার প্রক্রিয়া ব্যাকগ্রাউন্ডে চলছে, আপনি jobsএটি সন্ধান করতে ব্যবহার করতে পারেন :

nohup bash script.sh &
...
jobs
[1]+ Running    nohup bash script.sh &
kill %1
jobs
[1]+ Terminated nohup bash script.sh &

আপনি pkillকমান্ড লাইনের সাথে মিলের জন্য প্রক্রিয়া সারণীটি অনুসন্ধান করতেও ব্যবহার করতে পারেন ; যেমন:

pkill -f script.sh

1

ps(যেমন সঙ্গে আউটপুট ps aux) বাবা-মার জন্য প্রসেস ID অন্তর্ভুক্ত। পিতামাতাকে হত্যা করুন bashএবং তার বাচ্চাদেরও শেষ করে দেওয়া হবে।

প্রক্রিয়া গাছের একটি ASCII pstree -pদৃষ্টিভঙ্গির জন্য, কয়েকটি ব্যাকগ্রাউন্ড প্রক্রিয়া চলমান দিয়ে চেষ্টা করুন ।

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