Это все файлы с нулевым байтом. 1
и null
почти наверняка безопасно удалить. Если вы действительно параноик, вы можете переместить их, а не удалять.
Команда kill
, когда получает PID, который < -1, рассматривает его как идентификатор группы процессов (PGID), а не как идентификатор процесса. Это документировано в info kill
:
‘PID < -1’
The process group whose identifier is −PID.
Если мы снова возьмем ваш пример:
$ pstree -p 19935
php(19935)───sh(19936)───spawn(19937)─┬─sleep(19938)
└─sleep(19939)
PGID - это PID самого верхнего родительского процесса дерева процессов, в данном случае 19935
. Однако вы пытались убить процессы, принадлежащие к группе процессов с ID 19937
и 19936
, ни один из которых не является идентификатором группы процессов. PGID - это 19935
.
Возможно, вы можете увидеть это более четко с помощью ps
. Если я запущу те же команды в своей системе:
$ php -f ./zombie.php &
[2] 12882
$ ps -o pid,ppid,pgid,command | grep -E '[P]GID|[1]2882'
PID PPID PGID COMMAND
12882 1133 12882 php -f ./zombie.php
12883 12882 12882 /bin/bash ./spawn
12884 12883 12882 sleep 1d
12885 12883 12882 sleep 1d
В примере выше PGID группы - 12882
, поэтому именно его мне нужно использовать, если я хочу убить все в группе.
Когда вы выполняете команду из оболочки напрямую, самый верхний родительский процесс - это PID сценария оболочки, поэтому вы можете убить все процессы в его дереве, выполнив kill -- -PID
:
$ ./spawn &
[3] 14213
terdon@tpad foo $ ps -o pid,ppid,pgid,command | grep -E '[P]GID|[1]4213'
PID PPID PGID COMMAND
14213 1133 14213 /bin/bash ./spawn
14214 14213 14213 sleep 1d
14215 14213 14213 sleep 1d
Но это потому, что PID сценария оболочки равен PGID группы.