Ssh অধিবেশন থেকে চালিত প্রোগ্রামগুলি কি সংযোগের উপর নির্ভর করে?


29

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

এবং যদি এটি সংযোগের উপর নির্ভর করে, উদাহরণস্বরূপ এটি কী স্ক্রিন বা বাইবু দিয়ে ঘটে ? যেহেতু এইগুলি দিয়ে প্রোগ্রামগুলি হোস্ট থেকে সংযোগ বিচ্ছিন্ন করার পরেও চলমান রাখা হয়।


দ্রষ্টব্য: আমি কেবল এই সম্পর্কিত প্রশ্নগুলি পেয়েছি:


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

উত্তর:


26

প্রোগ্রামগুলির আউটপুটটি বাফার করা হয়, সুতরাং সংযোগটি ধীরে ধীরে হলে বাফারটি পূরণ করলে প্রোগ্রামটি বন্ধ হয়ে যায়।

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


9

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

ইউনিক্স টার্মিনাল মডেলটিতে, যখন টার্মিনাল সংযোগটি ফেলে দেওয়া হয়, টার্মিনাল ড্রাইভার একটি HUP সিগন্যাল প্রেরণ করে শেলকে করে, যার সমাপ্তির ফলে শেল চলমান প্রসেসগুলিতে একটি SIGHUP প্রেরণ করা হয়।

থেকে ইউনিক্স প্রোগ্রামার প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী , আইটেম 1.15:

SIGHUPএকটি সংকেত যার অর্থ, সম্মেলনের মাধ্যমে, "টার্মিনাল লাইনটি স্তব্ধ হয়ে যায়" " এর প্যারেন্ট প্রসেসগুলির সাথে কোনও সম্পর্ক নেই এবং এটি সাধারণত চালকরা চালক দ্বারা উত্পাদিত হয় (এবং অগ্রভাগ প্রক্রিয়া গোষ্ঠীতে সরবরাহ করা হয়)।

তবে সেশন ম্যানেজমেন্ট সিস্টেমের অংশ হিসাবে ঠিক সেখানে দুটি SIGHUPপ্রক্রিয়া রয়েছে যেখানে কোনও প্রক্রিয়া মারা যাওয়ার পরে প্রেরণ করা হয়:

  • প্রক্রিয়াটি যখন মারা যায় তখন কোনও টার্মিনাল ডিভাইসের সাথে সংযুক্ত একটি সেশনের সেশন লিডার হয় SIGHUP, সেই টার্মিনাল ডিভাইসের অগ্রভাগ প্রক্রিয়া গোষ্ঠীর সমস্ত প্রক্রিয়াতে প্রেরণ করা হয়।

  • যখন কোনও প্রক্রিয়াটির মৃত্যুর ফলে কোনও প্রক্রিয়া গোষ্ঠী এতিম হয় এবং এতিম গোষ্ঠীর এক বা একাধিক প্রক্রিয়া বন্ধ হয়ে যায়SIGHUP এবং তারপরে SIGCONTএতিম গোষ্ঠীর সমস্ত সদস্যদের কাছে প্রেরণ করা হয়। (একটি অনাথ প্রক্রিয়া গ্রুপ এমন একটি যেখানে গ্রুপের কোনও প্রক্রিয়াটির পিতামাতারা নেই যা একই অধিবেশনটির অংশ, তবে একই প্রক্রিয়া গোষ্ঠী নয়))

SIGHUP জন্য ডিফল্ট সংকেত হ্যান্ডলার প্রক্রিয়া বিনষ্ট হল:

Signal     Value     Action   Comment
----------------------------------------------------------------------
SIGHUP        1       Term    Hangup detected on controlling terminal
                              or death of controlling process

প্রক্রিয়া সমাপ্তি এড়ানো সম্ভব, যদিও।

  • আপনি সিগন্যাল হ্যান্ডলার সন্নিবেশ করতে পারেন যা সাইনআপটিকে উপেক্ষা করে। ব্যবহারকারী হিসাবে এটি করতে, কমান্ডটি মোড়কে দিন nohup। উদাহরণ স্বরূপ:

    nohup make all &
    
  • আপনি শেলটিকে এটি থেকে কোনও শিশু প্রক্রিয়া বিচ্ছিন্ন করতে বলতে পারেন। উদাহরণস্বরূপ, বাশের একটি disownবিল্ট-ইন কমান্ড রয়েছে:

    make all
    

    CtrlZ

    bg
    disown %1
    

    তারপরে, SIGHUP সন্তানের কাছে প্রচার করা হবে না (যা এখন আর শিশু নয়)।

  • কিছু প্রোগ্রাম, উল্লেখযোগ্যভাবে ডেমনস , স্বয়ংক্রিয়ভাবে উপরের প্রক্রিয়াগুলি ব্যবহার করবে: একটি প্রোগ্রাম একটি বিকল্প সিএইচইচপি হ্যান্ডলার (ব্যবহার করে sigaction(2)) ইনস্টল করতে পারে বা এটি একটি নতুন অধিবেশন ( setsid(2)) এ যোগদানের জন্য বেছে নিতে পারে ।
  • আপনি চালাতে পারেন screenবা tmux, যা একটি শেল দিয়ে একটি সেশন চালনার জন্য সিউডো-টিটিওয়াই বরাদ্দ করে যা এসএসএইচ সংযোগটি মারা গেলে SIGHUP পায় না। SIGHUP এসএসএইচ সেশন থেকে স্ক্রিন / টিএমউक्स সেশনে রিলে হয় না।

ঘটনাক্রমে, অবিশ্বাস্য এসএসএইচ সংযোগগুলি মোকাবেলার একটি বিকল্প উপায় পরিবর্তে মোশ প্রোটোকল ব্যবহার করা। মোশ ইউডিপি-র উপর দিয়ে চলেছে, তাই কোনও টিসিপি সংযোগ নেই যা রিসেট হওয়ার ঝুঁকিপূর্ণ।



1

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

নোট করুন আউটপুট অগত্যা টার্মিনালে যেতে পারে না: এরকম কিছু চালানো বিবেচনা করুন

ssh user@somewhere "cat file.txt" > file.txt

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

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

ম্যান পৃষ্ঠা থেকে:

ননব্লক [অন | অফ | নামস্যাকস]

আউটপুট গ্রহণ করা বন্ধ করে দেয় এমন ব্যবহারকারী ইন্টারফেস (প্রদর্শন) এর সাথে কীভাবে ডিল করবেন তা স্ক্রিনটি বলুন। এটি ঘটতে পারে যদি কোনও ব্যবহারকারী ^ S বা টিসিপি / মডেম সংযোগটি টিপে ফেলে তবে কোনও হ্যাঙ্গআপ না পাওয়া যায়। যদি ননব্লকটি বন্ধ থাকে (প্রদর্শন এটি ডিফল্ট) আউটপুট গ্রহণের জন্য ডিসপ্লে পুনরায় আরম্ভ না হওয়া পর্যন্ত স্ক্রিনটি অপেক্ষা করে। যদি ননব্লক চালু থাকে, স্ক্রীনটি সময়সীমা অতিক্রম না হওয়া পর্যন্ত অপেক্ষা করে (অন 1s হিসাবে বিবেচিত হবে)। যদি প্রদর্শনটি এখনও অক্ষর না পেয়ে থাকে তবে স্ক্রিন এটিকে "অবরুদ্ধ" হিসাবে বিবেচনা করবে এবং এতে অক্ষরগুলি প্রেরণ বন্ধ করবে। যদি কোনও সময়ে এটি অক্ষরগুলি গ্রহণ করতে পুনরায় শুরু হয়, স্ক্রিনটি ডিসপ্লেটি অবরোধ মুক্ত করবে এবং আপডেট হওয়া উইন্ডো সামগ্রীগুলি পুনরায় প্রদর্শন করবে।

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

(সেটিং nonblock 1আপনার .screenrcগুরুত্বপূর্ণ যদি আপনি irssi মত এমন কিছু বিষয় যা অবিরত আউটপুট উত্পাদন করা হবে কিন্তু এখনও একই সময়ে নেটওয়ার্কে কুন্ঠিত চালানো হয়। আইআরসি, যা অত্যন্ত বিরক্তিকর থেকে সংযোগ বিচ্ছিন্ন পেয়ে হতে হবে অবরোধ করা হচ্ছে ...)

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