/ proc / PID
(и каталога) на 98% так же надежна, как и kill0
техника.
Причина, по которой 98% не являются 100%, - это вопрос, который Стивен Харрис
затронул (и отскочил) в комментарии -
а именно возможно, файловая система / proc
не смонтирована.
Может быть справедливо утверждение, что система Linux без / proc
является поврежденной, деградированной системой - в конце концов,
такие вещи, как ps
, top
и lsof
, вероятно, не будут работать -
, поэтому это может не быть проблемой для производственной системы.
Но (теоретически) возможно, что он никогда не был смонтирован
(хотя это может помешать переходу системы в нормальное состояние),
это определенно возможно для его нужно отключить
(я тестировал его 1 ),
и считаю, что нет никакой гарантии, что он будет существовать
(т. е. , это не требуется POSIX).
И, если система полностью не заморожена, kill
будет работать. / proc
требует чтения корневой каталог, чтобы найти файловую систему / proc
.
Это верно для любой попытки получить доступ к любому файлу по абсолютному имени пути,
включая элементы в / bin
, / и т. Д.
и / dev
.
Это происходит так часто, что корневой каталог обязательно кэшируется в памяти
на все время жизни (время безотказной работы) системы,
поэтому этот шаг можно выполнить без каких-либо операций с диском. О.
И если у вас есть индексный дескриптор / proc
,
все остальное, что происходит, находится в памяти. / proc
?
С stat
, open
, readdir
и т. Д.,
которые являются собственными системными вызовами каждый бит, как и убить
. Вопрос касается запущенного процесса. Это скользкая фраза.
Если вы действительно хотите проверить, работает ли процесс
(т. Е. В очереди выполнения; возможно, текущий процесс на каком-то ЦП;
не спит, не ожидает или не остановлен) ),
вам может потребоваться выполнить ps PID
и прочитать вывод ,
или посмотреть на / proc / PID / stat
.
Но я не вижу намека в вашем вопросе или комментариях
на то, что вас это беспокоит.
Слон в комнате, однако, заключается в том, что процесс зомби 2
может быть трудно отличить от процесса, который жив и здоров.
kill0
работает с зомби, и существует / proc / PID
.
Вы можете идентифицировать зомби
с помощью методов, перечисленных в предыдущем абзаце
(выполнив ps PID
и прочитав вывод,
или просмотрев / proc / PID / stat
).
Мой очень быстрый и случайный (т. Е., не очень тщательное) тестирование предполагает, что
вы также можете сделать это, выполнив readlink
или lstat
на / proc / PID / cwd
, / proc / PID / root
,
или / proc / PID / exe
- они не работают на зомби.
(Однако они также не будут работать в процессах, которыми вы не владеете.)
____________
1 , если -f
( f orce) не работает,
попробуйте -l
( l azy).
2 то есть процесс, который завершился / умер / завершился,
, но чей родитель еще не выполнил ожидание
.