Что лучший способ состоит в том, чтобы справиться с процессом Unix от Java?

Если x является постоянным, следующее расширение параметра выполняет извлечение подстроки:

b=${a:12:5}

то, где 12 (основанное на нуле) смещение и 5 , является длиной

, Если подчеркивания вокруг цифр являются единственными во входе, можно снять изоляцию с префикса и суффикса (соответственно) на двух шагах:

tmp=${a#*_}   # remove prefix ending in "_"
b=${tmp%_*}   # remove suffix starting with "_"

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

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

5
задан erotsppa 28 July 2009 в 05:32
поделиться

4 ответа

Думаю, вам нужно будет применить собственное решение. Завершение внешнего процесса, созданного с помощью API Process , можно выполнить с помощью Process.destroy () . (Но обратите внимание, что destroy () , реализованный в Linux / Unix, выполняет «мягкое» уничтожение, а не SIGKILL , поэтому внешний процесс может быть в состоянии избежать уничтожения.)

Все остальное непереносимо.

  • Список процессов (на машине Linux) можно выполнить, прочитав файловую систему / proc .
  • Другие действия можно сделать, вызвав собственную команду с помощью Process . Это зависит от того, требует ли ваша функция управления использования системных вызовов, недоступных для "чистой" Java-программы.
  • Возможно (теоретически) использовать JNI и собственный код, чтобы копаться в собственных структурах данных JVM, чтобы найти PID уровня ОС для процесса и послать ему сигнал.

Если вы спуститесь по JNI + собственный маршрут библиотеки, помните, что проблемы с собственным указателем и проблемы с потоками могут убить вашу JVM. Вам также может потребоваться создание и распространение собственной библиотеки для нескольких архитектур и т. Д. Также имейте в виду, что внутренние структуры данных могут отличаться для разных платформ JVM, выпусков и т. Д. И что они могут быть изменены без предварительного уведомления.

4
ответ дан 14 December 2019 в 04:44
поделиться

Если контекст у вашего кода есть доступ в Интернет, вы можете попробовать использовать Google API для определения языка. http://code.google.com/apis/ajaxlanguage/documentation/

var text = "¿Dónde está el baño?";
google.language.detect(text, function(result) {
  if (!result.error) {
    var language = 'unknown';
    for (l in google.language.Languages) {
      if (google.language.Languages[l] == result.language) {
        language = l;
        break;
      }
    }
    var container = document.getElementById("detection");
    container.innerHTML = text + " is: " + language + "";
  }
});

И, поскольку вы используете C #, ознакомьтесь с этой статьей о том, как вызывать API из C # .

ОБНОВЛЕНИЕ: хотя вам могут потребоваться правильные разрешения, чтобы читать все там. Обратите внимание, что содержимое / proc специфично для Unix - например, отличается в Linux / Solaris, и я понятия не имею, что это такое. MacOSX.

Если вы хотите убить процесс, который вы создали сами, то стоит обратить внимание на Process.destroy () . В противном случае вам придется выполнить kill . Чтобы использовать это правильно, вы должны отправить SIGINT , а если это не сработает, то отправить SIGKILL (для принудительного завершения - я не уверен, что Process. destroy () делает это)

Если вы создали себя сами, то стоит посмотреть на Process.destroy () . В противном случае вам придется выполнить kill . Чтобы использовать это правильно, вы должны отправить SIGINT , а если это не сработает, то отправить SIGKILL (для принудительного завершения - я не уверен, что Process. destroy () делает это)

Если вы создали себя сами, то стоит посмотреть на Process.destroy () . В противном случае вам придется выполнить kill . Чтобы использовать это правильно, вы должны отправить SIGINT , а если это не сработает, то отправить SIGKILL (для принудительного завершения - я не уверен, что Process. destroy () делает это)

0
ответ дан 14 December 2019 в 04:44
поделиться

Системный монитор Gnome (версия диспетчера задач Windows для Linux) использует пакет libgtop2. Документация здесь: http://library.gnome.org/devel/libgtop/stable/

Также вы можете проверить исходный код системного монитора, чтобы узнать, как он использует функции libgtop2.

0
ответ дан 14 December 2019 в 04:44
поделиться

Вы можете попробовать JNA Posix . Если соответствующие функции не экспортируются этой библиотекой, очень легко добавить для них поддержку с помощью JNA (я сделал это для многих API Win32).

1
ответ дан 14 December 2019 в 04:44
поделиться
Другие вопросы по тегам:

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