यह एक ऐसा सवाल है जिसे कई बार संबोधित किया गया है, न केवल यहां, बल्कि स्टैक एक्सचेंज नेटवर्क की अन्य साइटों में भी (जैसे कि मैं ssh को बाधित करने पर दूरस्थ प्रक्रिया को मारने के लिए ssh कैसे बनाऊं? )। हालाँकि, मैं मेरे लिए कोई भी समाधान काम नहीं कर सकता।
मैं ssh के माध्यम से एक कमांड चला रहा हूं। जब भी मैं ssh से बाहर निकलता हूं, मैं चाहता हूं कि कमांड भी मर जाए। यह कमांड एक डेमॉन है, जिसे ktserver कहा जाता है, जो कि Ctrl-C दबाने तक अनिश्चित काल तक चलता है।
मैं इसे निम्नानुसार चलाता हूं: ssh -t compute-0-1 ktserverऔर, वास्तव में, जब मैं Ctrl-C दबाता हूं, तो प्रक्रिया इनायत से समाप्त होती है और ssh सत्र समाप्त होता है।
हालाँकि, अगर Ctrl-C दबाने के बजाय, मैं killकमांड का उपयोग करके ssh प्रक्रिया को मारता हूं (उदाहरण के लिए, SIGINT या SIGHUP को भेजना), तो यह ktserverप्रक्रिया जीवित रहती है।
मैं ktserverकैसे sshमारा जा सकता है पर हमेशा मर स्वतंत्र बना सकते हैं ?
संपादित करें : यदि, इसके बजाय, ktserverमैं कुछ पूरी तरह से अलग चलाता हूं, जैसे gedit, सब कुछ एक आकर्षण की तरह काम करता है (यानी जब कनेक्शन मर जाता है)। इसलिए, प्रक्रिया में ही कुछ गड़बड़ हो सकती है। उदाहरण के लिए, मैंने सोचा कि यह SIGHUP या SIGINT की अनदेखी कर सकता है। हालांकि, जब मैं दौड़ता हूं kill -1 ktserverया kill -2 ktserver, प्रक्रिया उम्मीद के मुताबिक मर जाती है।
EDIT2 : जैसा कि मार्क प्लॉटनिक बताते हैं, मुद्दा इस तथ्य से संबंधित है कि ssh चैनल पर कोई संचार प्रसारित नहीं होता है। मैंने ssh -t <host> readssh प्रक्रिया को बाद में चलाने और मारने की पुष्टि की है । readअभी भी जीवित था और लात मार रहा था।
ssh example.com dd ...कुछ घंटे बाद तक नौकरियां चली sshगईं। यदि आप ktserverथोड़ी देर में एक बार कुछ आउटपुट करने के लिए विकल्प लेने के लिए बदल सकते हैं , तो यह एक वर्कअराउंड हो सकता है।
readदूरस्थ कंप्यूटर में चलने की कोशिश की है , और ssh कनेक्शन को मारने के बाद, readमर नहीं गया। दुर्भाग्य से, मैं कुछ भी उत्पादन करने के लिए ktserver नहीं बदल सकता। फिर कोई हल नहीं है?
shopt -s huponexit)। क्या आप परीक्षण कर सकते हैं यदि यह आपके लिए काम करता है?
kill -9 ktserver?