Получение pid моих детей с помощью системных вызовов Linux в C ++ - PullRequest
1 голос
/ 24 июня 2009

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

Я знаю команды, чтобы убить процессы, но у меня проблемы с получением pids моих детей. Кто-нибудь знает способ сделать это?

Ответы [ 3 ]

3 голосов
/ 24 июня 2009
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    FILE *fp = popen("ps -C *YOUR PROGRAM NAME HERE* --format '%P %p'" , "r");
    if (fp == NULL)
    {
        printf("ERROR!\n");
    }

    char parentID[256];
    char processID[256];
    while (fscanf(fp, "%s %s", parentID, processID) != EOF)
    {
         printf("PID: %s  Parent: %s\n", processID, parentID);

         // Check the parentID to see if it that of your process
    }

    pclose(fp);

    return 1;
}
2 голосов
/ 24 июня 2009

Этот вопрос очень похож на один вопрос, заданный на днях. Я бы посоветовал взглянуть здесь , чтобы увидеть, являются ли ответы удовлетворительными в вашем случае. В основном вам, вероятно, придется прочитать /proc.

1 голос
/ 24 июня 2009

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

Эта библиотека должна быть довольно хромой. Какую сделку вы заключили с ее поставщиком? Разве вы не можете получить их поддержку, чтобы исправить это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...