Как завершить процесс в C ++? - PullRequest
0 голосов
/ 20 июня 2011

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

Ответы [ 2 ]

5 голосов
/ 20 июня 2011

В POSIX вы звоните kill(3), чтобы отправить SIGTERM процессу. В Windows вы звоните TerminateProcess().

0 голосов
/ 20 июня 2011

Предполагая, что вы работаете на * nix-платформе и у вас есть идентификатор процесса (т.е. вы сами порождали процесс, использовали какой-то другой метод для определения его pid), используя kill(2) работа:

#include <sys/types.h>
#include <signal.h>

void main() {
    /* ... */
    pid_t pid = ???;
    kill(pid, SIGTERM);
}

Он будет работать только при определенных условиях:

Чтобы процесс имел разрешение на отправку сигнала, он должен быть либо привилегированным (в Linux: иметь возможность CAP_KILL), либо действительный или эффективный идентификатор пользователя процесса отправки должен совпадать с действительным или сохраненным установленным идентификатором пользователя. целевого процесса. В случае SIGCONT этого достаточно, когда отправляющий и принимающий процессы принадлежат одному сеансу.

...