Как проверить, жив ли процесс или поток или нет их идентификаторов в C ++? - PullRequest
0 голосов
/ 10 ноября 2011

С учетом идентификатора процесса или потока, как написать функцию C ++, чтобы проверить, является ли она живой или нет. Я хотел бы реализовать это как в Windows, так и в Linux.

Ответы [ 3 ]

1 голос
/ 10 ноября 2011

Если вы не хотите добавлять в свой проект дополнительную библиотечную зависимость, вы можете обернуть системный код, используя директивы препроцессора (например, #ifdef _WIN32).

Windows

Функции GetExitCode * возвращают STILL_ACTIVE, если они выполнены успешно, а процесс или поток все еще существует.

Linux

  • kill - Отправьте нулевой сигнал (0), чтобы проверить, действителен ли pid.
1 голос
/ 10 ноября 2011

Сначала вам нужно решить, проверяете ли вы процесс или поток. Эти два имеют очень разную семантику. Для процессов попробуйте неофициальный Boost.Process . Для потоков Boost.Threads .

0 голосов
/ 10 ноября 2011

Указание, активен ли идентификатор процесса или идентификатор потока, - это два разных вопроса.

Идентификаторы потока проще - они являются частью процесса - и поэтому процесс должен знать, что он их создал, и можетпроверьте, являются ли они текущими.

ИД процесса - это другой вопрос - новый процесс может быть создан после того, как предыдущий onw умер с тем же идентификатором.

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

...