SIGINFO di GNU Linux (Arch Linux) hilang

12

Saya sedang mengembangkan aplikasi dan saya ingin mencetak beberapa statistik runtime ke konsol sesuai permintaan. killdan sinyal datang ke pikiran saya segera.

Membaca sinyal Unix di Wiki, SIGINFOsepertinya cara untuk melakukannya karena:

  • Ini dimaksudkan untuk tujuan ini
  • Tidak menghentikan proses jika penangan sinyal tidak diterapkan (bertentangan dengan SIGUSRx- lihat di sini )

Namun, dengan memeriksa output kill -l, sepertinya server saya tidak menerapkan sinyal ini.

Pertanyaan saya adalah:

  1. Mengapa ada yang SIGINFOhilang di sistem saya? Apakah tidak ada di semua sistem GNU Linux?
  2. Apakah ada cara mudah (yaitu tidak ada kompilasi ulang kernel / glibc) untuk mengaktifkan sinyal ini? Jika tidak ada, apa yang akan menjadi jalan yang sulit?
  3. Sinyal alternatif apa yang dapat saya gunakan untuk tujuan saya yang tidak akan menimbulkan efek samping jika tidak ditangani oleh proses target? (Saya sudah mengasumsikan tidak ada karena saya tidak dapat menemukan sinyal lain yang cocok pada manual glibc )

Linux metainfo:

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

Pembaruan: Saya masih mencari informasi lebih lanjut tentang mengapa sinyal ini dikecualikan dari sistem lain selain BSD (lihat komentar di bawah). Sinyal tampaknya cukup berguna untuk banyak tujuan sehingga sulit bagi saya untuk percaya itu hanya masalah kemauan - jadi apa showstopper nyata untuk sinyal ini tersedia di Linux?

Robert Rossmann
sumber
2
Apakah ^Tmuncul di output stty -a?
Mark Plotnick
Ah, tidak - saya pasti keliru dengan perilaku yang dijelaskan dddengan itu di Mac saya. ^Tselama ddeksekusi tidak melakukan apa pun pada mesin Linux - Saya akan memperbarui pertanyaan yang sesuai.
Robert Rossmann
Ya, Ctrl-T dan SIGINFO adalah fitur BSD (dan MacOSX).
Mark Plotnick
Tetapi sinyal ditentukan di Perpustakaan C GNU yang menggunakan sistem Linux ... Apakah itu sengaja dinonaktifkan?
Robert Rossmann
1
@RobertRossmann, sinyal dikirimkan oleh kernel. Pertanyaannya adalah mengapa kernel Linux tidak mengimplementasikannya (karena mereka menyalin sinyal SysV, mungkin).
Ángel

Jawaban:

4

Ada pembicaraan (kembali di linux 0.x-1.x hari) tentang menambahkan ini (karena ini berguna pada sistem BSD) tetapi jika saya ingat dengan benar ada alasan lebih sulit untuk melakukannya dengan benar di Linux daripada BSD pada saat itu .

Perhatikan bahwa apa yang Anda tanyakan hanya sebagian kecil dari fitur (yaitu, Anda berbicara tentang stty infoentri untuk control-T yang menyebabkan kernel dikirimkan SIGINFOke ttygrup proses) - bagian itu "mudah" - tetapi memiliki informasi laporan kernel tentang status proses ketika tidak menangani sinyal (karena pada saat itu sangat sedikit hal yang memiliki dukungan untuk itu, fitur ini terutama tentang "apakah proses ini berputar atau digantung" dan "proses apa itu tetap ") lebih sulit - ISTR bahkan ada masalah keamanan / kepercayaan tentang menampilkan informasi itu secara akurat, dan apakah itu harus dikaitkan dengan jalur Kunci Perhatian Aman. Yang mengatakan, mungkin ada beberapa nilai dalam versi "mudah" yang hanya mengirim sinyal ...

(Dari memori pribadi; pencarian web cepat tidak menemukan sesuatu yang jelas, tetapi saya pikir orang harus menggali arsip yang sangat lama untuk menemukan diskusi.)

Eichin
sumber
1

Mengenai pertanyaan Anda 1):

Dari man 7 signalpada sistem Linux Arch:

SIGINFO 29, -, - Sinonim untuk SIGPWR

...

(Sinyal 29 adalah SIGINFO / SIGPWR pada alpha tetapi SIGLOST pada sparc.)

...

SIGPWR (yang tidak ditentukan dalam POSIX.1-2001) biasanya diabaikan secara default pada sistem UNIX lain di mana ia muncul.

Menurut definisi ini, SIGINFOhanya tersedia pada arsitektur alpha atau sparc.

Guido
sumber