/ Proc / PID può ancora esistere quando il PID non è in esecuzione?


11

è possibile che /proc/4587esista una cartella simile anche se non esiste un processo con PID 4587?


1
Ti stai chiedendo se controllare / proc / N sia un modo sicuro / affidabile per vedere se il PID N è in esecuzione?
Andy Lester,

Mi chiedevo se teoricamente ci potesse essere residuo in / proc dopo che il processo è terminato.
David Dai,

Risposte:


25

Se /procè solo il procmount (e nessuno sta giocando brutti scherzi con overlay), no, una cartella basata su pid esiste solo finché il processo corrispondente esiste in qualche stato (incluso come zombi). In effetti, appena prima di restituire una voce di directory per un id di processo, il kernel riconvalida l'esistenza del processo - quindi nel momento in cui viene restituita una voce di directory, il processo corrispondente è ancora lì. L'accesso a una directory inizia anche cercando il processo corrispondente. (Se i numeri di riga cambiano, cercare proc_pident_instantiatee proc_pident_lookup.)

È possibile /procriscontrare problemi causati dall'elenco e dall'utilizzo dei risultati in un secondo momento (anche alcuni microsecondi dopo): un processo può essere in esecuzione durante l'elenco /proce arrestarsi prima di agire sui risultati.


3
Che dire dei processi che hanno terminato l'esecuzione ma wait()non erano stati chiamati su di loro?
el.pescado,

2
Buon punto @ el.pescado, un rapido controllo indica che i processi di zombi hanno ancora la loro directory. Aggiornerò la mia risposta, grazie!
Stephen Kitt,

Fondamentalmente, se psmostra il processo, la sua /procdirectory dovrebbe esistere.
Barmar,

@Barmar “deve” infatti: psaccede /procper trovare le informazioni che mostra.
Stephen Kitt,
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.