উপ-প্রক্রিয়াতে সিআরটিএল + সি স্ক্রিপ্টের আগে নোহপড প্রক্রিয়াটিকে হত্যা করছে


15

আমি জানতাম না যে এটি এসও-তে অন্তর্ভুক্ত কিনা (যেহেতু এটি একটি কোডিং বাগ) তবে ভেবেছিলাম যে ছেলেরা ব্যবহৃত সফ্টওয়্যারটির সূক্ষ্মতা সম্পর্কে আরও জ্ঞানী হতে পারে (তাই সম্ভবত ইউএন্ডএলও বিবেচনা করা যেতে পারে)।

এখানে নূন্যতম কোড স্ক্রিপ্ট (সম্পূর্ণ স্ক্রিপ্টের সম্পাদনাগুলি দেখুন, আমি এটি এইভাবে করছি এর কারণ রয়েছে);

#/bin/bash
nohup {SERVERCOMMAND} > currentOutput.log 2>&1 &

less +F currentOutput.log

এটি যা করার চেষ্টা করে তা হ'ল ব্যাকগ্রাউন্ডে একটি সার্ভার চালানো যা কোনও লগ ফাইলে আউটপুট দেয়।
তারপর আমি followযে লগ ফাইল ব্যবহার করে less +F। এটি করার জন্য, এটি থেকে বেরিয়ে আসার জন্য আপনাকে আঘাত করার আগে অবশ্যই ctrl+ cটিপুন Q

কি হবে, আমি ctrl+ + cভিতরে lessকমান্ড (স্টপেজ tailing) এটি একরকম সার্ভার দিয়ে শুরু নিহত nohupউপরের! অন্য কিছু প্রভাবিত হয় না। আমি করতে shift+ + fআবার লগ পিছাড়ী শুরু করার জন্য (যা কোন নতুন তথ্য পায় যেহেতু সার্ভার মারা যায়) এবং যদি আমি আঘাত Qস্ক্রিপ্ট, executes বাকি স্বাভাবিকভাবে।

কেন এমন হয় জানেন? কীভাবে এটি এড়ানো যায় / আমার অন্য কিছু ব্যবহার করা উচিত?


পিএস
সার্ভার প্রোগ্রামটি হয়ত শুনছে ^C, যা সমস্যা হতে পারে; আমি কি থামাতে কিছু করতে পারি? যেমন, যখন আমি কেবল {SERVERCOMMAND}এটির নিজের ( দৌড়ানোর উপায়ে) চালাচ্ছি, তখন আমি মারতে পারি ctrl+ cযা তাৎক্ষণিকভাবে এটি হত্যা করে না; এটা ছাপে Received ^C signal, shutting down(এবং তারপর নিজেই নিহত)। এই যখন আমি কি ঘটছে হয় ^Cমধ্যে less(একটি চূড়ান্ত Received ^C signal, shutting downলগ লেখা হয়)।


পিপিএস
আমি অনেকগুলি জিনিস চেষ্টা করে দেখছি (কোনওটিই কাজ হয়নি);

  • পরিবর্তন করে স্ট্রিডটি স্ক্রিপ্ট থেকে সংযোগ বিচ্ছিন্ন করার চেষ্টা করছি

    nohup {SERVERCOMMAND} > currentOutput.log 2>&1 &
    to
    nohup echo '' | {SERVERCOMMAND} > currentOutput.log 2>&1 &
    or
    nohup cat /dev/null/ | {SERVERCOMMAND} > currentOutput.log 2>&1 &
  • stty intr ^Gবিঘ্নিত কমান্ড প্রতিস্থাপন করতে ব্যবহার করে , কিন্তু তারপরে ctrl+ যাইহোক যাইহোক gযা ^Cকরছিল ঠিক তাই করেছিল (সুতরাং এটির পরিবর্তে আমার টার্মিনাল এমুলেটরের সাথে এটি একটি সমস্যা হতে পারে; konsole)

  • স্থাপন nohupও / অথবা lessবন্ধনীর মধ্যে লাইন (এটি একটি subshell করতে)

  • xtermপরিবর্তে স্ক্রিপ্ট চলমানkonsole


আমার সমস্যাটি কেউ আসতে পারে ; I think it is due to the handling within the database software, not on the shell। কিভাবে একটি প্রোগ্রাম এটি করবে? তাহলে, আমি কীভাবে এটি বন্ধ করব?
হাশব্রাউন

3
nohupSIGHUPসিটিআরএল + সি SIGINTসংকেত প্রেরণ করলেও প্রক্রিয়াটি সংকেত পেতে বাধা দেয় । এজন্য nohupআপনার প্রত্যাশিত প্রভাব নেই।
পাইওটার ডব্রোগোস্ট

উত্তর:


11

আমি ভেবেছি ঠিক ছিলাম যে এটি SIGINTযখন সমস্ত প্রক্রিয়াতে প্রেরণ করা হয়েছিল তখন ctrl+ c, কিন্তু আমি নির্বোধ ছিলাম যে অন্য প্রক্রিয়াটি এটিকে বাইরে এনে দেবে process group(আমার প্রচেষ্টা দেখুন P.P.S.)।

এটি কেবল সঠিক ব্যবহারের ক্ষেত্রে নয়, সঠিক সমাধান।

আমার স্ক্রিপ্টটি কীভাবে উত্তরটির কাঠামো তৈরি হয়েছিল তার কারণটি ভারব্যাটিমের সাথে খাপ খায়নি, এটি এখন স্ক্রিপ্ট;

#/bin/bash

setsid {SERVERCOMMAND} > currentOutput.log 2>&1 &
less +F currentOutput.log

সার্ভারটি আই ctrl+ ইন করার পরে লগ ফাইলে আউটপুট দিতে cথাকে less

সবার সময়ের জন্য ধন্যবাদ


0

আপনি অস্বীকার করার চেষ্টা করেছেন ?

  disown -h %1

বা আপনার কাজ যাই হোক না কেন; অস্বীকার হ'ল একটি অন্তর্নির্মিত শেল, এর ম্যান পৃষ্ঠাতে বলা হয়েছে:

ত্যাজ্য করা

অস্বীকার করুন [-আর] [-হ] [জবস্পেক ...]

বিকল্পগুলি ব্যতীত প্রতিটি জবস্পেক সক্রিয় কাজের সারণী থেকে সরানো হবে। যদি -h' option is given, the job is not removed from the table, but is marked so that SIGHUP is not sent to the job if the shell receives a SIGHUP. If jobspec is not present, and neither the-a 'বা -r' option is supplied, the current job is used. If no jobspec is supplied, the-a' বিকল্পটির অর্থ সমস্ত কাজ মুছে ফেলা বা চিহ্নিত করা; জবস্পেক আর্গুমেন্ট ছাড়াই `-r 'বিকল্পটি চলমান কাজগুলিতে অপারেশনকে সীমাবদ্ধ করে।

সম্পাদনা

মজার বিষয়, আপনার নির্মাণটি আমার আর্চ লিনাক্সে কাজ করে:

 $ cat testm
  #!/bin/sh

  nohup /home/mario/temp/waste & 

  less +F out.log

 $ cat waste
  #!/bin/sh

  while [ 1 ]; do
    find / -print 2>1 1> out.log
  done
  $ ./testm
   nohup: appending output to nohup.out
  $ ps ax | grep waste
    19090 pts/2    S      0:00 /bin/sh /home/mario/temp/waste
    19124 pts/2    S+     0:00 grep waste]
  $

পিএস কমান্ডের আগে আমাকে আউট.লগ ফাইলটি স্ক্রোল করতে হয়েছিল, তারপরে Ctrl+C, তারপরে q


হ্যাঁ, তবে আমি এটি প্রয়োগ করতে জানি না। আমি নিজেই nohupকোনও ফাংশনে লাইন স্থাপনের চেষ্টা করেছি disowns, তবে এটির মতো হওয়া উচিত nohup। আমি মনে করি এটি কোনও SIGHUPসমস্যা নয়, যেমন আমি lessলাইনটি সরিয়ে দিই , স্ক্রিপ্টটি এখনও সার্ভারের সাথে শেষ হয়
হ্যাশব্রাউন

@ হ্যাশব্রাউন প্লিজ আমার সম্পাদনা দেখুন
মারিউস ম্যাটুটিয়ায়

হ্যাঁ, আমি একটি পরীক্ষাও করেছি, যার সাথে {সার্ভার} এক্সিকিউটেবলের পরিবর্তে একটি সরল বাশ স্ক্রিপ্ট কল করা হয়েছিল। এবং nohup ঠিক কাজ করেছেন। প্রশ্নে আমার মন্তব্য দেখুন। আমি মনে করি এটি উদ্দেশ্যমূলকভাবে কোনওভাবে শুনছে। যেহেতু এটির স্বতন্ত্রতা (এবং সুপরিচিত নয়) সার্ভারটি আমি এটি বলতে পারি না তবে এটি কেউ কীভাবে যেতে পারে "ওহ এটি করছে এক্স, আপনাকে ওয়াই করতে হবে"
হ্যাশব্রাউন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.