Skip to main content

Segnale - comando Linux / Unix

Come Killare un processo in Linux!!! (Giugno 2025)

Come Killare un processo in Linux!!! (Giugno 2025)
Anonim

Linux supporta sia segnali POSIX affidabili (in seguito "segnali standard") che POSIX in tempo reale.

Segnali standard

Linux supporta i segnali standard elencati di seguito. Diversi numeri di segnale dipendono dall'architettura, come indicato nella colonna "Valore". (Dove sono indicati tre valori, il primo è generalmente valido per alpha e sparc, quello centrale per i386, ppc e sh e l'ultimo per i mips.

A - indica che un segnale è assente sull'architettura corrispondente.)

Le voci nella colonna "Azione" della tabella specificano l'azione predefinita per il segnale, come segue:

Termine

L'azione predefinita è terminare il processo.

Ign

L'azione predefinita è ignorare il segnale.

Nucleo

L'azione predefinita è terminare il processo e eseguire il dump core.

Stop

L'azione predefinita è interrompere il processo.

Innanzitutto i segnali descritti nello standard POSIX.1 originale.

SegnaleValoreAzioneCommento
o morte del processo di controllo
SIGINT2TermineInterrompere dalla tastiera
SIGQUIT3NucleoEsci dalla tastiera
SIGILL4NucleoIstruzione illegale
SIGABRT6NucleoSegnale di interruzione da abortire (3)
SIGFPE8NucleoEccezione a virgola mobile
SIGKILL9TermineUccidere il segnale
SIGSEGV11NucleoRiferimento di memoria non valido
SIGPIPE13TermineTubo rotto: scrivere alla pipe senza lettori
SIGALRM14TermineSegnale del timer da allarme (2)
SIGTERM15TermineSegnale di terminazione
SIGUSR130,10,16TermineSegnale definito dall'utente 1
SIGUSR231,12,17TermineSegnale definito dall'utente 2
SIGCHLD20,17,18IgnBambino fermato o terminato
SIGCONT19,18,25 Continua se fermato
SIGSTOP17,19,23StopInterrompere il processo
SIGTSTP18,20,24StopSmetti di digitare su tty
SIGTTIN21,21,26Stopinput tty per processo in background
SIGTTOU22,22,27Stopuscita tty per processo in background

I segnaliSIGKILL eSIGSTOP non può essere catturato, bloccato o ignorato.

Quindi i segnali non sono nello standard POSIX.1 ma descritti in SUSv2 e SUSv3 / POSIX 1003.1-2001.

SegnaleValoreAzioneCommento
SIGPOLL TermineEvento pollable (Sys V). Sinonimo di SIGIO
SIGPROF27,27,29TermineTimer di profilazione scaduto
SIGSYS12,-,12NucleoArgomento non valido nella routine (SVID)
SIGTRAP5NucleoTraccia / trappola breakpoint
SIGURG16,23,21IgnCondizione urgente sul socket (4.2 BSD)
SIGVTALRM26,26,28TermineSveglia virtuale (4.2 BSD)
SIGXCPU24,24,30NucleoLimite di tempo della CPU superato (4.2 BSD)
SIGXFSZ25,25,31NucleoLimite dimensioni file superato (4,2 BSD)

Fino a Linux Linux incluso, il comportamento predefinito perSIGSYS, SIGXCPU, SIGXFSZe (su architetture diverse da SPARC e MIPS)SIGBUS doveva terminare il processo (senza un core dump). (Su alcuni Unices l'azione predefinita perSIGXCPU eSIGXFSZ è terminare il processo senza un core dump.) Linux 2.4 è conforme ai requisiti POSIX 1003.1-2001 per questi segnali, terminando il processo con un core dump.

Successivamente vari altri segnali.

SegnaleValoreAzioneCommento
SIGEMT7,-,7Termine
SIGSTKFLT-,16,-TermineErrore di stack sul coprocessore (non utilizzato)
SIGIO23,29,22TermineI / O ora possibile (4.2 BSD)
SIGCLD-,-,18IgnUn sinonimo per SIGCHLD
SIGPWR29,30,19TermineInterruzione di corrente (sistema V)
SIGINFO29,-,- Un sinonimo per SIGPWR
SIGLOST-,-,-TermineBlocco file perso
SIGWINCH28,28,20IgnSegnale di ridimensionamento finestra (4.3 BSD, Sun)
SIGUNUSED-,31,-TermineSegnale inutilizzato (sarà SIGSYS)

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

SIGEMT non è specificato in POSIX 1003.1-2001, ma appare sempre sulla maggior parte degli altri Unix, dove la sua azione predefinita è tipicamente quella di terminare il processo con un core dump.

SIGPWR (che non è specificato in POSIX 1003.1-2001) viene generalmente ignorato di default su quegli altri Unix in cui appare.

SIGIO (che non è specificato in POSIX 1003.1-2001) viene ignorato per impostazione predefinita su diversi altri Unix.

Segnali in tempo reale

Linux supporta i segnali in tempo reale come originariamente definiti nelle estensioni in tempo reale POSIX.4 (e ora inclusi in POSIX 1003.1-2001). Linux supporta 32 segnali in tempo reale, numerati da 32 (SIGRTMIN) a 63 (SIGRTMAX). (I programmi dovrebbero sempre fare riferimento ai segnali in tempo reale usando la notazioneSIGRTMIN+ n, poiché la gamma di numeri di segnale in tempo reale varia da Unix.)

A differenza dei segnali standard, i segnali in tempo reale non hanno significati predefiniti: l'intero set di segnali in tempo reale può essere utilizzato per scopi definiti dall'applicazione. (Si noti, tuttavia, che l'implementazione di LinuxThreads utilizza i primi tre segnali in tempo reale.)

L'azione predefinita per un segnale in tempo reale non gestito è terminare il processo di ricezione.

I segnali in tempo reale si distinguono come segue:

  1. È possibile mettere in coda più istanze di segnali in tempo reale. Al contrario, se vengono recapitate più istanze di un segnale standard mentre quel segnale è attualmente bloccato, solo una istanza viene accodata.
  2. Se il segnale viene inviato utilizzandosigqueue(2), un valore di accompagnamento (un numero intero o un puntatore) può essere inviato con il segnale. Se il processo di ricezione stabilisce un gestore per questo segnale utilizzando ilSA_SIGACTION bandiera asigaction(2) quindi può ottenere questi dati tramite il si_value campo del siginfo_t struttura passata come secondo argomento al gestore. Inoltre, il si_pid e si_uid i campi di questa struttura possono essere utilizzati per ottenere il PID e l'ID utente reale del processo che invia il segnale.
  3. I segnali in tempo reale vengono consegnati in un ordine garantito. Più segnali in tempo reale dello stesso tipo vengono consegnati nell'ordine in cui sono stati inviati. Se diversi segnali in tempo reale vengono inviati a un processo, vengono consegnati a partire dal segnale con il numero più basso. (I.e, i segnali di basso numero hanno la massima priorità).

Se entrambi i segnali standard e in tempo reale sono in attesa di un processo, POSIX lascia non specificato che viene consegnato per primo. Linux, come molte altre implementazioni, dà la priorità ai segnali standard in questo caso.

Secondo POSIX, un'implementazione dovrebbe consentire almeno _POSIX_SIGQUEUE_MAX (32) segnali in tempo reale da accodare a un processo. Tuttavia, anziché porre un limite per processo, Linux impone un limite a livello di sistema sul numero di segnali in tempo reale in coda per tutti i processi.

Questo limite può essere visualizzato (e con privilegio) modificato tramite / Proc / sys / kernel / rtsig-max file. Un file correlato, / Proc / sys / kernel / rtsig-max , può essere utilizzato per scoprire quanti segnali in tempo reale sono attualmente in coda.

CONFORME A

POSIX.1

Importante: Utilizzare il uomo comando ( % uomo ) per vedere come viene utilizzato un comando sul tuo computer specifico.