Как управлять потоком дочернего процесса

Я пытаюсь реализовать в отладчике следующую функцию: я хочу использовать отладчик для управления потоком в отлаживаемом процессе.
Отладчик является родительским процессом и использует функцию ptrace() для отладки дочернего процесса, но я не знаю, как управлять потоком (кроме основного) дочернего процесса из родительского процесса. Я хочу остановить или продолжить целевой поток. Есть какой-либо способ сделать это? так же, как код ниже

#include<pthread.h>
#include<stdio.h>

void *runner(void *param);
int main(int argc,char *argv[])
{
    int pid;
    pthread_t tid;
    pthread_attr_t attr;
    pid=fork();
    if(pid==0){
        pthread_attr_init(&attr);
        pthread_create(&tid,&attr,runner,NULL);
        pthread_join(tid,NULL);
        printf("CHILD VALUE=%d",value);
    }
    else if(pid>0){
        wait(NULL);
        printf("PARENT VALUE=%d",value);
    }
}


void *runner(void *param){
    int count = 0;
    while(1)
    { 
         printf("%d\n",count);
         count++;
         sleep(1);
    }
    pthread_exit(0);
}

В коде дочерний процесс создает поток для печати чисел в цикле. Могу ли я использовать некоторую функцию, например ptrace(), в родительском процессе для управления потоком? Приостановить или продолжить?


person wangxf    schedule 10.06.2015    source источник
comment
Вы можете использовать Mutex для межпроцессного взаимодействия. Просто передайте свой мьютекс дочернему процессу, затем подождите его в фоновом потоке дочернего процесса, не блокируя его (получите и немедленно освободите его). Таким образом, если ваш родительский процесс блокирует (получает) мьютекс, дочерний процесс останавливается, и если он освобождает мьютекс, дочерний процесс возобновляется.   -  person mg30rg    schedule 10.06.2015
comment
@mg30rg mg30rg Я не могу этого сделать, потому что я хочу реализовать это в отладчике, родительский процесс является отладчиком, а дочерний процесс находится в стадии отладки, поэтому я не могу изменить источник.   -  person wangxf    schedule 10.06.2015
comment
Затем измените свой вопрос соответствующим образом. Это важная деталь, о которой стоит упомянуть.   -  person mg30rg    schedule 10.06.2015
comment
@mg30rg хорошо, я добавлю эту деталь   -  person wangxf    schedule 10.06.2015
comment
В ответах на этот вопрос есть полезная информация: Как использовать PTRACE для получения согласованного представления нескольких потоков   -  person Mark Plotnick    schedule 06.07.2015