Как я нахожу дескрипторы файлов, которые мой процесс открыл в Linux?

Просто обновите файл cookie вместе с методом saveDetails следующим образом



 data() {
   return {
     obj:{}
    }
  },
  methods: {
    savedDetails: function(objectPassed) {
      this.obj = objectPassed;
      Cookies.set("name", JSON.stringify(objectPassed), {expires: '1m'});
      Cookies.get("name");
    }
  },
  mounted: function() {
    this.obj = {};
    Cookies.set("name", JSON.stringify(this.obj), {expires: '1m'});
    Cookies.get("name");
  }

РЕДАКТИРОВАТЬ:

https://jsfiddle.net/k85o7bdq/

Вот рабочая скрипка.

Возможно, вы пытаетесь определить, был ли файл cookie обновлен, просматривая вкладку «Приложение» в инструментах разработчика? Там есть небольшая кнопка обновления, попробуйте нажать ее после обновления куки.

11
задан sep 6 November 2008 в 07:05
поделиться

9 ответов

Если библиотеки открывают файлы, Вы не знаете о, как Вы знаете, что им не нужны они после ветвления? Неэкспортируемые дескрипторы являются внутренней деталью библиотеки, если библиотека хочет их, закрылся, она зарегистрирует atfork () обработчик для закрытия их. Обход вокруг позади некоторой части кода, закрывающего его дескрипторы файлов за его спиной, приведет к тонкому трудно для отладки проблем, так как библиотека будет ошибка неожиданно, когда это попытается работать с дескриптором, это знает, что открылось правильно, но не закрылось.

14
ответ дан 3 December 2019 в 00:56
поделиться

В Linux можно проверить /proc/<pid>/fd каталог - для каждого открытого fd будет файлом, названным как дескриптор. Я почти уверен, что этот путь является непортативным.

Кроме того, можно использовать lsof - доступный для Linux, AIX, FreeBSD и NetBSD, согласно man lsof.

16
ответ дан 3 December 2019 в 00:56
поделиться

Можно сделать от оболочки:

lsof -P -n -p _PID_

Где PID является Вашим pid процесса.

14
ответ дан 3 December 2019 в 00:56
поделиться

Как упомянуто на ответе @Louis Gerbarg, библиотеки, вероятно, ожидают, что дескрипторы файлов будут сохранены открытыми на fork() (который, как предполагается, является, в конце концов, почти идентичной копией родительского процесса).

Проблема, которую имеет большинство людей, идет exec() который часто следует fork(). Здесь, правильное решение для библиотеки, которая создала дескрипторы для маркировки их как замыкаться-должностное-лицо (FD_CLOEXEC).

На библиотеках, пользовавшихся программами мультипотока, существует состояние состязания между библиотекой, создающей дескриптор файла и установкой FD_CLOEXEC на нем (другой поток может fork() между обеими операциями). Решить ту проблему, O_CLOEXEC был представлен в ядре Linux.

5
ответ дан 3 December 2019 в 00:56
поделиться

Я соглашаюсь с тем, что другие люди сказали о закрытии случайных файлов, являющихся опасным. Вы могли бы закончить тем, что регистрировали некоторые довольно интересные отчеты об ошибках для всех Ваших сторонних программ.

Тем не менее, если Вы знаете, что Вам не будут нужны те файлы, чтобы быть открытыми, можно всегда идти через все дескрипторы правильного файла (1 - 65 535, IIRC) и закрывать все, что Вы не распознаете.

1
ответ дан 3 December 2019 в 00:56
поделиться

Разумные библиотеки будут всегда иметь функции, которые свободный безотносительно ресурсов (например, дескрипторы файлов) они выделили.

0
ответ дан 3 December 2019 в 00:56
поделиться

Прежде всего, Вы не должны действительно заботиться много об открытых дескрипторах файлов, о которых Вы не знаете. Если Вы знаете, что не собираетесь писать в них снова, закрытие их является хорошей идеей и не причиняет боль - Вы просто сделали ветвление (), в конце концов, fds открыты дважды. Но аналогично, если Вы оставляете их открытыми, они не побеспокоят Вас ни один - в конце концов, Вы не знаете о них, Вы, по-видимому, не будете случайным образом писать в них.

Что касается того, что сделают Ваши сторонние библиотеки, это - определенная жеребьевка так или иначе. Некоторые, вероятно, не ожидают сталкиваться с ситуацией с ветвлением () и могли бы закончить тем случайно, что писали в тот же fd от двух процессов без любой синхронизации. Другие, вероятно, не ожидают иметь Вас закрывающий их fds на них. Необходимо будет проверить. Поэтому это - плохая идея случайным образом открытому дескриптор файла в библиотеке, и не дают его вызывающей стороне для управления.

Однако в духе ответа на исходный вопрос нет особенно хорошего пути. Можно звонить dup() или dup2() на дескрипторе файла; если это будет закрыто, то вызов перестанет работать с EBADF. Таким образом, можно сказать:

int newfd = dup(oldfd);
if (newfd > 0)
{
    close(newfd);
    close(oldfd);
}

но в той точке Вы точно также от высказывания close(oldfd) во-первых и игнорирование любого EBADFs.

Принятие Вас все еще хочет выбрать вариант применения ядерного оружия закрытия всего, затем необходимо найти максимальное количество открытых дескрипторов файлов возможным. Принятие 1 - 65 535 не является хорошей идеей. В первую очередь, fds запускаются в 0, конечно, но также и нет никакого конкретного определенного верхнего предела. Быть портативным, POSIX sysconf(_SC_OPEN_MAX) должен сказать Вам, в любой нормальной системе POSIX, хотя строго говоря это является дополнительным. Если Вы чувствуете себя параноиками, проверьте возвращаемое значение на-1, хотя в той точке главным образом необходимо возвратиться к значению hardcoded так или иначе (1024, должен быть прекрасным, если Вы не делаете что-то чрезвычайно странное). Или если Вы соглашаетесь с тем, чтобы быть определенным для Linux, можно вырыть вокруг в/proc.

Не забывайте не закрывать fds 0, 1, и 2 - который может действительно перепутать вещи.

2
ответ дан 3 December 2019 в 00:56
поделиться

Разве это не вопросы проектирования? Для Вашего процесса действительно ли возможно разветвиться прежде, чем инициализировать освобождение, это открывает те файлы?

0
ответ дан 3 December 2019 в 00:56
поделиться

Просто ссылка, но это кажется полезным: Сколько открытых файлов? по netadmintools.com. Это, кажется, использует/proc расследования для приобретения знаний об открытых файлах процесса, не уверенных, если это - единственный путь или если существует API. Парсинг файлов для этого типа информации может быть немного... грязным. Кроме того,/proc мог бы быть удержан от использования также, что-то для проверки на.

0
ответ дан 3 December 2019 в 00:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: