Как насчет создания чего-то, похожего на защиту троллей на доске объявлений ... Если обнаружена очистка (возможно, определенное количество обращений в минуту с одного IP-адреса или направленный обход, похожий на обход карты сайта), вы можете затем начать представлять данные мусора, например, изменить пару цифр телефонного номера или добавить глупые имена в поля имен.
Отключите это для IP-адресов Google!
Я считаю ваш комментарий о том, что невозможно записывать создание процессов как нечетных, но если вы действительно не можете (возможно, потому что вы не знаете, сколько будет создано и не хочу хранить realloc
в памяти), тогда я, вероятно, открыл бы все файлы, соответствующие glob / proc / [1-9] * / status
и найдите строку с PPid:
, где
был моим идентификатором процесса.
Вы можете использовать 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; }
Если вы хотите отслеживать события вилки и извлекать дочерние идентификаторы в целях отладки, есть несколько способов сделать это, в том числе:
Вы можете проанализировать список процессов (ps -ax?), Который включает идентификатор родительского процесса. Вероятно, это можно сделать с помощью простого сценария оболочки.
Обычно вполне возможно записывать дочерние процессы каждый раз, когда вы их запускаете. для удобства родительскому процессу передается значение pid дочернего процесса в качестве возвращаемого значения вызова fork, который его создает.
Как сказано на странице руководства:
pid_t fork(void);
Было бы полезно, если бы вы могли рассказать нам, почему вы так думаете невозможно.