Без бита execute вы не сможете выполнить stat()
для файлов в каталоге, что означает, что вы не сможете определить информацию inode этих файлов. Чтобы удалить файл, вы должны знать информацию, которую вернет stat()
.
Демонстрация этого:
$ ls -ld test
drw------- 2 alienth alienth 4096 Sep 18 23:45 test
$ stat test/file
stat: cannot stat ‘test/file’: Permission denied
$ strace -e newfstatat rm test/file
newfstatat(AT_FDCWD, "test/file", 0x1a3f368, AT_SYMLINK_NOFOLLOW) = -1 EACCES (Permission denied)
newfstatat(AT_FDCWD, "test/file", 0x7fff13d4f4f0, AT_SYMLINK_NOFOLLOW) = -1 EACCES (Permission denied)
rm: cannot remove ‘test/file’: Permission denied
+++ exited with 1 +++
Вы также можете продемонстрировать это с помощью простого ls -l
. Информация о метаданных каталога может быть доступна для чтения и записи вашему пользователю, но без execute вы не сможете определить детали файла внутри каталога.
$ ls -l test
ls: cannot access test/file: Permission denied
total 0
-????????? ? ? ? ? ? file
По умолчанию уничтожение родительского процесса не приводит к уничтожению дочерних процессов.
Я предлагаю вам поискать другие вопросы о том, как убить и родителя, и потомка, используя группу процессов (с отрицательным PID ).
Хороший ответ о том, как это сделать, можно найти в Потомки процессов