Manca SIGINFO su GNU Linux (Arch Linux)


12

Sto sviluppando un'applicazione e mi piacerebbe stampare alcune statistiche di runtime sulla console su richiesta. kille i segnali mi sono venuti immediatamente in mente.

Leggere i segnali Unix su Wiki SIGINFOsembra la strada da percorrere perché:

  • È destinato a questi scopi
  • Non termina il processo se il gestore del segnale non è implementato (contrariamente a SIGUSRx- vedere qui )

Tuttavia, controllando l'output di kill -l, sembra che il mio server non abbia implementato questo segnale.

Le mie domande sono:

  1. Perché SIGINFOmanca sul mio sistema? È assente su tutti i sistemi GNU Linux?
  2. Esiste un modo semplice (ovvero nessuna ricompilazione kernel / glibc) per abilitare questo segnale? Se nessuno, quale sarebbe il modo difficile?
  3. Quale segnale alternativo potrei usare per i miei scopi che non provocherebbe effetti collaterali se non gestito dal processo target? (Ne presumo già nessuna poiché non sono riuscito a trovare nessun altro segnale adatto sul manuale di glibc )

Metainfo Linux:

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

Aggiornamento: sto ancora cercando ulteriori informazioni sul motivo per cui questo segnale è condizionatamente escluso da altri sistemi diversi da BSD (vedere i commenti di seguito). Il segnale sembra essere abbastanza utile per molti scopi, quindi è difficile per me credere che sia solo una questione di capriccio - quindi qual è il vero showtopper per questo segnale disponibile su Linux?


2
Fa ^Tapparire nella produzione di stty -a?
Mark Plotnick,

Ah, non è così - devo aver confuso il comportamento descritto ddcon quello sul mio Mac. ^Tdurante l' ddesecuzione non fa nulla sulla macchina Linux - aggiornerò la domanda di conseguenza.
Robert Rossmann,

Sì, Ctrl-T e SIGINFO sono funzionalità BSD (e MacOSX).
Mark Plotnick,

Ma il segnale è definito nella libreria GNU C che i sistemi Linux usano ... Viene quindi disabilitato di proposito?
Robert Rossmann,

1
@RobertRossmann, i segnali vengono inviati dal kernel. La domanda è: perché il kernel Linux non lo implementa (perché probabilmente hanno copiato i segnali SysV).
Ángel,

Risposte:


4

Si parlava (nei giorni linux 0.x-1.x) di aggiungere questo (perché era utile sui sistemi BSD) ma se ricordo bene c'erano dei motivi per cui era più difficile fare proprio su Linux che BSD al momento .

Nota che quello che stai chiedendo è solo una piccola parte della funzione (vale a dire, stai parlando di una stty infovoce per control-T che fa in modo che il kernel recapiti SIGINFOal ttygruppo di processi) - quella parte è "facile" - ma avere il kernel riporta informazioni sullo stato del processo quando non gestisce il segnale (perché al momento pochissime cose avevano alcun supporto per questo, la caratteristica era principalmente "sta girando o si blocca" e "quale processo è comunque ") è più difficile - ISTR ci sono anche problemi di sicurezza / fiducia nella visualizzazione accurata di tali informazioni e se dovrebbero essere associate al percorso della chiave di attenzione sicura. Detto questo, potrebbe esserci un valore nella versione "facile" che invia solo il segnale ...

(Dalla memoria personale; una rapida ricerca sul web non rivela nulla di ovvio, ma penso che bisognerebbe scavare in archivi davvero vecchi per trovare la discussione.)


1

Per quanto riguarda la tua domanda 1):

Da man 7 signalun sistema Arch Linux:

SIGINFO 29, -, - Un sinonimo di SIGPWR

...

(Il segnale 29 è SIGINFO / SIGPWR su un alfa ma SIGLOST su uno sparc.)

...

SIGPWR (che non è specificato in POSIX.1-2001) è in genere ignorato per impostazione predefinita su quegli altri sistemi UNIX in cui appare.

Con questa definizione, SIGINFOè disponibile solo su architetture alfa o sparc.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.