Saya sedang mengembangkan aplikasi dan saya ingin mencetak beberapa statistik runtime ke konsol sesuai permintaan. kill
dan sinyal datang ke pikiran saya segera.
Membaca sinyal Unix di Wiki, SIGINFO
sepertinya 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:
- Mengapa ada yang
SIGINFO
hilang di sistem saya? Apakah tidak ada di semua sistem GNU Linux? - 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?
- 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?
^T
muncul di outputstty -a
?dd
dengan itu di Mac saya.^T
selamadd
eksekusi tidak melakukan apa pun pada mesin Linux - Saya akan memperbarui pertanyaan yang sesuai.Jawaban:
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 info
entri untuk control-T yang menyebabkan kernel dikirimkanSIGINFO
ketty
grup 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.)
sumber
Mengenai pertanyaan Anda 1):
Dari
man 7 signal
pada sistem Linux Arch:Menurut definisi ini,
SIGINFO
hanya tersedia pada arsitektur alpha atau sparc.sumber