Pitonda bir sinyalin işlenmesi iş akışı nedir? Sinyal işleyicisi kurdum, sinyal oluştuğunda, python işlevimi nasıl çağırıyor? İşletim sistemi tıpkı C programı gibi mi çağırıyor? Eğer bir C python uzatıyorsam, hemen kesiliyor mu?Piton bir sinyali nasıl işler?
Şimdi bana göre, python işlemi bir sinyali nasıl ele alıyor? Sinyal modülü tarafından bir sinyal belirlediğinizde, modül işleyicinizi ayarlayan ve bunu 1 (Handlers[sig_num].tripped = 1;
) olarak işaretleyen bir işlev signal_handler ($ src/Modules/signalmodule.c dosyasına bakınız) kaydedecektir, daha sonra python yorumlayıcısına söylemek için Py_AddPendingCall'ı çağırın. Python yorumlayıcısı, işlevinizi ana döngüde çağıran PyErr_CheckSignals'ı çağırmak için Py_MakePendingCalls'ı çağırır (bkz. $ Src/Python/ceval.c). Bu konuda konuşmak isterseniz, bana bildirin: [email protected]
Bu yüzden python yorumlayıcısı sinyali işliyor ve işlevimi çağırıyor. Bunun nasıl olacağını bilmek istiyorum. Ignalmodule.c dosyasını okudum, python funkleri bir diziye eklenir ve PyErr_CheckSignals, işlenenleri çağırır. Ancak, PyErr_CheckSginals işletim sistemi tarafından sinyal gönderildiğinde nerede çağrılır? – renenglish
İşletim sistemi tarafından sinyal gönderildiğinde çağrılmaz. Baskı işleyicileri, yazdırırken, kullanıcı girişini okuyorken, vb. Çalıştırılabildiğinde, yorumlayıcıda çeşitli yerlerde açıkça çağrılır. Bu, kesme işleyici sırasını çalıştırır. – Keith
Thx çok fazla! Şimdi bana göre python süreci bir sinyali nasıl ele alıyor? Sinyal modülü tarafından bir sinyal belirlediğinizde, modül işleyicinizi ayarlayan ve bunu 1 olarak işaretleyen bir signal_handler işlevine (bkz. $ Src/Modules/signalmodule.c) kayıt olur (Handlers [sig_num] .tripped = 1;), daha sonra python yorumlayıcısına söylemek için Py_AddPendingCall'ı çağırın. Python yorumlayıcısı, işlevinizi posta döngüsünde çağıran PyErr_CheckSignals'ı çağırmak için Py_MakePendingCalls'ı çağırır ($ src/Python/ceval.c'ye bakın). – renenglish