Есть много способов сделать это, в зависимости от того, что именно вы хотите с ними сделать. Как правило, если вы хотите просто перечислить их, вы можете сделать это в терминале, используя:
find | grep '^\./ABC'
... и заменив ABC
своим текстом.
Чтобы понять команду, давайте разберем ее немного:
find
перечисляет все файлы в текущем каталоге и его подкаталогах; использование одного только перечислит все там. Обратите внимание, что find
выводит каждый файл или каталог, начиная с ./
, указывая, что их путь относительно текущего каталога. Знать об этом важно, потому что это означает, что мы будем искать результаты, начиная с ./ABC
, а не только с ABC
.
Символ канала |
перенаправляет вывод одной команды другой, в этом случае вывод find
перенаправляется на grep
. Это называется трубопроводами.
grep
берет выходные данные и фильтрует их, используя заданный шаблон, ^\./ABC
.
' '
, чтобы не допустить интерпретации оболочкой специальных символов внутри него. Теперь сам шаблон записывается в определенном синтаксисе, называемом регулярным выражением или регулярным выражением для краткости. Regex - чрезвычайно мощный инструмент поиска, если вы освоите его, и есть сайты, такие как , , которые более подробно рассказывают вам об этом, но обратите внимание, что grep
не является полноценным движком регулярных выражений, и вы не может делать все с этим.
Для нашей цели:
^
в регулярном выражении соответствует началу строки; это предотвращает сопоставление с шаблоном, если он не встречается в начале имени файла.
.
в регулярном выражении также имеет особое значение: оно означает «соответствовать любому отдельному символу здесь». Если вы хотите использовать его как буквальную точку, вам придется «экранировать» его, используя обратную косую черту \
перед ним. (Да, совпадение с любым символом в нашем случае было бы безвредно, но я сделал это ради полноты.)
Если то, что Вы хотите, должно явно/программируемо закрыть другую программу какого-либо вида, в SysInternals' pstools существует мелкий инструмент, названный "pskill", который ведет себя точно так же, как Unixen "уничтожение" сделал бы.
, Если Вы хотите что-то еще, продолжайте читать (хотя я могу быть неправ в некоторых специфических особенностях ниже - это были эры, так как я в последний раз разработал Windows-программу в C использование только WinAPI и превосходных книг Charles Petzold, "Программирующих для Windows" как руководство).
В Windows у Вас правильно нет "сигналов", что функционирует, WinMain и WinProc получают от Операционной системы, прост сообщения . Например, при нажатии на кнопку "X" окна Windows отправляет обработчику тех окон сообщение WM_CLOSE. Когда удаленное окно, но все еще выполнение программы, это отправляет WM_DESTROY. Когда это собирается выйти из основного сообщения, обрабатывающего цикл, WinMain (не WinProc) получает WM_QUIT. Ваша программа должна ответить на все они как ожидалось - можно на самом деле разработать "unclosable" приложение, не делая то, что она должна после получения WM_CLOSE.
, Когда пользователь выбирает задачу из Windows Task Manager и нажимает "End Task", OS отправит WM_CLOSE (и другой я не помню). При использовании "Процесса Конца", тем не менее, процесс уничтожается непосредственно, никакие сообщения, отправленные когда-либо (источник: Старая Новая Вещь
, который я помню, был способ получить HWND окна другого процесса, как только Вы добираетесь, тот другой процесс мог отправить тому окну сообщение через функции PostMessage и DispatchMessage.
Можно также использовать jconsole для просмотра stacktrace всех рабочих потоков. Это будет работать над Windows и любой другой ОС, которая поддерживает Java. jconsole также имеет много других хороших функций, графиков памяти, графиков CPU, и т.д.
Он не отвечает на Ваш исходный вопрос, но надо надеяться позволяет Вам получать те же результаты.
, Если Ваш не знакомый с jconsole, проверьте Используя документацию JConsole .
В Windows все вращается вокруг сообщений Win32. Я не верю, что для этого есть инструмент командной строки, но в C ++ вы можете использовать FindWindow для отправки произвольного сообщения в другую программу Windows. например :
#define WM_MYMSG ( WM_USER+0x100 )
HWND h = ::FindWindow(NULL,_T("Win32App"));
if (h) {
::PostMessage(h, WM_MYMSG, 0, 0);
}
Это также можно сделать в C # с помощью com-взаимодействия.
Windows не является POSIX. Это не имеет сигналов. Единственные 'сигналы', что консольные программы добираются, состоят в том, если они звонят SetConsoleCtrlHandler
, в этом случае это может быть уведомлено, что пользователь нажал Ctrl+C, Ctrl+Break, закрыл консоль, вышел из системы или завершил работу системы.
Все остальное сделано с IPC, обычно с сообщениями окна или RPC. Проверьте документацию Sun, чтобы видеть, существует ли способ сделать то, что Вы спрашиваете относительно Windows JRE.
Мне просто интересно, поможет ли вам PsTools из, теперь принадлежащего Microsoft, SysInternals .