Нахождение процессов с помощью ALSA звучит быстрым

MathJax не будет обрабатывать математику, содержащую HTML-теги (кроме нескольких избранных), поэтому вы не сможете выполнять такие замены внутри выражения, как вы пытаетесь сделать здесь.

Тем не менее, вы можете использовать сам MathJax для обработки межстраничной подкладки, которую, я думаю, вы пытаетесь выполнить. Вот один из подходов:

<script type="text/x-mathjax-config">
(function () {
  //
  // The values from MathJax.Extensions["TeX/AMSmath"].labels
  //   on all the linked pages.
  //
  var labels = {
    xyz2: {tag: "2", id: "mjx-eqn-xyz2"}
  };
  //
  //  Maps tag IDs to pages on which they occur.
  //
  var urls = {
    "mjx-eqn-xyz2": "link-cross-page2.html"
  };

  //
  //  Add the labels for the other pages when AMSmath is loaded.
  //
  MathJax.Hub.Register.StartupHook("TeX AMSmath Ready", function () {
    var keys = Object.keys(labels);
    for (var i = 0, m = keys.length; i < m; i++) {
      MathJax.Extension["TeX/AMSmath"].labels[keys[i]] = labels[keys[i]];
    }
  });

  //
  //  Configure TeX to use the external page url rather than the base url
  //    if the id is on a different page.
  //
  MathJax.Hub.Config({
    TeX: {
      equationNumbers: {
        formatURL(id, base) {
          return (urls[id] || base) + '#' + id;
        }
      }
    }
  });
})();
</script>

Поместите это перед сценарием, который загружает сам MathJax.js. Вам нужно будет собрать данные из MathJax.Extension["TeX/AMSmath"].labels со всех страниц, на которые вы хотите сослаться, и поместить их в var labels выше (объединить данные со всех страниц в один объект) и создать отображение из идентификаторов на страницу URL в var urls выше. В этом примере в файле link-cross-page2.html содержится \label{xyz2}\tag{2}, и любой \ref{xyz2} на странице, содержащей этот код, будет ссылаться на link-cross-page2.html#mjx-eqn-2.

Остальная часть кода просто копирует ваши метки в список меток AMSmath, когда он загружается, и настраивает функцию formatURL() TeX для поиска файла в вашем списке и использования его, если он существует, в противном случае он использует базовый URL страницы.

Обратите внимание, что для этого требуется, чтобы номера уравнений были разными на разных страницах, но я предполагаю, что это так, иначе вы не могли бы сказать, на какую страницу ссылаться.

5
задан hendry 12 February 2009 в 22:16
поделиться

3 ответа

Здесь вы запускаете множество процессов. Вместо этого вы можете попробовать сделать то же, что и опубликованный вами скрипт lsof ... но заменив lsof оболочкой для цикла:

Если вы хотите избежать запуска большого количества процессов grep, запустите только один:

#!/bin/sh
for i in /proc/[0-9]*/fd/*
do
    echo ${i%/fd/*} $(readlink $i)
done | grep -q /dev/snd/pcm

Это займет теперь 4,5 секунды на моем рабочем столе по сравнению с 7,5, когда для каждого открытого файла используется один процесс grep.

Но ... твой grep здесь не нужен, я думаю. Если вас это так волнует, вы можете попробовать:

#!/bin/sh
for i in /proc/[0-9]*/fd/*
do
    var="$(readlink $i)"
    if test x"$var" != x"${var#/dev/snd/pcm}"
    then
        echo $i
    fi
done

Это даже быстрее для меня ( test почти всегда встроен в оболочку), но я думаю, это больше из-за плохих методов тестирования. Попробуйте сами.

3
ответ дан 18 December 2019 в 09:10
поделиться

Существует ответ для этого вопроса на FAQ ALSA. В моей системе, с помощью термофиксатора путь быстрее, чем использование lsof.

fuser -v /dev/snd/*
14
ответ дан 18 December 2019 в 09:10
поделиться

Вы не говорите, какие масштабы времени Вы ищете, но для Вашего альтернативного предложения

for i in /proc/[0-9]*/fd/*;

мог бы работать и дать, Вы немного убыстряетесь, как мог бы с помощью cut вместо awk.

1
ответ дан 18 December 2019 в 09:10
поделиться
Другие вопросы по тегам:

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