এসএসএস সংযোগ নষ্ট হওয়ার পরে আমার উইজেটটি কেন মারা গেল না?


13

আমি sshআমার সার্ভারে এড করে দৌড়ে এসেছি wget -r -np zzz.aaa/bbb/cccএবং এটি কাজ শুরু করে। তারপর (আমার বাড়ীতে) আমার ইন্টারনেট সংযোগ বিঘ্নিত পেয়েছিলাম এবং আমি অভিমানী চিন্তিত হন যে wgetহয়েছে hupPED কারণ sshকানেকশন বিচ্ছিন্ন হয়েছে এবং তাই টার্মিনাল মারা গিয়েছিল। তবে তারপরে আমি sshআমার সার্ভারে এড করেছিলাম বুঝতে পেরেছিলাম যে এটি এখনও চলছে এবং আউটপুটটি রেখে wget.logএবং স্টাফ ডাউনলোড করছে। কেউ কি দয়া করে আমাকে এখানে ব্যাখ্যা করতে পারেন?

এটিই psআমাকে দেয়:

PID   %CPU %MEM    VSZ    RSS TTY     STAT START   TIME COMMAND
32283  0.6 29.4 179824 147088 ?       S    14:00   1:53 wget -r -np zzz.aaa/bbb/ccc

?এর কলামে এর (প্রশ্ন চিহ্ন) অর্থ কী tty?


নোট করুন যে একটি আধুনিক সিস্টেমে চলছে logind, logindব্যবহারকারীর লগ আউট করার সময় ব্যবহারকারীর সমস্ত প্রসেস কিল করা (SIGTERM) এর ডিফল্ট আচরণ হ'ল। সুতরাং এই আচরণটি সিস্টেম-নির্দিষ্ট।
ড্যানিয়েল প্রাইডেন

@ ড্যান আমার সিস্টেমটি উবুন্টু 16.04
ইউকশিমা হুকসাই

2
আমি বিশ্বাস করি উবুন্টু 16.04 একটি সিস্টেমড / লগইনড সিস্টেম, তবে উবুন্টু ডিফল্ট লগইনডনফ স্পষ্টভাবে সেট করে KillUserProcesses=no
ড্যানিয়েল প্রাইডেন

উত্তর:


21

প্রোগ্রামগুলি (এবং স্ক্রিপ্টগুলি) কয়েকটি পছন্দ বাদে বেশিরভাগ সংকেতকে উপেক্ষা করতে বেছে নিতে পারে KILLHUPসংকেত ধরা ও উপেক্ষা করা যদি সফ্টওয়্যার তাই শুভেচ্ছা করা যেতে পারে।

এই থেকে src/main.cএর wgetউৎস (সংস্করণ 1.19.2):

/* Hangup signal handler.  When wget receives SIGHUP or SIGUSR1, it
   will proceed operation as usual, trying to write into a log file.
   If that is impossible, the output will be turned off.  */

আরও কিছুটা নিচে সিগন্যাল হ্যান্ডলারটি ইনস্টল করা আছে:

  /* Setup the signal handler to redirect output when hangup is
     received.  */
  if (signal(SIGHUP, SIG_IGN) != SIG_IGN)
    signal(SIGHUP, redirect_output_signal);

সুতরাং দেখে মনে হচ্ছে wgetযে এটি সিগন্যালটিকে অগ্রাহ্য করছে না HUP, তবে এটি লগ ফাইলে পুনঃনির্দেশিত করে আউটপুট নিয়ে প্রক্রিয়া চালিয়ে যাওয়া বেছে নেয়।


মন্তব্য অনুরোধ করা: অর্থ ?মধ্যে TTYথেকে আউটপুট কলাম psপ্রশ্নে যে wgetপ্রক্রিয়া আর একটি টার্মিনাল / পির TTY সঙ্গে যুক্ত নয়। এসটিএইচ সংযোগটি নামলে টিটিওয়াই চলে গেল।


1
আমার মনে হয় আপনি যদি এর অর্থ যুক্ত করেন তবে এটি কার্যকর হবে? tty মধ্যে
ইউকশিমা হুকসে

হ্যাঁ, এই কঠিন উপায়ে শিখেছি। এসএসএস ড্রপ হলে সমস্ত প্রক্রিয়া মারা যায় না। কেন ঠিক তা জেনে রাখা ভাল।
ডগ

2
পর্যায়ক্রমে, স্ক্রিন এবং কখনও কখনও এইচইপি ব্যবহার করার অভ্যাস তৈরি করুন
হার্পার - মনিকা

8

সরল : wgetবাতিল করা যায় না SIGHUP। এটি চালু SIGTERMএবং SIGINT, যদিও।

manপৃষ্ঠায় কিছুই নেই তবে আপনি যদি SIGHUPকোনও wgetপ্রক্রিয়াতে প্রেরণ করেন তবে আপনি এটি টার্মিনালে পাবেন:

# in a different terminal while wget is running (with PID 12345)
kill -HUP 12345
# in the wget terminal
SIGHUP received.
Redirecting output to 'wget-log'.

1
ধন্যবাদ। আমি মনে করি আপনি kill -HUP pidকীভাবে SIGHUPকোনও প্রক্রিয়াতে প্রেরণ করতে পারেন তা প্রদর্শনের জন্য কমান্ডটি যুক্ত করলে এটি আরও ভাল ।
ইউকশিমা হুকসে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.