In che modo systemd sopravvive a un kill -9?


28

Tra le recenti domande "Why '' kill -9 0 'termina la sessione della mia console" e "Come ottenere il panico nel kernel", ho avuto una fresa sotto la sella e ho provato kill -9 1un laptop Arch Linux per lo più aggiornato. L'ho fatto come ID utente "root".

Mi aspettavo una specie di incidente, panico o arresto, ma non è successo nulla. L'ho fatto di kill -9 1nuovo, senza alcun risultato.

Le macchine Arch Linux funzionano in systemdquesti giorni, quindi: come systemdsopravvive a un kill -9? Mi aspetto che ci sia un codice di caso speciale nel kernel Linux 3.7, ma forse esiste qualche altra ragione a cui non ho pensato.

Che dire di altre cose che funzionano con PID 1? Lo Slackware usa ancora initcredo, ma ho paura di provarlo sul mio server Slackware di produzione. DD-WRT sul mio router wireless esegue / sbin / init di qualche tipo.

Risposte:


33

Da man 2 kill:

Gli unici segnali che possono essere inviati all'ID processo 1, il processo init, sono quelli per i quali init ha esplicitamente installato gestori di segnali. Questo viene fatto per garantire che il sistema non venga accidentalmente disattivato.

Cioè, è possibile initfare qualsiasi cosa gli piaccia al momento della ricezione SIGKILL(inclusa l'uscita), ma init di systemd non installa alcun gestore di segnale per esso, quindi non succede nulla.


4
Grazie per averlo notato. Questo Linux è specifico? Mi sembra di ricordare di aver arrestato una workstation SunOS nei primi anni '90 uccidendo init per errore. O no. Ero molto più spericolato in gioventù.
Bruce Ediger

1
@BruceEdiger, anch'io mi sembra di ricordare di essere stato in grado di kill -9 initindurre un panico nel kernel. Sembra che sia cambiato ad un certo punto.
psusi

2
@BruceEdiger - L'ho provato per un server AIX e uno HP-UX. Entrambi hanno restituito un messaggio di errore: kill: 1: 0403-068 Il segnale non è valido per questo processo OPPURE kill: 1: il processo specificato non esiste. La pagina man specifica che questo restituirà un errore. Molte persone mi hanno detto che questo poteva essere fatto in precedenza, ma nessuno è riuscito negli ultimi 10 anni.
DarkHeart

2
@BruceEdiger Da alcune ricerche sembra che questo sia uno sviluppo recente (almeno in termini di durata della vita di Unix). Purtroppo non ero vivo nei primi anni '90, quindi quando è successo è fuori dalla mia portata di conoscenza. Sarebbe interessante scoprirlo, tuttavia, poiché sembra che quasi tutti i moderni Unices siano cambiati in default a questo comportamento.
Chris Down
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.