पर लिनक्स अवरुद्ध संकेत यह मेरी अन्य पोस्ट Installing signal handler with Python का अनुवर्ती है। संक्षेप में, लिनक्स पीआईडी 1 (सिगकिल समेत) के सभी संकेतों को अवरुद्ध करता है जब तक कि इनिट ने किसी विशेष सिग्नल के लिए सिग्नल हैंडलर स्थापित नहीं किया हो; कर्नेल आतंक को रोकने के लिए अगर कोई पीआईडी 1 को समाप्ति संकेत भेजना चाहता था। मेरे पास जो मुद्दा है, ऐसा लगता है कि पाइथन में signal
मॉड्यूल सिग्नल हैंडलर को सिस्टम पहचानने के तरीके में स्थापित नहीं करता है। मेरी पायथन इनिट स्क्रिप्ट सभी संकेतों को पूरी तरह से अनदेखा कर रही थी, क्योंकि मुझे लगता है कि उन्हें अवरुद्ध किया जा रहा है।पाइथन इनिट
मुझे लगता है कि एक समाधान मिला है; libc में signal()
फ़ंक्शन के साथ सिग्नल हैंडलर स्थापित करने के लिए ctypes
का उपयोग करके (इस मामले में uClibc)। नीचे एक अजगर आधारित परीक्षण init है। यह टीटीवी 2 पर एक खोल खोलता है जिससे मैं परीक्षण के लिए पीआईडी 1 को सिग्नल भेज सकता हूं। यह परीक्षण के लिए उपयोग कर रहे केवीएम आईएम में काम करता है (मैं रुचि रखने वाले किसी के साथ वीएम साझा करने के लिए तैयार हूं)
क्या यह इस मुद्दे के आसपास सबसे अच्छा तरीका है? सिग्नल मॉड्यूल के बिना सिग्नल हैंडलर स्थापित करने के लिए 'बेहतर' तरीका है? (मैं पोर्टेबल से बिल्कुल चिंतित नहीं हूं)
क्या यह पाइथन में एक बग है?
#!/usr/bin/python
import os
import sys
import time
from ctypes import *
def SigHUP():
print "Caught SIGHUP"
return 0
def SigCHLD():
print "Caught SIGCHLD"
return 0
SIGFUNC = CFUNCTYPE(c_int)
SigHUPFunc = SIGFUNC(SigHUP)
SigCHLDFunc = SIGFUNC(SigCHLD)
libc = cdll.LoadLibrary('libc.so.0')
libc.signal(1, SigHUPFunc) # 1 = SIGHUP
libc.signal(17, SigCHLDFunc) # 17 = SIGCHLD
print "Mounting Proc: %s" % libc.mount(None, "/proc", "proc", 0, None)
print "forking for ash"
cpid = os.fork()
if cpid == 0:
os.closerange(0, 4)
sys.stdin = open('/dev/tty2', 'r')
sys.stdout = open('/dev/tty2', 'w')
sys.stderr = open('/dev/tty2', 'w')
os.execv('/bin/ash', ('ash',))
print "ash started on tty2"
print "sleeping"
while True:
time.sleep(0.01)
यह वास्तव में codereview.SE पर है, लेकिन पाइथन में 'init' को लागू करने के अच्छे विचार के लिए +1 है। –
मैंने सोचा कि शायद मुझे कहां पोस्ट करना चाहिए, लेकिन मैं ऐसा करने के इस तरीके पर सेट नहीं हूं और सोचा कि ऐसे कई विचार हो सकते हैं जिनके बारे में मैंने सोचा था। – tMC