2009-10-02 12 views
13

मैं एक कार्यक्रम एक दूरस्थ मशीन जो माता पिता से SIGINT प्राप्त करने की उम्मीद पर चल रहे हैं। उस कार्यक्रम को उस सिग्नल को सही ढंग से कार्य करने की आवश्यकता है। दुर्भाग्य से, अगर मैं SSH पर कि प्रक्रिया को चलाने के दूर से और SIGINT, भेज ssh प्रक्रिया ही जाल और संकेत भेजते बजाय बीच।एसएसएच पर एक दूरस्थ प्रक्रिया के लिए SIGINT कैसे भेजें?

स्थानीय स्तर पर चल रहा है::

 
$ gdb 
GNU gdb 6.3.50-20050815 (Apple version gdb-1344) (Fri Jul 3 01:19:56 UTC 2009) 
... 
This GDB was configured as "x86_64-apple-darwin". 
^C 
(gdb) Quit 
^C 
(gdb) Quit 
^C 
(gdb) Quit 

दूर से चल रहा है:

 
$ ssh foo.bar.com gdb 
GNU gdb Red Hat Linux (6.3.0.0-1.159.el4rh) 
... 
This GDB was configured as "i386-redhat-linux-gnu". 
(gdb) ^C 
Killed by signal 2. 
$ 

किसी को भी इस समस्या को हल काम करने का एक तरीका बता सकते हैं

यहाँ इस व्यवहार GDB का उपयोग करने का एक उदाहरण है? स्थानीय एसएसएच क्लाइंट OpenSSH_5.2p1 है।

उत्तर

21
 
$ ssh -t foo.bar.com gdb 
... 
(gdb) ^C 
Quit 
+1

बिल्कुल सही। बस। धन्यवाद। – Matt

0

आप दूरस्थ मशीन पर एक टर्मिनल चलाने के लिए और kill -INT का उपयोग यह संकेत भेजने के लिए कर सकते हैं?

1

gdb प्रॉम्प्ट पर signal SIGINT की कोशिश करो।

+0

मेरे मामले दूरस्थ कार्यक्रम GDB नहीं है इन का उपयोग करके - मैं सिर्फ इतना है कि उदाहरण का उपयोग कर रहा व्यवहार को वर्णन करने। क्षमा करें कि स्पष्ट नहीं था। (वास्तविक रिमोट प्रक्रिया मानक आईओ पर शतरंज खेलने वाला एक सर्वर है।) धन्यवाद। – Matt

1

ऐसा लगता है कि आप CTRL + C कर रहे हैं। समस्या यह है कि आपकी टर्मिनल विंडो एसआईजीआईएनटी को एसएसएच प्रक्रिया को स्थानीय रूप से चल रही है, रिमोट सिस्टम पर प्रक्रिया के लिए नहीं।

आप मैन्युअल रूप से दूरस्थ सिस्टम पर kill आदेश या सिस्टम कॉल का उपयोग कर एक संकेत यह निर्दिष्ट करना होगा।

या अधिक आसानी से killall

$killall -INT gdb 
+1

दुर्भाग्यवश, व्यवहार वही है जो मैं टर्मिनल में^सी लिखता हूं या मैं एसआईजीआईएनटी को एसएसएचआईटी को मार का उपयोग करके भेजता हूं। – Matt

+1

आपको उस प्रक्रिया में SIGINT भेजना है जिसे आप प्राप्त करना चाहते हैं, न कि आपके एसएसएच सत्र। –