В мире Linux я узнал, что есть соответствующий файл, с которым взаимодействует программа пользовательского пространства, чтобы на самом деле взаимодействовать с любым аппаратным устройством.
Это Парадигма Unix, но она не всегда верна в Linux (и хотя я не знаком с оригинальной Unix, я сомневаюсь, что это было правдой даже там).
В мире Linux (в отличие от Windows), помимо хранилища файлов, файловая система также используется для обмена данными ввода-вывода.
Не совсем. Например, анонимный канал не имеет файловой системы, и даже с именованным каналом данные сами не проходят через файловую систему.
Таким образом, драйвер устройства для любого соответствующего аппаратного устройства фактически заполняет данные в таких файлах (скажем, / dev / sd *)
Он не заполняет файлы, он просто выполняет чтение / запись / ioctl в специальный файл. Файловая система никогда не видит этих операций.
Когда вы говорите: «Все является файлом или процессом», это подход к выполнению операций ввода-вывода с использованием файла в ядре Linux (или UNIX)?
В некотором роде. Парадигма состоит в том, что вместо отдельных функций для чтения и записи с диска он должен реализовывать файловый интерфейс, чтобы вы могли передавать диск в программы, которые могут обрабатывать файлы. Так, например, вы можете hexdump
содержимое диска, даже если hexdump
, вероятно, не имеет кода, специфичного для работы с дисками.
«Все дескрипторы файлов, потоки каталогов, дескрипторы преобразования и дескрипторы каталога сообщений, открытые в вызывающем процессе, должны быть закрыты». Это то, что, по словам POSIX, должно произойти, если процесс завершается из-за сигнала (т. Е. "Убивая его").
Таким образом, клиент, процесс, обращающийся к серверу, обязательно закроет свой конец сетевого соединения. Поведение сервера («база данных») при прекращении работы клиента («ваш процесс») остается на усмотрение сервера (обнаруживать и действовать).
Сетевое соединение определенно будет закрыто на стороне клиента, но что сервер делает с сеансом в этом случае, трудно сказать. Если у него есть блокировка таблицы или строки в таблице, когда она должна быть снята?
MySQL имеет тайм-аут холостого сеанса, после которого он снимает блокировки, удерживаемые исчезающим клиентом (см. этот вопрос StackOverflow ]). Вам нужно будет заглянуть в документацию для конкретной базы данных, которую вы используете, чтобы увидеть, что может произойти, но я предполагаю, что в большинстве случаев будет задействован какой-то таймер простоя.
да, но ...
Завершение процесса закрывает его файлы, но это не редкость для kill
процесса, подключенного через сокет или другое сетевое соединение (используется с базами данных, например), чтобы не удалось немедленно убить процесс. Вы увидите процесс, ожидающий закрытия, например, с помощью ps
.