উবুন্টু শাটডাউনে সিগন্যটার পাঠাচ্ছে না


21

আমি সন্দেহ করতে শুরু করি যে উবুন্টু চলমান অ্যাপ্লিকেশনগুলিকে বলছে না যে এটি বন্ধ হয়ে যাচ্ছে যাতে তারা সঠিকভাবে ছাড়তে দেয় তবে পরিবর্তে তাদের ছেড়ে দিতে বাধ্য করে।

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

যেমনটি আমি এটি বুঝতে পেরেছি, প্রথমে সমস্ত প্রক্রিয়াগুলিতে সিগন্যর পাঠানো হয় যাতে তারা পরিষ্কারভাবে প্রস্থান করতে পারে এবং যদি তারা প্রস্থান না করে তবে সিক্কিল তাদের প্রেরণে বাধ্য করার জন্য প্রেরণ করা হয়। দেখে মনে হয় যে উবুন্টু হয় হয় না ঠিকই সাইনটার্ম প্রেরণ করে বা অ্যাপ্লিকেশনগুলিকে সিগ্কিল পাঠানোর আগে পর্যাপ্ত সময় দেয় না।

আমি এটি ঠিক করতে পারে এমন কোন উপায় আছে?

আমি উবুন্টু 16.04 চালাচ্ছি তবে 15.10 তেও সমস্যাটি বিদ্যমান ছিল। আমি উবুন্টু ব্যবহার শুরু করার পরে এটি ছিল কিনা তা আমি বলতে পারি না যখন 15.10 নতুন সংস্করণ ছিল।

সম্পাদনা: আমি ইউনিটি ব্যবহার করি এবং উপরের ডানদিকে কোণায় গিয়ার টিপুন এবং শাট ডাউনটি নির্বাচন করে আমার কম্পিউটারটি বন্ধ করে দিই, যদিও sudo haltটার্মিনালে চলতে থাকলে সমস্যাটি একই ।

সম্পাদনা: কেবল লগ আউট করার সময় আমি একই আচরণ পর্যবেক্ষণ করছি। আমার অনুমানটি এই যে সিগন্যালটি লগ আউটে প্রেরণ করা হয়েছিল এবং তাই বন্ধ এবং লগ আউট করার সময় সমস্যা দেখা দেয়।


আপনি কীভাবে বন্ধ করছেন?
টেরডন

1
ক্রোমিয়াম এবং লিব্রেফিস আপনি যেভাবে পরিচালনা করতে চান সাইনটারম পরিচালনা করছেন না
আন্দ্রে কার্বেলিনী

2
আমি নিশ্চিত না যে আপনি কী বলতে চাইছেন তা আমি বুঝতে পেরেছি। আপনি কী বোঝাতে চাইছেন যে তারা সঠিকভাবে SIGTERM পরিচালনা করছেন না? সম্ভবত তারা না করে আমি যেমন আমার প্রশ্নে লিখেছিলাম আমি এমন একটি প্রোগ্রামে কাজ করছি যা সাইনটারএম হ্যান্ডেল করে তবে সেই কোডটি কখনও চালিত হয় না বলে মনে হয়। সিআরটিএল + সি চাপার সময় সাইন ইন করুন নিখুঁতভাবে কাজ করে। আমি এখনও বিশ্বাস করি যে উবুন্টু শাট ডাউন চলমান প্রক্রিয়াগুলি অবহিত করার বিষয়ে কিছু সমস্যা আছে।
GKraft


2
সমস্ত অ্যাপ্লিকেশনটি ম্যানুয়ালি বন্ধ করে দেওয়া বিরক্তিকর এবং আপনি যদি একটি সংক্ষিপ্ততরটি ভুলে যান তবে কী হবে? এটি আপনার কাজ সংরক্ষণ করবে না। এবং প্রচুর পটভূমি প্রক্রিয়া রয়েছে যা আপনি হয় সহজেই নিয়ন্ত্রণ করতে পারবেন না বা ভাবেন না। তাদের নিজেদের পরিষ্কার করার বা তারা যা করছে তা সংরক্ষণ করার সুযোগ দেওয়া হবে না।
GKraft

উত্তর:


3

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

আপনি শাটডাউন না করে সহজেই চেষ্টা করে দেখতে পারেন। আপনার চলমান ফায়ারফক্স বা লিবারঅফিস প্রক্রিয়াতে কেবল সাইনটারম পাঠান:

$ pkill firefox

সাধারণত, ফায়ারফক্স জিজ্ঞাসা করতে পারে আপনি সত্যিই এটি বন্ধ করতে চান কিনা। এছাড়াও এটি বন্ধ হতে সাধারণত কিছুক্ষণ সময় নেয়, বিশেষত যখন এটি দীর্ঘ সময় ধরে চলতে থাকে এবং 1 গিগাবাইটেরও বেশি র‍্যাম ব্যবহার করে - প্রায়শই এটি শেষ উইন্ডোটি বন্ধ হওয়ার পরে প্রক্রিয়াটি শেষ হতে এক মিনিটের মতো সময় নেয়। আপনি SIGTERM প্রেরণ করলে এর কিছুই হয় না, প্রক্রিয়াটি তাত্ক্ষণিকভাবে বন্ধ হয়ে যায়।

তবে কিছু ডেস্কটপ এনভায়রনমেন্ট বন্ধ করার আগে সমস্ত খোলা উইন্ডো বন্ধ করে দেয়। SIGTERM মতো একটি উইন্ডো প্রোগ্রামেটিক্যালি বন্ধ যে উইন্ডো, অথবা এক্স বোতামে ক্লিক মত হল Alt+ + F4। অন্য উত্তরের স্ক্রিপ্টটি এটিই করে - এটি সমস্ত খোলা উইন্ডোটি কৌতূহলীভাবে বন্ধ করতে wmctrl ব্যবহার করে।

উইন্ডোটি বন্ধ হয়ে গেলে, প্রোগ্রামটি হুড়োহুড়ি হয় না এবং এটি সেই উইন্ডোর মধ্যে সমস্ত কিছু বন্ধ করে দিতে পারে, উদাহরণস্বরূপ খোলা ট্যাবগুলি, এবং যদি সুরক্ষিত কাজ না থাকে তবে এটি একটি ডায়ালগ উইন্ডোও প্রদর্শন করতে পারে। একবার কোনও অ্যাপ্লিকেশনের সমস্ত খোলা উইন্ডো বন্ধ হয়ে গেলে, প্রক্রিয়াটি সাধারণত তার খুব শীঘ্রই শেষ হয়।

সুতরাং এটি আপনার ডেস্কটপ পরিবেশের উপর নির্ভর করে (ধরে নিই যে আপনি আপনার ডেস্কটপ পরিবেশটি শাটডাউন ব্যবহার করেন এবং না sudo poweroff)। উদাহরণস্বরূপ, কেডিএর বন্ধ করার আগে খোলা উইন্ডোজ বন্ধ হওয়ার অপেক্ষা করা উচিত, যখন মেটটি দেয় না।

নীচের লাইন: বন্ধ করার আগে সমস্ত খোলা উইন্ডো ম্যানুয়ালি বন্ধ করুন। অথবা এমন একটি ডেস্কটপ পরিবেশ ব্যবহার করুন যা সমস্ত উইন্ডো বন্ধ হওয়ার জন্য অপেক্ষা করে।


আমি দেখছি শাটডাউন প্রক্রিয়া এবং সিগন্যাল হ্যান্ডলিং ঠিক যেমনটি ভেবেছিল ঠিক তেমন কাজ করে না। এখন আমি বুঝতে পারি যে এটি কীভাবে কাজ করার কথা এবং কেন এটি আমার প্রত্যাশার মতো কাজ করে নি।
GKraft

0

এটির মূল্যের জন্য, কিছু সময় আগে, আমি মাঞ্জারো ফোরামে এই পদ্ধতিটি পেয়েছি:

close_apps () {
WIN_IDs=$(wmctrl -l | grep -vwE "Desktop$|xfce4-panel$" | cut -f1 -d' ')
for i in $WIN_IDs; do wmctrl -ic "$i"; done

# Keep checking and waiting until all windows are closed
while [ "$WIN_IDs" != "" ]; do
        sleep 0.1;
        WIN_IDs=$(wmctrl -l | grep -vwE "Desktop$|xfce4-panel$" | cut -f1 -d' ')
done

}

শাটডাউন করার পূর্বে সমস্ত খোলা অ্যাপ্লিকেশন বন্ধ করতে (বা পুনঃসূচনা) আপনি এটিকে নিজের স্ক্রিপ্টে কল করতে পারেন।

একমাত্র সমস্যা হ'ল এটি এক্সএফসির জন্য তৈরি করা হয়েছিল সুতরাং এটির পরিবর্তনের দরকার যা ইউনিটি ডিই চাপিয়েছে। ওপির সমস্যা সমাধানে সহায়তা করার জন্য আরও জ্ঞানী কারও কাছ থেকে সামান্য সহায়তা এখানে সুন্দরভাবে আসবে।


আমার কম্পিউটারে কয়েকদিন অ্যাক্সেস থাকবে না তাই এটি সংশোধন করা হলেও আমি এটি চেষ্টা করতে পারি না। আসলেই কি এমন স্ক্রিপ্ট ব্যবহার করা দরকার? আমি মনে করি উবুন্টু নিজেই এটি পরিচালনা করবে।
GKraft

একমত। যদিও এটি জুবুন্টুতে পুরোপুরি কাজ করে। উদাহরণস্বরূপ, কোনও সংরক্ষিত নথি থাকলে শটডাউন অনির্দিষ্টকালের জন্য অপেক্ষা করবে।
এসআর

0

প্রকৃতপক্ষে, স্ক্রিপ্টের একটি অংশ যা সমস্ত উইন্ডো বন্ধ করে এবং কোনও নির্দিষ্ট ডিই এর উপর নির্ভর করে না, জিজ্ঞাসা করে পাওয়া যায়। 2-nd এবং 3-rd উত্তরগুলি বিশেষভাবে কার্যকর। আরও কয়েকটি লাইন দিয়ে, এবং প্যানেলে বা ডেস্কটপে একটি লঞ্চার তৈরি করে আপনি যে ডিই ব্যবহার করছেন তার ডিফের কাজ করে এমন গ্রেফফুল শাটডাউন অর্জন করতে পারবেন।

কীভাবে সমস্ত খোলা উইন্ডো বন্ধ করে দেওয়া যায়


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