প্রক্রিয়া হত্যা না করে প্রক্রিয়া কোর ডাম্প


12

একটি উপায় আছে আসলে প্রসেস হত্যা ছাড়া একটি কোর ডাম্প (অথবা কিছু অনুরূপ) একটি প্রক্রিয়ার জন্য পাওয়া যাবে না? আমি একটি মাল্টি পাইথন প্রক্রিয়া একটি এমবেডেড সিস্টেমের উপর চলমান আছে। এবং আমি (অর্থাত চলমান হতে করা প্রয়োজন প্রক্রিয়া সহ) স্বাভাবিক অবস্থার অধীনে প্রক্রিয়া একটি স্ন্যাপশট পেতে সক্ষম হতে চান, কিন্তু আমি কানেক্ট GDB এর সংগে পর্যাপ্ত মেমরি না থাকে (অথবা GDB অধীনে এটি চালানোর) পাইথন প্রক্রিয়া ছাড়া একমাত্র চলমান হচ্ছে।

আমি আশা করি এই প্রশ্নটি বোধগম্য হবে।


এই শুধুমাত্র তুমি ডিবাগিং যখন, আপনি একটি NFS- র ফাইল বা একটি নেটওয়ার্ক ব্লক ডিভাইসে swap 'র মত পাগল কিছু বিবেচনা করেছেন কেন?
গিলেজ 'SO- স্টপ হচ্ছে মন্দ'

উত্তর:


13

স্বাভাবিক কৌশলটি হ'ল কোনও কিছু (সম্ভবত একটি সংকেতের মতো SIGUSR1) প্রোগ্রামটির দিকে চালিত করা fork(), তারপরে শিশু abort()নিজেকে ডাম্প কোর করার জন্য ডেকে আনে।

from os import fork, abort
(...)
def onUSR1(sig, frame):
    if os.fork == 0:
        os.abort

এবং আরম্ভের সময়

from signal import signal, SIGUSR1
from wherever import onUSR1
(...)
signal.signal(signal.SIGUSR1, wherever.onUSR1)

এইভাবে ব্যবহৃত হয়েছে, forkঅতিরিক্ত অতিরিক্ত মেমরি ব্যবহার করবে না কারণ ঠিকানার প্রায় সমস্ত জায়গাই ভাগ হয়ে যাবে (যার কারণে এটি কোর ডাম্প তৈরির জন্য কাজ করে)।

একটা সময় এই কৌতুক নামক একটি প্রোগ্রামের সাথে ব্যবহৃত হয় উপর একবার undumpজটিল আরম্ভের পরে একটি চিত্র সংরক্ষণ করার জন্য একটি কোর ডাম্প থেকে একটি এক্সিকিউটেবল জেনারেট করতে; emacsএই কাজ করতে কাছ থেকে একটি লোড ইমেজ জেনারেট করতে ব্যবহৃত temacs


5

আপনি ব্যবহার করার চেষ্টা করতে পারে gcore। এটা কি আপনার জন্য একটি বিকল্প?


একসময় gcore একটি একা থাকা প্রোগ্রাম ছিল তবে আমি মনে করি না এটি আর gdb প্যাকেজের অংশ - তবে আপনি gdb --pid = <PID> চালাতে পারেন এবং তারপরে একটি কোর ফাইল ডাম্প করার জন্য এটি gcore কমান্ডটি ব্যবহার করতে পারেন। gcore.c একটি মোটামুটি সহজ প্রোগ্রাম যা আপনি হালকা কিছু ওজন চাইলে সহজেই googlable।
synthesizerpatel
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.