Очень простая причина в том, что, по крайней мере, для файловых систем типа EXT2 / EXT3 / EXT4, имена файлов файлов хранятся через записи в записях каталога , хранящихся в файлах типа каталогов.
Это означает, что эти файлы, которые имеют тип каталога типа, имеют более или менее сложную систему для хранения файлов файлов (файлов внутри каталога) и inodes, которые приводят к данным этих файлов.
Некоторые упрощенные (Ext3 / 4 используют HASH-Tables Heastables для ускорения древовидного обхода каталога и т. Д. ...) Это выглядит как такое список:
## filenames ## ## inode-numbers ##
filename1 0123
filename2 01242
anotherfilename 3313
yetanotherfilename 11233
, по сути, имена файлов , только когда-либо возникает внутри данных, связанных с Файлы Дирекотрии и не хранятся нигде в метаданных хранилища файловых систем для / из inodes . Поэтому единственный способ получить имена файлов, связанных с номером inode, проходит через все записи каталога всех файлов каталога.
SIGTERM позволяет процессу выполнять очистку перед завершением, но действительно ли процесс это делает, и какая очистка выполняется, зависит от того, как была написана программа и (в какой-то степени) от средств, на которых она была написана на языке, на котором она была написана. Таким образом, когда программа получает ЗАПИСЬ, она не обязана ничего сохранять, но вполне вероятно, что любые файлы, которые у нее открыты в настоящее время, будут закрыты.
Есть сигналы "лучше", чем SIGTERM, например SIGUSR1, но программа будет игнорировать такие сигналы, если они не были написаны специально для их прослушивания.
Можно использовать wmctrl
для грациозного закрытия всех окон конкретного приложения 1 (насколько я знаю, это "так же чисто, как если бы приложение было закрыто с помощью menu->Exit").
используя приложение wm_class
:
for win in $(wmctrl -lx | awk '$3 ~ /Icedove/ {print $1}'); do wmctrl -ic "$win"; done
используя приложение pid
:
for win in $(wmctrl -lp | awk -v icepid=$(pgrep icedove) '$3 == icepid {print $1}'); do wmctrl -ic "$win"; done
1: При закрытии приложения в трее оно будет минимизировано в трей. Если оно уже в трее, то -c
ничего не будет делать. В wmctrl
для этого случая нет альтернативы закрытию или команды 'kill' (-c).