GNU Linux'ta SIGINFO (Arch Linux) eksik


12

Bir uygulama geliştiriyorum ve istek üzerine konsola bazı çalışma zamanı istatistikleri yazdırmak istiyorum. killve sinyaller hemen aklıma geldi.

Wiki'deki Unix sinyallerini okumak , SIGINFOgitmek için bir yol gibi görünüyor çünkü:

  • Bu amaçlar için tasarlanmıştır
  • Sinyal işleyici uygulanmazsa işlemi sonlandırmaz (aksine SIGUSRx- buraya bakın )

Ancak, çıktısını inceleyerek, kill -lsunucumda bu sinyalin uygulanmadığı anlaşılıyor.

Sorularım:

  1. SIGINFOSistemimde neden eksik? Tüm GNU Linux sistemlerinde mevcut değil mi?
  2. Bu sinyali etkinleştirmenin kolay (yani çekirdek / glibc yeniden derlemesi yok) yolu var mı? Yoksa, zor yol ne olurdu?
  3. Hedef süreç tarafından ele alınmazsa herhangi bir yan etkiye neden olmayacak amaçlarım için hangi alternatif sinyali kullanabilirim ? ( Glibc'in el kitabında başka uygun bir sinyal bulamadığım için zaten yok sanıyorum )

Linux metainfo:

Linux whatever 3.18.2-2-ARCH #1 SMP PREEMPT Fri Jan 9 07:37:51 CET 2015 x86_64 GNU/Linux

Güncelleme: Hala bu sinyalin neden BSD'den başka sistemlerden şartlı olarak dışlandığına dair daha fazla bilgi arıyorum (aşağıdaki yorumlara bakın). Sinyal birçok amaç için oldukça yararlı görünüyor, bu yüzden bunun bir heves meselesi olduğuna inanmak zor - bu yüzden bu sinyalin Linux'ta mevcut olması için gerçek showtopper nedir?


2
Çıktısında ^Tgörünüyor mu stty -a?
Mark Plotnick

Ah, öyle değil - Mac'imde açıklanan davranışla karıştırılmış olmalıyım dd. yürütme ^Tsırasında ddLinux makinesinde hiçbir şey yapmaz - soruyu buna göre güncelleyeceğim.
Robert Rossmann

Evet, Ctrl-T ve SIGINFO BSD (ve MacOSX) özellikleridir.
Mark Plotnick

Ancak sinyal Linux sistemlerinin kullandığı GNU C Kütüphanesinde tanımlanır ... O zaman bilerek devre dışı bırakılır mı?
Robert Rossmann

1
@RobertRossmann, sinyaller çekirdek tarafından iletilir. Soru şu: Linux çekirdeği neden uygulamıyor (çünkü muhtemelen SysV sinyallerini kopyaladılar).
Ángel

Yanıtlar:


4

Bunu ekleme konuşması yapıldı (linux 0.x-1.x günlerinde) (BSD sistemlerinde faydalı olduğu için), ancak doğru hatırlıyorsam, Linux'ta o zaman BSD'den daha doğru yapmak daha zor oldu .

Sen ne soruyorsun, sadece özelliği (yani, bir söz ediyoruz küçük bir parçası olduğunu Not stty infosunmak için çekirdek neden kontrol-T girişi SIGINFOiçin ttyo kısmı 'kolay' olduğunu - 'in işlemi grubuna) - ama süreç durumu hakkında çekirdek rapor bilgiye sahip değildir anda çok az şey bunun için herhangi bir destek vardı çünkü (sinyalini işlemek, özellik nedir süreçtir" esas ilgiliydi "Bu süreç eğirme veya asılı" ve Yine de ") daha zor - ISTR bile bu bilgileri doğru bir şekilde görüntüleme ve Güvenli Dikkat Anahtarı yolu ile ilişkilendirilip ilişkilendirilmeyeceği konusunda güvenlik / güven sorunları var. Bununla birlikte, "kolay" versiyonda sadece sinyali gönderen bir değer olabilir ...

(Kişisel hafızadan; hızlı bir web araması bariz bir şey ortaya çıkarmaz, ancak tartışmayı bulmak için gerçekten eski arşivlere girmeniz gerektiğini düşünüyorum .)


1

Sorunuzla ilgili olarak 1):

Gönderen man 7 signalArch Linux sistemi üzerinde:

SIGINFO 29, - - eşanlamlıdır SIGPWR

...

(Sinyal 29 olan SIGINFO / SIGPWR alfa ancak ilgili SIGLOST sparc.)

...

SIGPWR (POSIX.1-2001'de belirtilmeyen) genellikle göründüğü diğer UNIX sistemlerinde varsayılan olarak yok sayılır.

Bu tanım gereği, SIGINFOyalnızca alfa veya sparc mimarilerinde kullanılabilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.