Ці числа є дескрипторами файлів . Як ви зазначали, існує декілька, які створюються автоматично. Оскільки інші файли або файлові речі відкриваються, вони отримують інші номери.
Числа, які використовуються в будь-якій конкретній програмі, залежать від того, які файли були відкриті цією програмою або використовуються іншим чином. Наприклад, якщо ви хочете "зберегти" поточний stdin і тимчасово перенаправити stdin з іншого місця, а потім відновити його пізніше, ви можете зробити щось на кшталт:
exec 4<&0
exec < /some/file
#process
exec 0<&4 4<&- # restore stdin and close our duplicate
Тож цей скрипт мав би 4
дескриптор файлів, принаймні якийсь час доступний. Цей 4 може бути будь-чим, що не використовується (ну, існує обмеження кількості файлів, які може мати відкритий процес, але все, що знаходиться в межах цієї межі).
Ви можете побачити, до яких дескрипторів файлів відкритий процес і де вони відкриті, заглянувши в нього /proc/<pid>/fd
. Це показує всі відкриті дескриптори файлів для цього процесу <pid>
та файли, з якими пов'язані.