c - No such process - ptrace -
समस्या बयान : एक प्रोग्राम सी एक लूप से बना है इस कार्यक्रम का निष्पादन अन्य प्रक्रियाओं द्वारा नियंत्रित किया जाना चाहिए जो समय-समय पर नियंत्रित प्रक्रिया की प्रगति प्रदर्शित करेगा। kill (pid, SIGSTOP) के बाद,
फ़ंक्शन ptrace (PTRACE_PEEKTEXT, pid, ...)
अब C प्रक्रिया नहीं मिलती है pid
द्वारा पहचाने जाने वाली प्रक्रिया को रोक दिया गया है जब मैंने पढ़ा है, ptrace (PTRACE_PEEKTEXT, pid, ...
) से काम करना है।
मुझे नहीं पता कि मुझे क्या याद आ रही है, इसलिए किसी भी मदद की सराहना की जाएगी। नीचे मैंने बहुत कुछ किया है:
दो प्रक्रियाएं हैं, पी और सी
पहली प्रक्रिया (पी) फोर्क () के माध्यम से दूसरा (सी) बनाता है
सी का कोड ऐसा है:
int i = 0; Int main () {ptrace (PTRACE_TRACEME, 0, NULL, NULL); Printf ("मेमोरी पता =% p", (शून्य *) & amp; i); जबकि (1) {i ++;}}
पी का कोड नीचे है:
{...} स्विच (pid = fork ()) {case 0: / * बच्चे * / अगर (execl ("सी", "", (चार *) NULL) == -1) {दर्पण ("execl"); } टूटना; मामले -1: / * त्रुटि * / प्रतिलिपि ("कांटा"); निकास (EXIT_FAILURE); डिफ़ॉल्ट: / * अभिभावक * / नींद (1); मार (पीआईडी, सिग्स्टॉप); इंतजार (& amp; स्थिति); यदि (WSTOPSIG (स्थिति) == SIGSTOP) {printf ("% s", "बच्चा बाधित था। सम्मिलित मेमोरी पता \ n"); scanf ( "% p" & amp; पते); Printf ("पता =% p", पता); डेटा = ptrace (PTRACE_PEEKTEXT, pid, पता, NULL); अगर (डेटा == - 1) {if (errno) {printf ("% s \ n", "त्रुटि PEEKTEXT \ n"); printf ( "% s \ n", strerror (errno)); } यदि (त्रुटि == ईएसआरसीएच) {printf ("% s \ n", "ESRCH त्रुटि \ n"); } यदि (त्रुटि == ईआईओ) {printf ("% s \ n", "ईआईओ त्रुटि \ n"); }} Printf ("डेटा पुनर्प्राप्त किया गया है:% ld \ n", डेटा); डेटा = ptrace (PTRACE_CONT, पीआईडी, 0, 0); } अगर (विइफिक्इट (स्थिति)) {printf ("[माता-पिता] - बाल का निकास का दर्जा है:% d \ n", WEXITSTATUS (स्थिति)); टूटना; } टूटना; } {...}
आउटपुट है:
- सी से: मेमोरी पता = 0x60104c
- पी से: बाल था बाधित। मेमोरी एड्रेस सम्मिलित करें (अगले में मैं क्या सी मुद्रित करता हूं)
पता = 0x60104c
और त्रुटि है:
त्रुटि PEEKTEXT
ऐसी कोई प्रक्रिया नहीं
ESRCH त्रुटि
*** पुनर्प्राप्त डेटा है: -1
सुनिश्चित करें कि पता चर सही प्रकार का है। मैंने शून्य * पते
के साथ कोशिश की और यह मेरे लिए भी काम किया मुझे पता त्रुटि
int
का उपयोग करके आपकी त्रुटि मिली
Comments
Post a Comment