Как найти все дочерние процессы?

Как насчет создания чего-то, похожего на защиту троллей на доске объявлений ... Если обнаружена очистка (возможно, определенное количество обращений в минуту с одного IP-адреса или направленный обход, похожий на обход карты сайта), вы можете затем начать представлять данные мусора, например, изменить пару цифр телефонного номера или добавить глупые имена в поля имен.

Отключите это для IP-адресов Google!

16
задан c4757p 17 June 2009 в 21:13
поделиться

5 ответов

Я считаю ваш комментарий о том, что невозможно записывать создание процессов как нечетных, но если вы действительно не можете (возможно, потому что вы не знаете, сколько будет создано и не хочу хранить realloc в памяти), тогда я, вероятно, открыл бы все файлы, соответствующие glob / proc / [1-9] * / status и найдите строку с PPid: , где был моим идентификатором процесса.

4
ответ дан 30 November 2019 в 22:24
поделиться

Вы можете использовать popen

Что-то вроде. (Надеюсь, синтаксис достаточно близок)

#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;
}


5
ответ дан 30 November 2019 в 22:24
поделиться

Если вы хотите отслеживать события вилки и извлекать дочерние идентификаторы в целях отладки, есть несколько способов сделать это, в том числе:

  • Использование GDB
  • с использованием strace
  • Использование systemtap
  • Использование соединителей событий ядра (не уверен, что это именно)
0
ответ дан 30 November 2019 в 22:24
поделиться

Вы можете проанализировать список процессов (ps -ax?), Который включает идентификатор родительского процесса. Вероятно, это можно сделать с помощью простого сценария оболочки.

1
ответ дан 30 November 2019 в 22:24
поделиться

Обычно вполне возможно записывать дочерние процессы каждый раз, когда вы их запускаете. для удобства родительскому процессу передается значение pid дочернего процесса в качестве возвращаемого значения вызова fork, который его создает.

Как сказано на странице руководства:

pid_t fork(void);

Было бы полезно, если бы вы могли рассказать нам, почему вы так думаете невозможно.

5
ответ дан 30 November 2019 в 22:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: