কখন আমাদের জাভাতে System.exit কল করা উচিত?


193

জাভাতে, System.exit(0)নিম্নলিখিত কোডটির সাথে বা ছাড়া পার্থক্য কী ?

public class TestExit
{      
    public static void main(String[] args)
    { 
        System.out.println("hello world");

        System.exit(0);  // is it necessary? And when it must be called? 
    }      
}

ডকুমেন্ট বলছে: "এই পদ্ধতি সাধারণত ফেরৎ না।" এর মানে কী?

উত্তর:


207

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

"এই পদ্ধতিটি কখনই স্বাভাবিকভাবে ফিরে আসে না।" মানে কেবল যে পদ্ধতিটি ফিরে আসবে না; একবার যদি একটি সুতা সেখানে যায়, এটি আর ফিরে আসবে না।

আরেকটি, সম্ভবত আরও সাধারণ, কোনও প্রোগ্রাম ছাড়ার উপায় হ'ল mainপদ্ধতিটির শেষে পৌঁছানো । তবে যদি কোনও নন-ডেমন থ্রেড চলমান থাকে তবে সেগুলি বন্ধ হবে না এবং এইভাবে JVM প্রস্থান করবে না। সুতরাং, আপনার যদি এই জাতীয় কোনও ডেমন থ্রেড থাকে তবে আপনার সমস্ত ডিমন-থ্রেড বন্ধ করতে এবং অন্যান্য সংস্থানগুলি ছেড়ে দেওয়ার জন্য অন্য কিছু উপায় (শাটডাউন হুক ব্যতীত) দরকার। যদি অন্য কোনও ডিমন-থ্রেড না থাকে, তবে ফিরে আসা mainজেভিএমকে বন্ধ করবে এবং শাটডাউন হুকগুলিকে কল করবে।

কোনও কারণে শাটডাউন হুকগুলি একটি অবমূল্যায়িত এবং ভুল বোঝাবুঝি ব্যবস্থা বলে মনে হচ্ছে এবং লোকেরা তাদের প্রোগ্রামগুলি বন্ধ করতে সমস্ত ধরণের মালিকানাধীন কাস্টম হ্যাকের সাথে চাকাটিকে পুনরায় উদ্ভাবন করছে। আমি শাটডাউন হুক ব্যবহার করে উত্সাহিত করব; এটি স্ট্যান্ডার্ড রানটাইমের মধ্যে রয়েছে যা আপনি যেভাবেই ব্যবহার করতে পারবেন।


10
"এই পদ্ধতিটি কখনই স্বাভাবিকভাবে ফিরে আসে না।" মানে কেবল যে পদ্ধতিটি ফিরে আসবে না; একবার যদি একটি সুতা সেখানে যায়, এটি আর ফিরে আসবে না। বিশেষভাবে দ্রষ্টব্য যে এর অর্থ হল আপনি একটি পদ্ধতিটি পরীক্ষা করতে পারবেন না যা একটি System.exit (0) কল করে ...
বিল মিশেল

5
-১ ভুল। জেভিএম স্বাভাবিকভাবে বন্ধ হয়ে গেলে শাটডাউন হুকগুলি চলবে, এটি সিস্টেম.এক্সিট বা মূল () সমাপ্তির কারণেই নয়। দেখুন zx81 / doku / জাভা / javadoc / j2se1.5.0 / ডক্স / API / জাভা / ল্যাঙ / ...
sleske

31
@ স্লেসকে: চারপাশে অন্যান্য অ-ডেমন থ্রেড থাকলে মেইন () এর সমাপ্তি যথেষ্ট নয়। আপনি অবশেষে System.exit () কে কল না করলেই সর্বশেষ নন-ডেমন থ্রেডটি শেষ হওয়ার পরেই শাটডাউন শুরু করা হবে। রানটাইম ডকুমেন্টেশনে এটি স্পষ্টভাবে বলা আছে।
জুনাস পুলক্কা

3
মনে রাখবেন যে আপনার শাটডাউন হুক যদি পরিবর্তিতভাবে System.exit নামক থ্রেডের উপর নির্ভর করে তবে আপনি অচল হয়ে যাবেন।
djechlin

8
যোগ করার মতো কিছু, যদি কেউ রানটাইম বন্ধ করে দেয় তবে শাটডাউন হুকগুলি চলবে না ( Runtime.getRuntime().halt())
দাগ

50

সেক্ষেত্রে এর দরকার নেই। কোনও অতিরিক্ত থ্রেড শুরু করা হবে না, আপনি প্রস্থান কোড পরিবর্তন করছেন না (যা ডিফল্ট 0-এ) - মূলত এটি অর্থহীন।

ডক্স যখন বলে যে পদ্ধতিটি কখনই স্বাভাবিকভাবে ফিরে আসে না, তার অর্থ কোডের পরবর্তী লাইনটি কার্যকরভাবে অ্যাক্সেসযোগ্য, যদিও সংকলকটি এটি জানে না:

System.exit(0);
System.out.println("This line will never be reached");

হয় একটি ব্যতিক্রম নিক্ষেপ করা হবে, বা ভিএম ফিরে আসার আগে সমাপ্ত হবে। এটি কখনই "কেবল ফিরে" আসবে না।

System.exit()আইএমই কল করার জন্য এটি খুব বিরল । আপনি যদি কমান্ড লাইন সরঞ্জামটি লিখে থাকেন তবে তা বোঝাতে পারে এবং আপনি কেবলমাত্র একটি ব্যতিক্রম ছোঁড়ার পরিবর্তে প্রস্থান কোডের মাধ্যমে একটি ত্রুটি চিহ্নিত করতে চান ... তবে আমি সর্বশেষ উত্পাদন কোডটিতে এটি ব্যবহার করার সময়টি মনে করতে পারছি না ।


2
সংকলক তা জানে না কেন? সিস্টেম.এক্সিট () নির্দিষ্ট সুনির্দিষ্ট সনাক্তকরণ কোডের ওয়ারেন্ট দেওয়ার পক্ষে যথেষ্ট বিশেষ নয়?
বার্ট ভ্যান হিউকেলোম

3
@ বার্ট: না, আমি তা মনে করি না। এই জাতীয় জিনিসের জন্য ভাষায় বিশেষ কেস যুক্ত করা খুব সামান্য উপকারের সাথে ভাষার জটিলতায় যুক্ত হয়।
জন স্কিটি

আমি ভেবেছিলাম "কখনই স্বাভাবিকভাবে ফিরে আসে না" এর সাথে বিবৃতিটির "হঠাৎ সমাপ্তি" হয়। (জেএলএস ধারা 14.1)। আমি কি ভূল?
আইয়ুব

@ আইউব: না, আপনি ঠিক বলেছেন। System.exit()সাধারণত কখনই সম্পূর্ণ হয় না - এটি সর্বদা হয় ব্যতিক্রম বা ভিএম বন্ধ করে (যা সত্যিই জেএলএসে আচ্ছাদিত নয়) দিয়ে সম্পূর্ণ হবে।
জন স্কিটি

1
@ পাইচুকারার: ​​আপনাকে কী এমন ভাবতে বাধ্য করে? কলিং শেলটি (বা যাই হোক না কেন) প্রোগ্রামটি যে কোনও ত্রুটির মুখোমুখি হয়েছে তা নির্দেশ করতে এটি 0 ছাড়া অন্য কোনও মান দিয়ে কল করা সম্পূর্ণ যুক্তিসঙ্গত।
জন স্কিটি

15

পদ্ধতিটি কখনই ফিরে আসে না কারণ এটি বিশ্বের শেষ এবং আপনার কোডের কোনওটিই পরবর্তীটিতে কার্যকর করা হবে না।

আপনার অ্যাপ্লিকেশন, উদাহরণস্বরূপ, কোডের একই স্পটে যেভাবেই প্রস্থান করতে হবে, তবে, যদি আপনি System.exit ব্যবহার করেন। আপনার মতো পরিবেশের কাছে একটি কাস্টম কোড ফিরিয়ে দেওয়ার বিকল্প রয়েছে say

System.exit(42);

কে আপনার প্রস্থান কোড ব্যবহার করতে যাচ্ছে? অ্যাপ্লিকেশন নামে পরিচিত এমন একটি স্ক্রিপ্ট। উইন্ডোজ, ইউনিক্স এবং অন্যান্য সমস্ত স্ক্রিপ্টযোগ্য পরিবেশে কাজ করে।

কেন একটি কোড ফেরত? "আমি সফল হইনি", "ডাটাবেস উত্তর দেয় নি" এর মতো জিনিস বলতে।

কীভাবে কীভাবে একটি বহির্গমন কোডের মান পাবেন এবং এটি ইউনিক্স শেল স্ক্রিপ্ট বা উইন্ডোজ সেন্টিমিডি স্ক্রিপ্টে ব্যবহার করবেন তা দেখতে আপনি এই উত্তরটি এই সাইটে পরীক্ষা করতে পারেন


14

System.exit(0)জেভিএম সমাপ্ত করে। এর মতো সহজ উদাহরণগুলিতে পার্থক্যটি অনুধাবন করা কঠিন। প্যারামিটারটি ওএস-এ ফেরত দেওয়া হয় এবং সাধারণত অস্বাভাবিক সমাপ্তি (উদাহরণস্বরূপ একধরণের মারাত্মক ত্রুটি) নির্দেশ করতে ব্যবহৃত হয়, সুতরাং যদি আপনি কোনও ব্যাচ ফাইল বা শেল স্ক্রিপ্ট থেকে জাভা ডাকেন তবে আপনি এই মানটি পেতে এবং ধারণা পেতে সক্ষম হবেন যদি আবেদনটি সফল হয়।

আপনি যদি System.exit(0)কোনও অ্যাপ্লিকেশন সার্ভারে মোতায়েন হওয়া কোনও অ্যাপ্লিকেশনকে কল করেন (এটি চেষ্টা করার আগে এটি সম্পর্কে ভাবেন) এটি বেশ প্রভাব ফেলবে ।


12

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

আমি নিম্নলিখিতটি দিয়ে আমার কোডে এটি পরিচালনা করছি:

public static void exit(final int status) {
    new Thread("App-exit") {
        @Override
        public void run() {
            System.exit(status);
        }
    }.start();
}

আমারও সমস্যা ছিল যেখানে সিস্টেম.এক্সিট আসলে জেভিএম শেষ করে না। যদিও এটি কেবল কিছু শর্তের মধ্যে রয়েছে। আমি যে থ্রেডাম্প নিয়েছি তা আমাকে কোন থ্রাইড / শাটডাউন হ্যান্ডলারগুলি শাটডাউনটি ব্লক করছে। মন্তব্যে বর্ণিত কোডটি ব্যবহার করে এটি সমাধান করতে আমাকে সহায়তা করেছে!
কাই

7

যদিও উত্তরটি সত্যিই সহায়ক ছিল তবে কিছু এটি আরও কিছু বিশদ কীভাবে মিস করেছে। আমি আশা করি উপরের উত্তর ছাড়াও নীচে জাভাতে শাটডাউন প্রক্রিয়াটি বুঝতে সহায়তা করবে:

  1. সুশৃঙ্খল * শাটডাউনে, জেভিএম প্রথমে সমস্ত নিবন্ধিত শাটডাউন হুক শুরু করে। শাটডাউন হুকগুলি স্ট্রিটগুলি স্ট্রাইড নয় যা রানটাইম.এডিডিশুটডাউনহুকের সাথে নিবন্ধিত।
  2. জেভিএম আদেশে শটডাউন হুকগুলি শুরু হওয়ার বিষয়ে কোনও গ্যারান্টি দেয় না। যদি কোনও অ্যাপ্লিকেশন থ্রেড (ডিমন বা নোনডেমন) এখনও শাটডাউন সময়ে চলমান থাকে তবে তারা শাটডাউন প্রক্রিয়াটির সাথে একই সাথে চলতে থাকবে
  3. সমস্ত শাটডাউন হুকগুলি সম্পন্ন হলে, জেভিএম ফাইনালাইজারগুলি চালানো বেছে নিতে পারে যদি রানফাইনালাইজারঅনেক্সট সত্য হয়, এবং তারপরে বন্ধ হয়ে যায়।
  4. জেভিএম এখনও শাটডাউন সময়ে চলমান কোনও অ্যাপ্লিকেশন থ্রেড থামাতে বা বাধা দেওয়ার চেষ্টা করে না; জেভিএম অবশেষে থামলে এগুলি হঠাৎ করে বন্ধ করা হয়।
  5. যদি শাটডাউন হুক বা চূড়ান্তকরণগুলি সম্পূর্ণ না হয়, তবে সুশৃঙ্খলভাবে শাটডাউন প্রক্রিয়াটি "হ্যাঙ্গ করে" এবং জেভিএমকে হঠাৎ করে বন্ধ করতে হবে।
  6. হঠাৎ বন্ধ হয়ে গেলে, জেভিএমকে জেভিএম থামানো ব্যতীত অন্য কিছু করার দরকার নেই; শাটডাউন হুকগুলি চলবে না।

দ্রষ্টব্য: জেভিএম পারেন একটি ইন শাট ডাউন করতে পারেন সুশৃঙ্খল বা আকস্মিক পদ্ধতিতে।

  1. শেষ "স্বাভাবিক" (নোনডেমোন) থ্রেডটি শেষ হয়ে গেলে কেউ সিস্টেম.এক্সিট কল করে বা অন্য প্ল্যাটফর্ম-নির্দিষ্ট উপায়ে (যেমন একটি সাইন ইন প্রেরণ বা সিটিআরএল-সি মারার মতো) একটি অর্ডলি শটডাউন শুরু হয়।
  2. যদিও উপরে জেভিএম বন্ধ করার মানসম্পন্ন এবং পছন্দের উপায়, এটি রানটাইম.হাল্ট কল করে বা অপারেটিং সিস্টেমের মাধ্যমে জেভিএম প্রক্রিয়াটি হ'ল (যেমন একটি সিগকিএল প্রেরণ করা) সহ আকস্মিকভাবে বন্ধও করা যেতে পারে।

7

System.exit(0)এই কারণগুলির জন্য কারও কাছে আসা উচিত নয় :

  1. এটি নিয়ন্ত্রণের প্রবাহকে একটি গোপন "গোটো" এবং "গোটোস" ভঙ্গ করে। এই প্রসঙ্গে হুকের উপর নির্ভর করা একটি মানসিক ম্যাপিং যা দলের প্রতিটি বিকাশকারীকে সচেতন হতে হবে।
  2. প্রোগ্রামটি "সাধারণভাবে" প্রস্থান করা অপারেটিং সিস্টেমে একই প্রস্থান কোড সরবরাহ করে যেমন System.exit(0)এটি অনর্থক।

    যদি আপনার প্রোগ্রামটি "সাধারণভাবে" ছাড়তে না পারে আপনি নিজের বিকাশের নিয়ন্ত্রণ [ডিজাইন] হারিয়ে ফেলেছেন। আপনার সিস্টেম সিস্টেমের সর্বদা সম্পূর্ণ নিয়ন্ত্রণ থাকা উচিত।

  3. প্রোগ্রামিং সমস্যা যেমন চালানো থ্রেডগুলি সাধারণত আটকানো হয় না তা গোপন হয়ে যায়।
  4. আপনি অস্বাভাবিকভাবে থ্রেডগুলিকে বাধাদানকারী একটি বেমানান অ্যাপ্লিকেশন রাষ্ট্রের মুখোমুখি হতে পারেন। (# 3 দেখুন)

উপায় দ্বারা: 0 টির চেয়ে অন্য রিটার্ন কোডগুলি ফিরিয়ে দেওয়া যদি আপনি অস্বাভাবিক প্রোগ্রামের সমাপ্তি নির্দেশ করতে চান তবে তার অর্থ হবে না।


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

দয়া করে আপনার অ্যাপ্লিকেশন সার্ভারে System.exit (0) সম্পাদন করুন এবং আপনার সার্ভার প্রশাসকের প্রতিক্রিয়া সম্পর্কে আমাকে বলুন ... আপনি এই প্রশ্নের এবং আমার উত্তরটির বিষয়টি মিস করেছেন।
oopexpert

আমি যথেষ্ট পরিষ্কার ছিল না। আপনার দায়িত্বে থাকা সিস্টেমের স্থিতির সর্বদা আপনার নিয়ন্ত্রণ রাখতে হবে। হ্যাঁ, কিছু দায়িত্ব অ্যাপ্লিকেশন সার্ভার এবং আইওসিতে স্থানান্তরিত হয়েছিল। তবে আমি সে বিষয়ে কথা বলছিলাম না।
oopexpert

5

System.exit দরকার

  • যখন আপনি একটি অ -0 টি ত্রুটি কোডটি ফিরে আসতে চান
  • যখন আপনি কোথাও থেকে আপনার প্রোগ্রামটি প্রস্থান করতে চান যা মূল নয় ()

আপনার ক্ষেত্রে, এটি সাধারণ-থেকে-প্রধান-এর মতো একই জিনিসটি করে।


পরেরটির সাথে কী বোঝাতে চেয়েছেন? প্রোগ্রামটি বন্ধ করার যথাযথ উপায়টি সমস্ত থ্রেড (দুর্দান্তভাবে) বন্ধ করা হচ্ছে, এমন একটি পদক্ষেপ যা মূল থ্রেড থেকে শুরু করা উচিত নয়, সুতরাং এটি exitসেখানে আপনার একমাত্র বিকল্প নয়।
বার্ট ভ্যান হিউকেলোম

@Bart: তোমরা যা বলছ হয় সম্ভাব্য উপায় এক একটি প্রোগ্রাম, না শাট ডাউন সঠিক ভাবে । সমস্ত থ্রেড সুন্দরভাবে বন্ধ করতে শাটডাউন হুক ব্যবহার করার ক্ষেত্রে কোনও ভুল নেই। এবং শাটডাউন হুকগুলি চালু করা হয়েছে exit। একমাত্র বিকল্প নয়, তবে অবশ্যই বিবেচনার জন্য একটি বিকল্প।
জুনাস পুলক্কা

তবে আমি ডক্স থেকে যা সংগ্রহ করি, শাটডাউন হুকগুলি খুব সূক্ষ্ম হয় এবং আপনি যা করতে চান তা করতে খুব বেশি সময় নাও লাগতে পারে। কোনও উপায়ে, ওএস শাটডাউন বা অন্য কোনও ক্ষেত্রে সুন্দরভাবে প্রস্থান করতে এগুলি ব্যবহার করুন, তবে আপনি যদি নিজেকে System.exit () কল করতে চলেছেন তবে আমি মনে করি শটডাউন কোডটি এর আগে করানো ভাল (যার পরে সম্ভবত আপনি তা করবেন না)
System.exit

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

অন্যান্য অ-ডেমন থ্রেড থাকলে মূল থেকে ফিরে আসা বন্ধ হবে না।
djechlin

4

জাভা ল্যাঙ্গুয়েজ স্পেসিফিকেশন বলে যে

প্রোগ্রাম প্রস্থান

একটি প্রোগ্রাম তার সমস্ত ক্রিয়াকলাপ বন্ধ করে দেয় এবং যখন দুটি জিনিসের মধ্যে একটির ঘটনা ঘটে তখন উপস্থিত হয়:

ডেমন থ্রেড নয় এমন সমস্ত থ্রেড সমাপ্ত হয়।

কিছু থ্রেড ক্লাস রানটাইম বা ক্লাস সিস্টেমের প্রস্থান পদ্ধতির জন্য আহ্বান জানায় এবং প্রস্থানটি পরিচালনা ব্যবস্থার দ্বারা নিষিদ্ধ করা হয়।

এর অর্থ হ'ল আপনার যখন বড় প্রোগ্রাম থাকে (তবে এটির চেয়ে আরও বড় হতে পারে) আপনার ব্যবহার করা উচিত এবং এর সম্পাদন শেষ করতে চান।


3

আপনার যদি জেভিএম-তে অন্য একটি প্রোগ্রাম চলছে এবং আপনি সিস্টেম.এক্সিট ব্যবহার করেন, তবে দ্বিতীয় প্রোগ্রামটিও বন্ধ হয়ে যাবে। উদাহরণস্বরূপ কল্পনা করুন যে আপনি একটি গুচ্ছ নোডে জাভা কাজ চালাচ্ছেন এবং যে জাভা প্রোগ্রামটি ক্লাস্টার নোড পরিচালনা করে একই জেভিএম-তে চলে। যদি চাকরীটি System.exit ব্যবহার করে তবে এটি কেবল চাকরিটি ছাড়বে না বরং "সম্পূর্ণ নোডটি বন্ধ করবে"। পরিচালনা প্রোগ্রামটি দুর্ঘটনাক্রমে বন্ধ হয়ে যাওয়ার পরে আপনি সেই ক্লাস্টার নোডে অন্য কোনও কাজ পাঠাতে পারবেন না।

অতএব, আপনি একই JVM এর মধ্যে অন্য জাভা প্রোগ্রাম থেকে আপনার প্রোগ্রামটি নিয়ন্ত্রণ করতে সক্ষম হতে চাইলে System.exit ব্যবহার করবেন না।

উদ্দেশ্য অনুযায়ী সম্পূর্ণ JVM বন্ধ করতে চাইলে এবং অন্যান্য উত্তরগুলিতে বর্ণিত সম্ভাবনার সুযোগগুলি ব্যবহার করতে চাইলে System.exit ব্যবহার করুন (উদাহরণস্বরূপ শাট ডাউন হুক: জাভা শাটডাউন হুক , কমান্ড লাইনের জন্য শূন্য-বিহীন মান) কলগুলি: উইন্ডোজ ব্যাচ ফাইলে জাভা প্রোগ্রামের প্রস্থান স্থিতি কিভাবে পাবেন )।

রানটাইম ব্যতিক্রমগুলিও দেখুন: System.exit (num) বা মূল থেকে রানটাইম এক্সেকশন নিক্ষেপ করবেন?

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