Как получить идентификатор процесса (PID) программно? - PullRequest
5 голосов
/ 02 июня 2011

Как я могу получить идентификатор процесса?Мне нужен идентификатор, чтобы убить этот процесс.Я знаю название процесса.

Спасибо!

Ответы [ 5 ]

4 голосов
/ 02 июня 2011

Лучшим подходом является использование - [NSWorkspace launchApplications] для 10,5- и - [NSWorkspace runningApplicattions] для 10,6+ приложений. Один возвращает словарь с указанными ключами, включая идентификатор процесса, имя пакета и информацию о расположении (если доступно), другой - объект NSRunningApplication .

2 голосов
/ 26 ноября 2017
let pid: Int32 = ProcessInfo.processInfo.processIdentifier
print("pid: \(pid)")
2 голосов
/ 02 июня 2011

Прежде всего, имя процесса не однозначно идентифицирует процесс.Может быть много процессов с одинаковыми именами, или процессы могут даже изменить свое имя, как вы их видите (т. Е. Сервер PostgreSQL разветвляется и изменяет argv [0], чтобы вы могли видеть, кто является хозяином, кто работает процессом и т. Д.).Но в любом случае вам понадобится API для составления списка процессов и получения их подробностей - procps сделает это за вас.

ОБНОВЛЕНИЕ: О, я не заметил OSX в первый раз.Для OS X вы должны использовать NetBSD API (не спрашивайте).Пожалуйста, смотрите документацию KVM (Kernel Data Access Library) .API другой, идея все та же.

1 голос
/ 23 июля 2013

Использование NSRunningApplication

NSArray *runningApplications = [NSRunningApplication runningApplicationsWithBundleIdentifier:@"com.bundleIdentifier"];
if (runningApplications.count == 1) {
    NSRunningApplication *app = runningApplications[0];
    pid = [app processIdentifier];
}

Примечание: -[NSWorkspace launchedApplications] устарело для 10,6 и выше.

1 голос
/ 02 июня 2011

Быстрый взлом: создает вызов shell для killall, который убивает процесс по имени.

...