Функция release вызывается в другом контексте процесса
Я зарегистрировал функцию обратного вызова релиза в file_operation в моем драйвере устройства, например:
struct file_operations driver_fops =
{
.open = drv_open,
.release = drv_release,
.unlocked_ioctl = drv_unlocked_ioctl,
.mmap = drv_mmap,
};
Функция release будет вызвана, когда процесс (откройте файл устройства) будет убит. Но странно то, что когда я пытаюсь получить pid текущего процесса в drv_release, иногда pid не принадлежит процессу, открывающему файл. Это означает, что функция release() вызывается в другом контексте процесса. Это нормально?
1 ответ
Может быть, это из-за fork(). Если родительский процесс открыл ваше устройство, то разветвился и умер, а затем дочерний закрытый дескриптор - закрыть будет от другого процесса.