ডেমন তৈরি করার সময় ডাবল কাঁটাচামচ করার কারণ কী?


165

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

কেউ কেউ উল্লেখ করেন যে এটি ডেমনকে একটি নিয়ন্ত্রণকারী টার্মিনাল অর্জন থেকে বাঁচানো। এটি কীভাবে দ্বিতীয় কাঁটাচামচ ছাড়া করবে? ফলাফলগুলি কী কী?



2
দ্বৈত কাঁটাচামচ করার একটি অসুবিধা হ'ল পিতামাতারা সহজেই নাতি-নাতনি প্রসেসের পিআইডি পেতে পারেন না ( fork()কলটি সন্তানের পিআইডি পিতামাতার কাছে ফিরিয়ে দেয়, তাই সন্তানের প্রক্রিয়াটির পিআইডি পাওয়া সহজ, তবে এত সহজ নয়) নাতি প্রক্রিয়াটির পিআইডি পান )।
ক্রেগ ম্যাককুইন

উত্তর:


105

প্রশ্নের উল্লেখ করা কোডটির দিকে তাকানো, ন্যায়সঙ্গততা:

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

সুতরাং এটি নিশ্চিত করা যায় যে ডিমনটি ইন-এর সাথে পুনরায় প্যারেন্টেড হয় (কেবলমাত্র প্রক্রিয়াটি লাঞ্ছিত করার প্রক্রিয়াটি দীর্ঘকাল বেঁচে থাকে), এবং একটি নিয়ন্ত্রণকারী টিটি পুনর্বিবেচনার ডেমনের যে কোনও সম্ভাবনা সরিয়ে দেয়। সুতরাং এই ক্ষেত্রেগুলির কোনওটিই যদি প্রয়োগ না হয় তবে একটি কাঁটাচামচ পর্যাপ্ত হওয়া উচিত। " ইউনিক্স নেটওয়ার্ক প্রোগ্রামিং - স্টিভেন্স " এর একটি ভাল বিভাগ রয়েছে।


28
এটি সম্পূর্ণ সঠিক নয়। ডেমন তৈরির মানক উপায়টি কেবল সহজভাবে করা p=fork(); if(p) exit(); setsid()। এই ক্ষেত্রে, পিতামাতারাও প্রস্থান করেন এবং প্রথম সন্তানের প্রক্রিয়াটি পুনরায় রঙ করা হয়। ডাবল-কাঁটাচামচ যাদু কেবলমাত্র টিটিটি অর্জন থেকে ডেমোনকে আটকাতে প্রয়োজনীয়।
পরজীবী

1
সুতরাং, আমি যেমন বুঝতে পেরেছি, যদি আমার প্রোগ্রামটি শুরু হয় এবং forksকোনও childপ্রক্রিয়া হয়, তবে এই প্রথম শিশু প্রক্রিয়াটি একটি session leaderহবে এবং একটি টিটিওয়াই টার্মিনাল খুলতে সক্ষম হবে। তবে আমি যদি এই শিশুটির কাছ থেকে আবার কাঁটাচামচ করে এই প্রথম সন্তানের অবসান করি তবে দ্বিতীয় কাঁটাযুক্ত শিশুটি একটি session leaderহবে না এবং টিটিওয়াই টার্মিনাল খুলতে সক্ষম হবে না। এই বিবৃতি সঠিক?
টোনিক্স

2
@ টোনিক্স: সহজভাবে কাঁটাচামক একটি অধিবেশন লিডার তৈরি করে না। যে দ্বারা সম্পন্ন করা হয় setsid()। সুতরাং, প্রথম কাঁটাচামচ প্রক্রিয়া কল করার পরে একটি অধিবেশন নেতা হয়ে যায় setsid()এবং তারপরে আমরা আবার কাঁটাচামচ করি যাতে চূড়ান্ত, দ্বি-কাঁটা প্রক্রিয়াটি আর সেশনের নেতা না হয়। setsid()সেশন লিডার হওয়ার প্রয়োজন ব্যতীত আপনারা উপস্থিত রয়েছেন ।
dbmikus

169

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

ইউনিক্সে প্রতিটি প্রক্রিয়া একটি গোষ্ঠীর অন্তর্ভুক্ত যা ঘুরেফিরে একটি সেশনের অন্তর্ভুক্ত। এখানে শ্রেণিবিন্যাস…

সেশন (এসআইডি) → প্রক্রিয়া গ্রুপ (পিজিআইডি) → প্রক্রিয়া (পিআইডি)

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

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

1. `Parent`    = PID: 28084, PGID: 28084, SID: 28046
2. `Fork#1`    = PID: 28085, PGID: 28084, SID: 28046
3. `Decouple#1`= PID: 28085, PGID: 28085, SID: 28085
4. `Fork#2`    = PID: 28086, PGID: 28085, SID: 28085

নোট করুন যে প্রক্রিয়াটি পরে সেশন লিডার Decouple#1, কারণ এটি PID = SID। এটি এখনও একটি টিটিওয়াইয়ের নিয়ন্ত্রণ নিতে পারে।

নোট করুন যে Fork#2এখন আর অধিবেশন নেতা নেই PID != SID। এই প্রক্রিয়াটি কখনই কোনও টিটিওয়াইয়ের নিয়ন্ত্রণ নিতে পারে না। সত্যই ডিমনাইজড।

বিভ্রান্তিকর হওয়ার জন্য আমি ব্যক্তিগতভাবে পরিভাষা কাঁটাচামচটি খুঁজে পাই। আরও ভাল প্রতিমাটি কাঁটাচামড়া-ডিকুবল-কাঁটাচামচ হতে পারে।

আগ্রহের অতিরিক্ত লিঙ্কগুলি:


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

তবে দ্বিতীয়টি ডিকউপল কল করতে এবং সেশন লিডার হতে পারে এবং তারপরে টার্মিনাল অর্জন করতে পারে।
Trismegistos

2
এটি সত্য নয়। প্রথমটি fork()জোব্বিগুলি তৈরি করতে বাধা দেয়, যদি আপনি পিতামাতাকে বন্ধ করেন।
পরজীবী

1
উপরোক্ত উদ্ধৃত ফলাফলগুলি উত্পাদন করার একটি সর্বনিম্ন উদাহরণ: gist.github.com/cannium/7aa58f13c834920bb32c
পারেন।

1
একটি একক setsid() আগে কল করা ভাল হবে fork()? প্রকৃতপক্ষে আমি এই প্রশ্নের উত্তরটি অনুমান করি ।
ক্রেগ ম্যাককুইন

118

কড়া কথায় বলতে গেলে, ডাবল-ফর্কটির সন্তানের হয়ে ডেমনকে পুনরায় প্যারেন্টিংয়ের সাথে কোনও সম্পর্ক নেই init। সন্তানের পুনঃ-পিতামাতার জন্য যা যা প্রয়োজন তা হ'ল পিতামাতার প্রস্থান করা উচিত। এটি কেবল একটি একক কাঁটাচামচ দিয়ে করা যেতে পারে। এছাড়াও, নিজের দ্বারা একটি দ্বি-কাঁটাচামচ করা ডেমন প্রক্রিয়াটির পুনরায় পিতামাতার নয় init; ডেমন এর পিতামাতার অবশ্যই প্রস্থান করতে হবে। অন্য কথায়, ডেমোন প্রক্রিয়াটি পুনরায় প্যারেন্টেড হওয়ার জন্য পিতামাতা সর্বদা সঠিক ডেমোন ফোর করার সময় উপস্থিত হন init

তাহলে কেন ডাবল কাঁটা? POSIX.1-2-2008 ধারা 11.1.3, " নিয়ন্ত্রণকারী টার্মিনাল " এর উত্তর রয়েছে (জোর দেওয়া হয়েছে):

একটি অধিবেশন জন্য নিয়ামক টার্মিনাল একটি বাস্তবায়ন-সংজ্ঞায়িত পদ্ধতিতে সেশন নেতা দ্বারা বরাদ্দ করা হয়। যদি কোনও সেশন নেতার কোনও নিয়ন্ত্রণকারী টার্মিনাল না থাকে এবং একটি টার্মিনাল ডিভাইস ফাইল খোলে যা ইতিমধ্যে O_NOCTTYবিকল্পটি (দেখুন open()) ব্যবহার না করে কোনও সেশনের সাথে সম্পর্কিত নয় , এটি টার্মিনালটি সেশন লিডারের নিয়ন্ত্রণকারী টার্মিনাল হয়ে যায় কিনা তা প্রয়োগ-সংজ্ঞায়িত। যদি কোনও প্রক্রিয়া যা সেশন লিডার না হয় কোনও টার্মিনাল ফাইল খুললে, বা O_NOCTTYবিকল্পটি ব্যবহার করা হয় open(), তবে সেই টার্মিনাল কলিং প্রক্রিয়ার নিয়ন্ত্রণকারী টার্মিনাল হয়ে উঠবে না

এটি আমাদের জানায় যে ডেমন প্রক্রিয়া যদি এরকম কিছু করে ...

int fd = open("/dev/console", O_RDWR);

... তাহলে ডিমন প্রক্রিয়াটি সেশন লিডার কিনা এবং সিস্টেম প্রয়োগের উপর নির্ভর করে ডিমন প্রক্রিয়াটি তার নিয়ন্ত্রণকারী টার্মিনাল হিসাবে অর্জন করতে পারে/dev/console । প্রোগ্রামটি গ্যারান্টি দিতে পারে যে উপরের কলটি কোনও নিয়ন্ত্রণকারী টার্মিনাল গ্রহণ করবে না যদি প্রোগ্রামটি প্রথম নিশ্চিত করে যে এটি কোনও সেশন লিডার নয়।

সাধারণত, ডেমন চালু করার সময়, ডেমনটিকে নিয়ন্ত্রণকারী টার্মিনাল থেকে বিচ্ছিন্ন করার জন্য setsid(কল করার পরে শিশু প্রক্রিয়া থেকে fork) বলা হয়। তবে, কলিংয়ের setsidঅর্থ হ'ল কলিং প্রক্রিয়াটি নতুন অধিবেশনটির সেশন লিডার হবে, যা ডেমন একটি নিয়ন্ত্রণকারী টার্মিনালটির পুনরায় জয় লাভের সম্ভাবনা উন্মুক্ত করে। দ্বৈত-কাঁটাচামচ কৌশলটি নিশ্চিত করে যে ডিমন প্রক্রিয়াটি সেশন লিডার নয়, যা গ্যারান্টি দেয় যে openউপরের উদাহরণ হিসাবে যেমন ডেমন প্রক্রিয়া একটি নিয়ন্ত্রণকারী টার্মিনালটির পুনঃনির্ধারণের ফলাফল দেয় না।

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


3
+1 খুব খারাপ এই উত্তরটি এসেছে - প্রশ্ন জিজ্ঞাসার চার বছর পরে।
টিম সেগুইন

12
তবে এটি এখনও ব্যাখ্যা করে না কেন এটি এত
মারাত্মক

7
মূল শব্দটি হ'ল "অজান্তে" একটি নিয়ন্ত্রণকারী টার্মিনাল অর্জন করে। প্রক্রিয়াটি যদি কোনও টার্মিনাল খোলার জন্য ঘটে থাকে এবং এটি প্রসেসগুলি নিয়ন্ত্রণকারী টার্মিনাল হয়ে ওঠে, যদি কেউ সেই টার্মিনাল থেকে একটি ^ C জারি করে তবে এটি প্রক্রিয়াটি শেষ করতে পারে। সুতরাং কোনও প্রক্রিয়াটি অজান্তেই ঘটতে থেকে রক্ষা করে ভালো লাগতে পারে। ব্যক্তিগতভাবে আমি কোডের জন্য একটি একক কাঁটাচামচ এবং সেটিডের সাথে লেগে থাকব যে আমি জানি যে আমি জানি যে টার্মিনালগুলি খোলার হবে না।
ববডুলিটল

1
@ BobDoolittle কীভাবে এটি "অজান্তে" হতে পারে? কোনও প্রক্রিয়া কেবল উইলি নিলি খোলার টার্মিনালগুলি শেষ না করে যদি এটি করার জন্য লিখিত না হয়। আপনি প্রোগ্রামার কোডটি জানেন না এবং এটি কোনও টাইটি খুলতে পারে কিনা তা যদি আপনি জানেন না তবে ডাবল ফোরিং কার্যকর।
মারিয়াস

10
কল্পনা করুন @Marius যদি আপনি আপনার ডেমন কনফিগারেশন ফাইলে এই মত একটি লাইন যোগ কী ঘটতে পারে: LogFile=/dev/console। প্রোগ্রামগুলি সর্বদা সংকলন-সময় নিয়ন্ত্রণ রাখে না যেগুলি তারা যে ফাইলগুলি খুলতে পারে;)
ড্যান মোল্ডিং

11

খারাপ সিটিকে থেকে নেওয়া :

"ইউনিক্সের কয়েকটি স্বাদে, ডেমন মোডে যাওয়ার জন্য আপনাকে স্টার্টআপে ডাবল ফর্ক লাগাতে বাধ্য করা হয় This এটি কারণ সিঙ্গল ফোরকিং নিয়ন্ত্রণকারী টার্মিনাল থেকে বিচ্ছিন্ন হওয়ার গ্যারান্টিযুক্ত নয়" "


3
কীভাবে একক কাঁটাচামচ নিয়ন্ত্রণকারী টার্মিনাল থেকে বিচ্ছিন্ন হতে পারে না তবে ডাবল কাঁটাচামচ তা করতে পারে? এটি কোন ইউনিক্সে ঘটে?
বিডোনলান

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

4
@ অ্যারন: না, একটি ডিমন setsidপ্রাথমিক কাঁটাচামচ পরে কল করে তার নিয়ন্ত্রণকারী টার্মিনাল থেকে নিজেকে সঠিকভাবে "বিযুক্ত" করে । এরপরে এটি নিশ্চিত করে যে এটি আবার নিয়ন্ত্রণের মাধ্যমে এবং অধিবেশন লিডারকে (প্রক্রিয়াকে যে প্রক্রিয়া বলে ) বেরিয়ে আসার দ্বারা একটি নিয়ন্ত্রণকারী টার্মিনাল থেকে বিচ্ছিন্ন থাকেsetsid
ড্যান মোল্ডিং

2
@ বিডনলান: এটি forkনিয়ন্ত্রণকারী টার্মিনাল থেকে আলাদা নয় । এটি setsidএটি করে। তবে setsidএটি প্রক্রিয়া গ্রুপের নেতার কাছ থেকে ডাকলে ব্যর্থ হবে fail সুতরাং কোনও প্রক্রিয়া গ্রুপ লিডার নয় এমন প্রক্রিয়া থেকে ডেকে আনা হয়েছে তা নিশ্চিত করার forkআগে অবশ্যই একটি প্রাথমিক কাজ করা উচিত । দ্বিতীয়টি নিশ্চিত করে যে চূড়ান্ত প্রক্রিয়া (যেটি ডিমন হবে) কোনও সেশন লিডার নয়। কেবল অধিবেশন নেতারা একটি নিয়ন্ত্রণকারী টার্মিনাল অর্জন করতে পারেন, সুতরাং এই দ্বিতীয় কাঁটাচামচ গ্যারান্টি দেয় যে ডেমন অযাচিতভাবে একটি নিয়ন্ত্রণকারী টার্মিনালটির পুনরায় জয় করতে পারে না। এটি কোনও পসিক্স ওএসের ক্ষেত্রে সত্য। setsidsetsidfork
ড্যান মোল্ডিং

@ ড্যানমোল্ডিং এটি গ্যারান্টি দেয় না যে দ্বিতীয় শিশু নিয়ন্ত্রণকারী টার্মিনাল অর্জন করবে না কারণ এটি সেটড কল করতে এবং সেশন লিডার হতে পারে এবং তারপরে নিয়ন্ত্রণ টার্মিনাল অর্জন করতে পারে।
ত্রিশমেগিস্টোস

7

"অ্যাডভান্সড প্রোগ্রামিং ইন দ্য ইউনিক্স এনভায়রনমেন্ট" অনুসারে, স্টিফেনস এবং রাগো দ্বারা, দ্বিতীয় কাঁটাচামচটি আরও একটি সুপারিশ, এবং এটি ডিমানি সিস্টেম ভি-ভিত্তিক সিস্টেমগুলিতে একটি নিয়ন্ত্রণকারী টার্মিনাল অর্জন করবে না এমন গ্যারান্টি দেওয়ার জন্য করা হয়।


3

একটি কারণ হ'ল পিতামাতার প্রক্রিয়াটি তাত্ক্ষণিকভাবে সন্তানের জন্য অপেক্ষা_পিড () অপেক্ষা করতে পারে এবং তারপরে এটি ভুলে যেতে পারে। এরপরে যখন গ্র্যান্ড-বাচ্চা মারা যায়, তখন তার পিতা-মাতা দীক্ষা করেন এবং এটি এর জন্য অপেক্ষা করতে হবে - এবং এটি জম্বি রাজ্যের বাইরে নিয়ে যায়।

ফলাফলটি হ'ল পিতা বা মাতা প্রক্রিয়াটি কাঁটা বাচ্চাদের সম্পর্কে সচেতন হওয়ার দরকার নেই, এবং এটি দীর্ঘকালীন চলমান প্রক্রিয়াগুলি libs ইত্যাদি থেকে কাঁটাচামচ করাও সম্ভব করে তোলে etc.


2

ডেমন () কলটি সফল হলে পিতামাতার কল _exit () দেয়। আসল প্রেরণাটি পিতামাতাকে কিছুটা অতিরিক্ত কাজ করার অনুমতি দেওয়া হতে পারে যখন শিশুটি ডিমনোমাইজ করছে।

এটি একটি ভুল বিশ্বাসের ভিত্তিতেও হতে পারে যে ডেমনটির কোনও পিতামাতার প্রক্রিয়া নেই এবং এটি পুনরায় প্রতিস্থাপনযোগ্য তা নিশ্চিত করার জন্য এটি প্রয়োজনীয় - তবে একক কাঁটাচামচ মামলায় পিতামাতার মৃত্যুর পরে এটি যেভাবেই ঘটবে।

সুতরাং আমি মনে করি এগুলি কেবল শেষ পর্যন্ত traditionতিহ্যের দিকে ফোটে - যতক্ষণ না পিতা-মাতা সংক্ষিপ্ত ক্রমে মারা যায় ততক্ষণ একটি একক কাঁটা যথেষ্ট।


2

এটির একটি শালীন আলোচনা http://www.developerweb.net/forum/showthread.php?t=3025 এ প্রদর্শিত হবে

সেখান থেকে ম্ল্যাম্পকিন উদ্ধৃত করে:

... সেটিড () কলটিকে কাজ করার "নতুন" উপায় হিসাবে বিবেচনা করুন (টার্মিনাল থেকে বিচ্ছিন্ন করুন) এবং [দ্বিতীয়] কাঁটাচামচ () এর পরে এসভিআর 4 এর সাথে ডিল করার অপ্রয়োজনীয় হিসাবে কল করুন ...


-1

এইভাবে বোঝা আরও সহজ হতে পারে:

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